I made this snake game (its free roaming so you can turn in all directions not cell based) for a codea user and I thought it the ideas behind it were so simple it would be good for beginners.
Start moving your finger over the screen in different directions and you’ll soon know how to make it turn. Feel free to use this however you please.
-- snake by Luatee
-- Use this function to perform your initial setup
function setup()
-- We set up a table of the snake parts (1. Head, 2+. Body) 3 to begin with the first being the head
snaketbl = {vec2(WIDTH/2,100),vec2(WIDTH/2,80),vec2(WIDTH/2,60)}
snakespeed = 3
-- Give the snake some food as a position
snakefood = vec2(100,HEIGHT-200)
-- Direction the snake travels
snakedir = vec2(0,1)
score = 0
started = false
fontSize(20)
parameter.watch("math.floor(snakespeed*10)/10")
end
function touched(t)
-- Start the program when first tapped
if started == false and t.state == BEGAN then
started = true
end
-- Move snake according to touch direction
snakedir = snakedir + vec2(t.deltaX/75,t.deltaY/75)
snakedir = snakedir:normalize()
end
-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(71, 71, 90, 255)
-- This sets the line thickness
strokeWidth(2)
-- This creates a scope in which different styles can be set (i.e. fill,stroke,blendMode)
pushStyle()
for i=1,#snaketbl do
if i>1 then
-- This makes the previous part of the snakes body link to the one in front
snaketbl[i] = snaketbl[i-1]+(snaketbl[i]-snaketbl[i-1]):normalize()*20
end
fill(0,200,30)
-- Draw snake body using ellipse
ellipse(snaketbl[i].x,snaketbl[i].y,20)
end
if started then
fill(40, 110, 130, 255)
ellipse(snakefood.x,snakefood.y,30)
popStyle()
-- Move the snakes head (snaketbl[1]) using the snakespeed and direction of travel
snaketbl[1] = snaketbl[1] + snakedir*snakespeed
-- Slowly increase the snakespeed to add difficulty
snakespeed = snakespeed + 0.0005
else
text([[
Tap the screen to begin!
Rules:
Drag your finger in the direction you want
the snake to turn to. If you leave the screen
you will die. Eat the food to become bigger!
Warning the snake speeds up over time!]],WIDTH/2,HEIGHT/2)
end
-- Kill the snake if it hits the wall and restart program
if snaketbl[1].x<10 or snaketbl[1].x>WIDTH-10 or snaketbl[1].y<10 or snaketbl[1].y>HEIGHT-10 then
setup()
end
-- Check if the snake head can reach its food
if snaketbl[1]:dist(snakefood)<20 then
-- Move snakefood once eaten
snakefood = vec2(math.random(50,WIDTH-50),math.random(50,HEIGHT-50))
score = score + 1
-- Add new part to snake body
table.insert(snaketbl,snaketbl[#snaketbl])
end
text("Score: "..score,50,50)
end
Enjoy, hope you guys can use this.