152 lines
3.8 KiB
Lua
152 lines
3.8 KiB
Lua
windowCenter = {196, 104}
|
|
gameDims = {100, 70}
|
|
paddleDims = {2, 8}
|
|
ballDims = {3, 3}
|
|
ballSpeed = 60
|
|
paddleSpeed = 60
|
|
|
|
gameRect = {
|
|
windowCenter[1] - gameDims[1] - ballDims[1],
|
|
windowCenter[2] - gameDims[2] - ballDims[2],
|
|
windowCenter[1] + gameDims[1] + ballDims[1],
|
|
windowCenter[2] + gameDims[2] + ballDims[2]
|
|
}
|
|
|
|
p1, p2, ball = {}, {}, {}
|
|
|
|
function init()
|
|
newGame()
|
|
|
|
self.canvas = widget.bindCanvas("scriptCanvas")
|
|
widget.focus("scriptCanvas")
|
|
end
|
|
|
|
function newGame()
|
|
p1.pos = {windowCenter[1] - gameDims[1] + 5, windowCenter[2]}
|
|
p2.pos = {windowCenter[1] + gameDims[1] - 5, windowCenter[2]}
|
|
p1.score = 0
|
|
p2.score = 0
|
|
p1.move = 0
|
|
p2.move = 0
|
|
|
|
resetBall()
|
|
end
|
|
|
|
function update(dt)
|
|
self.canvas:clear()
|
|
|
|
ball.pos[1] = ball.pos[1] + ball.vel[1] * dt
|
|
ball.pos[2] = ball.pos[2] + ball.vel[2] * dt
|
|
|
|
p1.pos[2] = p1.pos[2] + p1.move * dt
|
|
p2.pos[2] = p2.pos[2] + p2.move * dt
|
|
|
|
if ball.pos[2] >= windowCenter[2] + gameDims[2] or ball.pos[2] <= windowCenter[2] - gameDims[2] then
|
|
ball.vel[2] = -ball.vel[2]
|
|
end
|
|
|
|
if ballHitPaddle(p1) then
|
|
ball.vel[1] = ballSpeed
|
|
elseif ballHitPaddle(p2) then
|
|
ball.vel[1] = -ballSpeed
|
|
end
|
|
|
|
if ball.pos[1] >= windowCenter[1] + gameDims[1] then
|
|
p1.score = p1.score + 1
|
|
resetBall()
|
|
elseif ball.pos[1] <= windowCenter[1] - gameDims[1] then
|
|
p2.score = p2.score + 1
|
|
resetBall()
|
|
end
|
|
|
|
drawBorders()
|
|
drawPaddle(p1)
|
|
drawPaddle(p2)
|
|
drawBall()
|
|
drawScore()
|
|
end
|
|
|
|
function resetBall()
|
|
ball.pos = {windowCenter[1], windowCenter[2]}
|
|
ball.vel = {ballSpeed * util.randomDirection(), ballSpeed * util.randomDirection()}
|
|
end
|
|
|
|
function ballHitPaddle(paddle)
|
|
return math.abs(ball.pos[1] - paddle.pos[1]) < paddleDims[1] + ballDims[1] and math.abs(ball.pos[2] - paddle.pos[2]) < paddleDims[2]
|
|
end
|
|
|
|
function drawBorders()
|
|
self.canvas:drawRect(
|
|
gameRect,
|
|
{0, 40, 0}
|
|
)
|
|
end
|
|
|
|
function drawBall()
|
|
self.canvas:drawRect(
|
|
{ball.pos[1] - ballDims[1], ball.pos[2] - ballDims[2], ball.pos[1] + ballDims[1], ball.pos[2] + ballDims[2]},
|
|
{255, 255, 255}
|
|
)
|
|
end
|
|
|
|
function drawPaddle(paddle)
|
|
self.canvas:drawRect(
|
|
{paddle.pos[1] - paddleDims[1], paddle.pos[2] - paddleDims[2], paddle.pos[1] + paddleDims[1], paddle.pos[2] + paddleDims[2]},
|
|
{255, 255, 255}
|
|
)
|
|
end
|
|
|
|
function drawScore()
|
|
self.canvas:drawText(
|
|
"Player 1: "..p1.score,
|
|
{position={gameRect[1] - 85, gameRect[4]}, horizontalAnchor="left", verticalAnchor="top"},
|
|
14,
|
|
{255, 255, 255}
|
|
)
|
|
self.canvas:drawText(
|
|
"Player 2: "..p2.score,
|
|
{position={gameRect[3] + 5, gameRect[4]}, horizontalAnchor="left", verticalAnchor="top"},
|
|
14,
|
|
{255, 255, 255}
|
|
)
|
|
end
|
|
|
|
function canvasClickEvent(position, button, isButtonDown)
|
|
sb.logInfo("Mouse button %s was %s at %s", button, isButtonDown and "pressed" or "released", position)
|
|
end
|
|
|
|
function canvasKeyEvent(key, isKeyDown)
|
|
sb.logInfo("Key %s was %s", key, isKeyDown and "pressed" or "released")
|
|
|
|
if key == 43 then
|
|
p1.move = isKeyDown and paddleSpeed or 0
|
|
elseif key == 68 then
|
|
p1.move = isKeyDown and -paddleSpeed or 0
|
|
elseif key == 87 then
|
|
p2.move = isKeyDown and paddleSpeed or 0
|
|
elseif key == 88 then
|
|
p2.move = isKeyDown and -paddleSpeed or 0
|
|
end
|
|
end
|
|
|
|
function printTable(t, indent)
|
|
if not indent then
|
|
indent = ""
|
|
sb.logInfo("Printing table...")
|
|
end
|
|
local tnames = {}
|
|
for k,v in pairs(t) do
|
|
tnames[#tnames + 1] = k
|
|
end
|
|
table.sort(tnames, function(a, b) return a < b end)
|
|
for _, key in ipairs(tnames) do
|
|
if type(t[key]) == "table" then
|
|
sb.logInfo(indent.."table "..key)
|
|
printTable(t[key], indent.." ")
|
|
elseif type(t[key]) == "function" then
|
|
sb.logInfo(indent.."function "..key)
|
|
else
|
|
sb.logInfo(indent..type(t[key]).." "..key.." = %s", t[key])
|
|
end
|
|
end
|
|
end
|