Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
168
Task/Snake/Lua/snake.lua
Normal file
168
Task/Snake/Lua/snake.lua
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
UP, RIGHT, DOWN, LEFT = 1, 2, 3, 4
|
||||
UpdateTime=0.200
|
||||
Timer = 0
|
||||
GridSize = 30
|
||||
GridWidth, GridHeight = 20, 10
|
||||
|
||||
local directions = {
|
||||
[UP] = {x= 0, y=-1},
|
||||
[RIGHT] = {x= 1, y= 0},
|
||||
[DOWN] = {x= 0, y= 1},
|
||||
[LEFT] = {x=-1, y= 0},
|
||||
}
|
||||
|
||||
local function isPositionInBody(x, y)
|
||||
for i = 1, #Body-3, 2 do -- skip tail, it moves before we get in
|
||||
if x == Body[i] and y == Body[i+1] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function isPositionInApple(x, y)
|
||||
if x == Apple.x and y == Apple.y then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function newApple ()
|
||||
local ApplePlaced = false
|
||||
while not ApplePlaced do
|
||||
local x = GridSize*math.random (GridWidth)
|
||||
local y = GridSize*math.random (GridHeight)
|
||||
if not isPositionInBody(x, y) then
|
||||
Apple = {x=x, y=y}
|
||||
ApplePlaced = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function newGame ()
|
||||
Score = 0
|
||||
GameOver = false
|
||||
local x = GridSize*math.floor(math.random (0.25*GridWidth, 0.75*GridWidth))
|
||||
print (x)
|
||||
local y = GridSize*math.floor(math.random (0.25*GridHeight, 0.75*GridHeight))
|
||||
print (y)
|
||||
local iDirection = math.random(4)
|
||||
local d = directions[iDirection]
|
||||
Head = {
|
||||
x=x,
|
||||
y=y,
|
||||
iDirection = iDirection,
|
||||
nextDirection = iDirection,
|
||||
}
|
||||
Body = {x, y, x-GridSize*d.x, y-GridSize*d.y}
|
||||
Apples = {}
|
||||
newApple ()
|
||||
end
|
||||
|
||||
function love.load()
|
||||
newGame ()
|
||||
end
|
||||
|
||||
local function moveSnake (x, y, iDirection, longer)
|
||||
table.insert (Body, 1, x)
|
||||
table.insert (Body, 2, y)
|
||||
Head.x = x
|
||||
Head.y = y
|
||||
Head.iDirection = iDirection
|
||||
if not longer then
|
||||
-- remove last pair
|
||||
table.remove(Body)
|
||||
table.remove(Body)
|
||||
end
|
||||
if x <= 0 or x > GridSize*(GridWidth) or
|
||||
y <= 0 or y > GridSize*(GridHeight) then
|
||||
GameOver = true
|
||||
end
|
||||
end
|
||||
|
||||
function love.update(dt)
|
||||
Timer = Timer + dt
|
||||
if Timer < UpdateTime then return end
|
||||
Timer = Timer - UpdateTime
|
||||
|
||||
local iDirection = Head.nextDirection
|
||||
local d = directions[iDirection]
|
||||
local x, y = Head.x+GridSize*d.x, Head.y+GridSize*d.y
|
||||
if isPositionInBody(x, y) then
|
||||
GameOver = true
|
||||
elseif isPositionInApple(x, y) then
|
||||
Score = Score + 1
|
||||
newApple ()
|
||||
moveSnake (x, y, iDirection, true)
|
||||
else
|
||||
moveSnake (x, y, iDirection, false)
|
||||
end
|
||||
end
|
||||
|
||||
function drawHead () -- position, length, width and angle
|
||||
love.graphics.push()
|
||||
love.graphics.translate(Head.x, Head.y)
|
||||
love.graphics.rotate((Head.iDirection-2)*math.pi/2)
|
||||
love.graphics.polygon("fill",
|
||||
-GridSize/3, -GridSize /3,
|
||||
-GridSize/3, GridSize /3,
|
||||
GridSize/3, 0)
|
||||
love.graphics.pop()
|
||||
end
|
||||
|
||||
function love.draw()
|
||||
love.graphics.setColor(0,1,0)
|
||||
love.graphics.print ('Score: '..tostring(Score), 10, 10)
|
||||
if GameOver then
|
||||
love.graphics.print ('Game Over: '..tostring(GameOver)..'. Press "Space" to continue', 10, 30)
|
||||
else
|
||||
love.graphics.translate(GridSize, GridSize)
|
||||
love.graphics.setColor(0.6,0.6,0.6)
|
||||
love.graphics.setLineWidth(0.25)
|
||||
for x = GridSize, GridSize*GridWidth, GridSize do
|
||||
love.graphics.line (x, GridSize, x, GridSize*GridHeight)
|
||||
end
|
||||
for y = GridSize, GridSize*GridHeight, GridSize do
|
||||
love.graphics.line (GridSize, y, GridSize*GridWidth, y)
|
||||
end
|
||||
love.graphics.setLineWidth((GridSize/4)+0.5)
|
||||
love.graphics.setColor(1,1,1)
|
||||
love.graphics.line (Body)
|
||||
drawHead ()
|
||||
love.graphics.setColor(1,0,0)
|
||||
love.graphics.circle ('fill', Apple.x, Apple.y, GridSize/4)
|
||||
end
|
||||
end
|
||||
|
||||
function love.keypressed(key, scancode, isrepeat)
|
||||
if false then
|
||||
elseif key == "space" then
|
||||
if GameOver then
|
||||
GameOver = false
|
||||
newGame ()
|
||||
end
|
||||
elseif key == "escape" then
|
||||
love.event.quit()
|
||||
else
|
||||
local iDirection = Head.iDirection
|
||||
if iDirection == UP or
|
||||
iDirection == DOWN then
|
||||
local right = love.keyboard.isScancodeDown ("d")
|
||||
local left = love.keyboard.isScancodeDown ("a")
|
||||
if right and not left then
|
||||
iDirection = RIGHT
|
||||
elseif left and not right then
|
||||
iDirection = LEFT
|
||||
end
|
||||
else -- right or left
|
||||
local down = love.keyboard.isScancodeDown ("s")
|
||||
local up = love.keyboard.isScancodeDown ("w")
|
||||
if up and not down then
|
||||
iDirection = UP
|
||||
elseif down and not up then
|
||||
iDirection = DOWN
|
||||
end
|
||||
end
|
||||
Head.nextDirection = iDirection
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue