縦横の次は斜め。基本的な処理は同じです。あとは成立するラインをどう判断するか。
目次
斜めのライン
縦横との違いは、斜めのラインは基本的に毎回判定を行います。斜めライン上の判定を入れてももちろん構いませんが、そのままビンゴかどうかのチェックしたほうが手っ取り早いためです。ゲームルール上問題がある場合はライン上のチェックとビンゴを分けてください。
斜めラインの識別
斜めのラインはみなさんご存知、次の2種類です。それぞれどの様に数式化出来るかが重要です。
- 右下がり
- 右上がり
例のごとく、for文で0~4までの数字がループすることを考えながら上の色の付いた数字を眺めましょう。上の数字からしたの方に流して見ると良いかも。
ヒント!考えがまとまった方や、わからん!という方はここをクリックでヒントを見てください。
- 右下がり
- 0,6,12,18,24
- こちらは6の倍数ですね。
- 右上がり
- 4,8,12,16,20
- 4の倍数っぽいけど、0番目の時に4にならなければならない点に注意
実際にプログラムしてみる
では上記の斜めの判別処理をプログラムにしてみましょう。以前作成したIsBingoメソッドを改造しますよ。プログラムの追加部分は下の方です。引数のsquareIndexは使わないですね。
public bool IsBingo(int squareIndex)
{
// まずはsquareIndexが有効かを確認する
if (squareIndex < 0 || SQUARE_COUNT <= squareIndex)
{
return false;
}
// そのsquareが開いているかを確認する
if (!bingoSquareList[squareIndex].isOpen)
{
return false;
}
// そのsquareがBingoになっているかを確認する
int row = squareIndex / 5;
int col = squareIndex % 5;
// 横の判定
bool isBingo = true;
for (int i = 0; i < 5; i++)
{
if (!bingoSquareList[row * 5 + i].isOpen)
{
isBingo = false;
break;
}
}
if (isBingo)
{
return true;
}
// 縦の判定
isBingo = true;
for (int i = 0; i < 5; i++)
{
if (!bingoSquareList[col + i * 5].isOpen)
{
isBingo = false;
break;
}
}
if (isBingo)
{
return true;
}
// 右下がり:左上から右下の斜め判定
isBingo = true;
for (int i = 0; i < 5; i++)
{
if (!bingoSquareList[i * 6].isOpen)
{
isBingo = false;
break;
}
}
if (isBingo)
{
Debug.Log("右下がり:左上から右下の斜め判定");
return true;
}
// 右上がり:右上から左下の斜め判定
isBingo = true;
for (int i = 0; i < 5; i++)
{
if (!bingoSquareList[(i + 1) * 4].isOpen)
{
isBingo = false;
break;
}
}
if (isBingo)
{
Debug.Log("右上がり:右上から左下の斜め判定");
return true;
}
return false;
}
動かして確認
プログラムの更新が出来たら、動かして確認しましょう。
斜めのライン成立時のデバッグログを確認
前回と同様、Nextでひたすらめくります。斜めのラインが成立するとログが表示されます。注意点としては斜めのビンゴ成立後は毎回ログが表示されます。
ログでの確認の性質上、最初に斜めのみのビンゴを引かないと確認出来ないので、一時的にプログラムを修正したり工夫してみてください。
コメント