これはTic-Tac-Toeゲームの一部です。 checkmateメソッドは、別の機能(ここでは示されていません)によって使用される文字列を返して、チック - タック - トウを移動します。ここ予期せぬ結果をもたらす条件付きのforeach-if-statment
ボードで、プレイヤは、一番上の行に並んだ二つの部品を有する:
public static char[] board = { '+', '+', 'E',
'A', 'S', 'D',
'Z', 'X', 'C' };
そしてここでは、次の動きを決定するコードは次のとおり
private static string checkmate()
{
List<char[]> dalist = new List<char[]>
{
new char[3] { board[3], board[4], board[5] },
new char[3] { board[0], board[4], board[8] },
new char[3] { board[2], board[4], board[6] },
new char[3] { board[1], board[4], board[7] },
new char[3] { board[0], board[1], board[2] },
new char[3] { board[6], board[7], board[8] },
new char[3] { board[0], board[3], board[6] },
new char[3] { board[2], board[5], board[8] }
};
foreach (var item in dalist)
{
if (item.Where(x => x == '+').Count() == 2)
return new string(item.Where(x => x != '+').ToArray());
else if (item.Where(x => x == '-').Count() == 2)
return new string(item.Where(x => x != '-').ToArray());
else if (item.Where(x => x == '+').Count() == 1)
return item.Where(x => x != '+').First().ToString();
else
{
Random random = new Random();
int rList = random.Next(0, 3);
int rPosition = random.Next(0, 2);
return dalist.ElementAt(rList).GetValue(rPosition).ToString();
}
}
return "AA";
}
方法A返しますボード上の移動に対応する文字列としての単一の文字。
方法は、チックタックつま先8つの可能入賞パターンのリストを作成し、そしてように順に加工される基板
論理四つの成分に既にあるものに対してそれらを試験することにより、ボードを解析しますforeachループ内のifelse条件式。 現在のメソッドでは、最初のif文でループのブレークアウトと 'E'が返されます。代わりに、プログラムはループ全体を通り、その最後のelse文を返します。 最初のif-conditionの一致を特定できないのはなぜですか?
ループは一致するまでリスト項目のそれぞれをループします。この動きは、相手がチェックメイト動きを有するかどうかを確認し、パスをブロックするチェックメイト動きがない場合) 利用できるものがある場合に当選移動が返され
1)checkmate
3 )link two
勝つため又はウィニングパスにリンクする第二片を配置します、これを遮断するためにチェックメイトがない場合
4)プレース初期ランダムに最初の2ラウンド
0のための四隅または中間のいずれかの
はい、コンピュータから離れて卵を持って、同じ結論に来ました。 – Aarondv1