Microsoft Small Basic

Program Listing: KLB414-0
' Air Hockey 0.11a
' Copyright (c) 2013 Nonki Takahashi, All rights reserved.
'
' History:
' 0.11a 2013-07-29 Modified for Silverlight. (KLB414-0)
' 0.1a 2013-07-29 Created as alpha version. (KLB414)
'
GraphicsWindow.Title = "Air Hockey 0.11a"
gw = 640
gh = 480
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.BackgroundColor = "DimGray"
Field_Init()
continue = "True"
While continue
Game_Init()
Game_Start()
Game_End()
EndWhile
Sub Field_Init
field["width"] = 600
field["height"] = 400
field["x"] = (gw - field["width"]) / 2
field["y"] = (gh - field["height"]) / 2
field["x2"] = field["x"] + field["width"]
field["y2"] = field["y"] + field["height"]
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(field["x"], field["y"], field["width"], field["height"])
GraphicsWindow.BrushColor = "Gray"
GraphicsWindow.PenWidth = 0
mallet[1]["size"] = 30
mallet[1]["r"] = mallet[1]["size"] / 2
mallet[1]["obj"] = Shapes.AddEllipse(mallet[1]["size"], mallet[1]["size"])
mallet[2]["size"] = 30
mallet[2]["r"] = mallet[2]["size"] / 2
mallet[2]["obj"] = Shapes.AddEllipse(mallet[2]["size"], mallet[2]["size"])
GraphicsWindow.BrushColor = "Black"
puck["size"] = 20
puck["r"] = puck["size"] / 2
puck["obj"] = Shapes.AddEllipse(puck["size"], puck["size"])
EndSub
Sub Game_Init
x = field["x"]
y = gh / 2
mallet[1]["cx"] = x + 20
mallet[1]["cy"] = y
Shapes.Move(mallet[1]["obj"], mallet[1]["cx"] - mallet[1]["r"], mallet[1]["cy"] - mallet[1]["r"])
mallet[2]["cx"] = x + field["width"] - 20
mallet[2]["cy"] = y
Shapes.Move(mallet[2]["obj"], mallet[2]["cx"] - mallet[2]["r"], mallet[2]["cy"] - mallet[2]["r"])
puck["cx"] = x + (field["width"] / 2)
puck["cy"] = y
Shapes.Move(puck["obj"], puck["cx"] - puck["r"], puck["cy"] - puck["r"])
puck["vx"] = 400
puck["vy"] = 400
EndSub
Sub Game_Start
inGame = "True"
dt = 1 / 24 ' [second]
Timer.Interval = dt * 1000
Timer.Tick = OnTick
While inGame
Program.Delay(dt * 500) ' for Silverlight
EndWhile
EndSub
Sub Game_End
EndSub
Sub OnTick
Timer.Pause()
x = puck["cx"] + dt * puck["vx"]
If x < field["x"] + puck["r"] Then
puck["cx"] = field["x"] + puck["r"] + (field["x"] + puck["r"] - x)
puck["vx"] = -puck["vx"]
Sound.PlayClick()
ElseIf field["x2"] - puck["r"] < x Then
puck["cx"] = field["x2"] - puck["r"] - (x - (field["x2"] - puck["r"]))
puck["vx"] = -puck["vx"]
Sound.PlayClick()
Else
puck["cx"] = x
EndIf
y = puck["cy"] + dt * puck["vy"]
If y < field["y"] + puck["r"] Then
puck["cy"] = field["y"] + puck["r"] + (field["y"] + puck["r"] - y)
puck["vy"] = -puck["vy"]
Sound.PlayClick()
ElseIf field["y2"] - puck["r"] < y Then
puck["cy"] = field["y2"] - puck["r"] - (y - (field["y2"] - puck["r"]))
puck["vy"] = -puck["vy"]
Sound.PlayClick()
Else
puck["cy"] = y
EndIf
Shapes.Move(puck["obj"], puck["cx"] - puck["r"], puck["cy"] - puck["r"])
Timer.Resume()
EndSub