パズルアンド〇ラゴンズや、愛と勇気と〇しわもちのように、いくつか並んだら消える、というパズルゲームを作ろうと思ってます。
そこで、私は判定方法で苦戦しているのですが、教えていただけないでしょうか。
今まで書いてきたやり方では以下の通りです。
for nextのループでX,Y座標(列)を指定し、その列の組み合わせを全通り調べて、消えるようならばそこの座標の変数を5にします。
*yoko
if cal(0,y)=cal(1,y) and cal(0,y)=cal(2,y) and cal(0,y)=cal(3,y) :cal(0,y)=5:cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:foooo=1
if cal(1,y)=cal(2,y) and cal(1,y)=cal(3,y) and cal(1,y)=cal(4,y) :cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:foooo=1
if cal(2,y)=cal(3,y) and cal(2,y)=cal(4,y) and cal(2,y)=cal(5,y) :cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:foooo=1
if cal(3,y)=cal(4,y) and cal(3,y)=cal(5,y) and cal(3,y)=cal(6,y) :cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:foooo=1
if cal(4,y)=cal(5,y) and cal(4,y)=cal(6,y) and cal(4,y)=cal(7,y) :cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:cal(7,y)=5:foooo=1
if cal(0,y)=cal(1,y) and cal(0,y)=cal(2,y) and cal(0,y)=cal(3,y) and cal(0,y)=cal(4,y) :cal(0,y)=5:cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:foooo=1
if cal(1,y)=cal(2,y) and cal(1,y)=cal(3,y) and cal(1,y)=cal(4,y) and cal(1,y)=cal(5,y) :cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:foooo=1
if cal(2,y)=cal(3,y) and cal(2,y)=cal(4,y) and cal(2,y)=cal(5,y) and cal(2,y)=cal(6,y) :cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:foooo=1
if cal(3,y)=cal(4,y) and cal(3,y)=cal(5,y) and cal(3,y)=cal(6,y) and cal(3,y)=cal(7,y) :cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:cal(7,y)=5:foooo=1
if cal(0,y)=cal(1,y) and cal(0,y)=cal(2,y) and cal(0,y)=cal(3,y) and cal(0,y)=cal(4,y) and cal(0,y)=cal(5,y) :cal(0,y)=5:cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:foooo=1
if cal(1,y)=cal(2,y) and cal(1,y)=cal(3,y) and cal(1,y)=cal(4,y) and cal(1,y)=cal(5,y) and cal(1,y)=cal(6,y) :cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:foooo=1
if cal(2,y)=cal(3,y) and cal(2,y)=cal(4,y) and cal(2,y)=cal(5,y) and cal(2,y)=cal(6,y) and cal(2,y)=cal(7,y) :cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:cal(7,y)=5:foooo=1
if cal(0,y)=cal(1,y) and cal(0,y)=cal(2,y) and cal(0,y)=cal(3,y) and cal(0,y)=cal(4,y) and cal(0,y)=cal(5,y) and cal(0,y)=cal(6,y) :cal(0,y)=5:cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:foooo=1
if cal(1,y)=cal(2,y) and cal(1,y)=cal(3,y) and cal(1,y)=cal(4,y) and cal(1,y)=cal(5,y) and cal(1,y)=cal(6,y) and cal(1,y)=cal(7,y) :cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:cal(7,y)=5:foooo=1
if cal(0,y)=cal(1,y) and cal(0,y)=cal(2,y) and cal(0,y)=cal(3,y) and cal(0,y)=cal(4,y) and cal(0,y)=cal(5,y) and cal(0,y)=cal(6,y) and cal(0,y)=cal(7,y) :cal(0,y)=5:cal(1,y)=5:cal(2,y)=5:cal(3,y)=5:cal(4,y)=5:cal(5,y)=5:cal(6,y)=5:cal(7,y)=5:foooo=1
return
(縦も同様)
しかし、これでは5つ並んだ時に消えない不具合が起きたり、文が長すぎて動きが遅い気がするのです。
これの間違いをしていただくか、もっと短く書く方法を教えていただきたいです。
ここの掲示板に書かれてあることはみんな(私にとって)レベルが高いのでこんなことで投稿していいのかと思いますが、
教えていただけたら非常にありがたいです。