Here is my pool game, any improvements would be appreciated, I still haven’t got the balls to go on the right side after they go in the pocket.
-- Pool
solids={1,2,3,4,5,6,7}
stripes={9,10,11,12,13,14,15}
function setup()
displayMode(FULLSCREEN)
HEIGHT=600
w1 = physics.body(EDGE,vec2(95,55),vec2(WIDTH/2-30,55))
d1 = physics.body(EDGE,vec2(WIDTH/2+30,55),vec2(WIDTH-95,55))
w2 = physics.body(EDGE,vec2(55,100),vec2(55,HEIGHT-100))
w3 = physics.body(EDGE,vec2(WIDTH-55,100),vec2(WIDTH-55,HEIGHT-100))
w4 = physics.body(EDGE,vec2(95,HEIGHT-55),vec2(WIDTH/2-30,HEIGHT-55))
d2 = physics.body(EDGE, vec2(WIDTH/2+30,HEIGHT-55),vec2(WIDTH-95,HEIGHT-55))
physics.gravity(0,0)
cue = move(300,HEIGHT/2,0,0)
one = move(750,HEIGHT/2,0,0)
two = move(862.5,300,0,0)
three = move(860,320,0,0)
four = move(870,230,0,0)
five = move(830,245,0,0)
six = move(800,265,0,0)
seven = move(830,317.5,0,0)
eight = move(800,300,0,0)
nine = move(800,335,0,0)
ten = move(775,275,0,0)
eleven = move(775,315,0,0)
twelve = move(830,282.5,0,0)
thirteen = move(840,350,0,0)
fourteen = move(870,370,0,0)
fifteen = move(860,290,0,0)
player=-1
end
function move(cuex,cuey,speedx,speedy)
local p = physics.body(CIRCLE,20)
p.restitution = .8
p.linearVelocity = vec2(speedx,speedy)
p.linearDamping = 0.8
p.x = cuex
p.y= cuey
p.bullet = true
return p
end
function poolangle(srcx,srcy,lenx,leny)
local distx = lenx-srcx
local disty = leny-srcy
angle = math.deg(math.atan(disty/distx))
return angle
end
ballplace=160
function inthehole(center_x, center_y, radius,p)
dist = math.sqrt((center_x - p.x)^2 + (center_y - p.y)^2)
if dist <= radius then
if p == cue then
p:destroy()
p = move(200,300,0,0)
else
ballp = ballplace
ballplace = ballplace + 40
player = -player
if player == -1 then
ballplace = WIDTH-ballplace
end
p:destroy()
p = move(ballplace,650,0,0)
if player == -1 then
ballplace = ballp
end
end
end
return p
end
function hit(one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,cue)
array = {one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,cue}
for i=1,16 do
array[i] = inthehole(50,50,30,array[i])
array[i] = inthehole(50,HEIGHT-50,30,array[i])
array[i] = inthehole(975,HEIGHT-50,30,array[i])
array[i] = inthehole(975,50,30,array[i])
array[i] = inthehole(512.5,35,25,array[i])
array[i] = inthehole(512.5,HEIGHT-35,25,array[i])
end
return array[1],array[2],array[3],array[4],array[5],array[6],array[7],array[8],array[9],array[10],array[11],array[12],array[13],array[14],array[15],array[16]
end
-- This function gets called once every frame
function draw()
gameover = true
-- This sets a dark background color
one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,cue = hit(one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,cue)
pushStyle()
strokeWidth(5)
background(35, 83, 160, 255)
sprite("Documents:hay",WIDTH/2,HEIGHT/2,WIDTH,HEIGHT)
fill(255)
ellipse(cue.x, cue.y,40)
fill(255, 255, 255, 255)
sprite("Documents:8",eight.x,eight.y,40,40)
sprite("Documents:1",one.x,one.y,40,40)
sprite("Documents:2",two.x,two.y,40,40)
sprite("Documents:3",three.x,three.y,40,40)
sprite("Documents:4",four.x,four.y,40,40)
sprite("Documents:5",five.x,five.y,40,40)
sprite("Documents:6",six.x,six.y,40,40)
sprite("Documents:7",seven.x,seven.y,40,40)
sprite("Documents:9",nine.x,nine.y,40,40)
sprite("Documents:10",ten.x,ten.y,40,40)
sprite("Documents:11",eleven.x,eleven.y,40,40)
sprite("Documents:12",twelve.x,twelve.y,40,40)
sprite("Documents:13",thirteen.x,thirteen.y,40,40)
sprite("Documents:14",fourteen.x,fourteen.y,40,40)
sprite("Documents:15",fifteen.x,fifteen.y,40,40)
fontSize(25)
text("Player One",100,730)
text("Player Two",900,730)
sprite("Documents:bad guy",900,650)
sprite("Documents:good",100,650)
if CurrentTouch.state == BEGAN then
push=true
srcx = cue.x
srcy = cue.y
elseif CurrentTouch.state == MOVING then
lenx = CurrentTouch.x
leny = CurrentTouch.y
distx = lenx-srcx
disty = leny-srcy
line(cue.x,cue.y,cue.x-distx,cue.y-disty)
--line(cue.x,cue.y,cue.x+(xchange/math.abs(xchange))*100,cue.y+(xchange/math.abs(xchange))*100*(ychange/xchange))
elseif CurrentTouch.state == ENDED then
if push then
cue:destroy()
cue = move(cue.x,cue.y,-distx*4,-disty*4)
push=false
end
popStyle()
end
end