PICO-8でスネークゲームをつくっています。
今回は、ヘビとカエルの当たり判定の一部を実装しました。
ヘビとカエルの当たり判定は、矩形をチェックするだけなので、難しくはなかったのですが、蛇の体を長くすることが、面倒でした。
当たり判定をして、キャラクタ分を長くするコード
for frog in all(frogs) do
if (coll(frog,st[sl*8])) then
del(frogs,frog)
local x_inc=0 local y_inc=0
if (st[1].d==0) x_inc=-1
if (st[1].d==1) x_inc= 1
if (st[1].d==2) y_inc=-1
if (st[1].d==3) y_inc= 1
local table={}
for i=8,1,-1 do
local e={x=st[1].x+x_inc*(9-i),
y=st[1].y+y_inc*(9-i),
box={x1=1,y1=1,x2=6,y2=6},
d=st[1].d}
add(table,e)
end
for e in all(st) do
add(table,e)
end
st=table
sl+=1
end
end
衝突チェック関数
function coll(a,b)
local box_a=abs_box(a)
local box_b=abs_box(b)
if box_a.x1 > box_b.x2 or
box_a.y1 > box_b.y2 or
box_b.x1 > box_a.x2 or
box_b.y1 > box_a.y2 then
return false
end
return true
end
当たり判定矩形を座標系へ変換する関数
function abs_box(s)
local box={}
box.x1=s.box.x1+s.x
box.y1=s.box.y1+s.y
box.x2=s.box.x2+s.x
box.y2=s.box.y2+s.y
return box
end
配列を逆にして管理しているので、先頭の部分に新しい要素を入れなければいけません。
頭から尻尾と配列の順番が逆なので、紙にメモしながら、コードを書いていきました。
でも、なんとか頑張って実装できましたので、結果を動画など見てください。
次は、カエルとヘビの体の部分を実装したいと思います。
これは、当たり判定の応用なので、楽だと(?)思います。
コメント