私はこのプロジェクトをシェリングの分離モデルを再現しようとしています。配列の4つの隣接するセルが、テストされている現在のセルと比較して同じか、異なるか、または空であるかどうかを確認するためにテストしている関数(以下)があります。
アレイ内のすべてのセルに対してテストされる可能性のある4つのスポットがあります。しかし、コーナーやサイドスポットでは、明らかに範囲外のスペースをテストすることはできません。したがって、関数では、範囲外のスペースの1つが見つかった場合、セルの周囲の合計数を減らします。ただし、キャッチされていない参照エラーがあることを通知してクラッシュし続けます:未定義のプロパティ「0」を読み取ることができません。なぜクラッシュしたのかわかりません。
このコードの最後の行は、商品の数(類似したセル)とその周囲のセルの総数(空のセルはカウントされません)を取り、類似したパーセンテージを取得します。
なぜクラッシュしてエラーが発生するのかを教えていただければ幸いです。ありがとう!
model.Test = function( i, j )
{
var numberToTest= 4;
var goods= 0;
if ((i - 1) >= 0)
{
if (model.BoardArray[i-1][j] != "E")
{
if (model.BoardArray[i][j] == model.BoardArray[i-1][j])
{
goods++;
}
}
else
{
numberToTest--;
}
}
else
{
numberToTest--;
}
if((i + 1) < $("#BoardSizeValue").val())
{
if (model.BoardArray[i+1][j] != "E")
{
if (model.BoardArray[i][j] == model.BoardArray[i+1][j])
{
goods++;
}
}
else
{
numberToTest--;
}
}
else
{
numberToTest--;
}
if ((j - 1) >= 0)
{
if (model.BoardArray[i][j-1] != "E")
{
if (model.BoardArray[i][j] == model.BoardArray[i][j-1])
{
goods++;
}
}
else
{
numberToTest--;
}
}
else
{
numberToTest--;
}
if ((j + 1) < $("#BoardSizeValue").val())
{
if (model.BoardArray[i][j+1] != "E")
{
if (model.BoardArray[i][j] == model.BoardArray[i][j+1])
{
goods++;
}
}
else
{
numberToTest--;
}
}
else
{
numberToTest--;
}
var similar = $("#SimilarSlider").val()/100;
if (numberToTest == 0)
{
return false;
}
else
{
var needed = goods/numberToTest;
if (needed >= similar)
{
return false;
}
else
{
return true;
}
}
}