JavaScript初心者練習——井字棋
4798 ワード
井字棋は簡単なゲームで、貧乏挙を通じて、私たちは簡単に井字棋のすべての可能な歩き方を記録します.だから私たちのAIが実現できる能力は
先手:できるだけ勝つ
後手:負けないことを保証し、プレイヤーがミスをした場合に勝つ
1.将棋(落子)の関数がある
2.勝負を判断する関数がある
窮挙して知る
先手として、次のコーナーを占めれば、プレイヤーは残りの8つの位置のうち、7つが必ず負けます.残りの1つの方法も、せいぜい引き分けにすぎない.
後手としてはもっと簡単で、プレイヤーがどのように開局しても、AIが前の2つの碁に当たったら、後はプレイヤーの碁を止めるだけでいい.
だから必要だ
1.プレイヤーのサブの状況に応じて、AIに特定の位置(2ステップのみ)を降ろす.
2.攻撃関数は、プレイヤーのミスを捕まえたり、プレイヤーの放水を防止したりするために3つの子を結合して勝利を得る.プレイヤーの駒をブロックする守備関数があり、3つの子に接続できないようにします.
3.引き分けの場合、碁盤を満たすランダムなサブ関数があります.
優先順位:攻撃>ディフェンス>ランダム
**スタンプここで試用**
勝負と攻撃守備関数を判断するために使用される碁盤配列.
判定勝負関数(駒にはカスタム属性が設定されており、いずれかの線上が「111」につながれば一線を代表し、プレイヤーは勝てないため、プレイヤーが勝つかどうかを判断する必要はない)
アタック関数
AI将棋関数
先手:できるだけ勝つ
後手:負けないことを保証し、プレイヤーがミスをした場合に勝つ
ゲームの基本
1.将棋(落子)の関数がある
2.勝負を判断する関数がある
AI部分
窮挙して知る
先手として、次のコーナーを占めれば、プレイヤーは残りの8つの位置のうち、7つが必ず負けます.残りの1つの方法も、せいぜい引き分けにすぎない.
後手としてはもっと簡単で、プレイヤーがどのように開局しても、AIが前の2つの碁に当たったら、後はプレイヤーの碁を止めるだけでいい.
だから必要だ
1.プレイヤーのサブの状況に応じて、AIに特定の位置(2ステップのみ)を降ろす.
2.攻撃関数は、プレイヤーのミスを捕まえたり、プレイヤーの放水を防止したりするために3つの子を結合して勝利を得る.プレイヤーの駒をブロックする守備関数があり、3つの子に接続できないようにします.
3.引き分けの場合、碁盤を満たすランダムなサブ関数があります.
優先順位:攻撃>ディフェンス>ランダム
**スタンプここで試用**
一部のJSコード:
勝負と攻撃守備関数を判断するために使用される碁盤配列.
arr = [[0, 1, 2],[0, 3, 6],[1, 4, 7],[2, 5, 8],[3, 4, 5],[6, 7, 8],[0, 4, 8],[2, 4, 6]]
判定勝負関数(駒にはカスタム属性が設定されており、いずれかの線上が「111」につながれば一線を代表し、プレイヤーは勝てないため、プレイヤーが勝つかどうかを判断する必要はない)
function checkSituation() {
if (arr.some(function(item) {
return concatBox(item) == "111";
})) {
result(" :-(");
} else if ($("button[disabled]").length === 9) {
result(" ");
}
}
アタック関数
// "0" ,"1" AI ,"-1"
function attack(arr) {
switch (concatBox(arr)) {
case "011":
aiClick(arr[0]);
return true;
case "101":
aiClick(arr[1]);
return true;
case "110":
aiClick(arr[2]);
return true;
}
}
function defense(arr) {
switch (concatBox(arr)) {
case "0-1-1":
aiClick(arr[0]);
return true;
case "-10-1":
aiClick(arr[1]);
return true;
case "-1-10":
aiClick(arr[2]);
return true;
}
}
AI将棋関数
function aiRound() {
//
if (arr.some(function(item) {
return attack(item);
})) {
return;
}
//
if (arr.some(function(item) {
return defense(item);
})) {
return;
}
// AI
if (AI === "X") {
if (aiSteps === 1) {
switch (true) {
case box(1) == -1 || box(3) == -1:
Xcase = "1";
aiClick(4);
break;
case box(2) == -1 || box(6) == -1:
Xcase = "2";
aiClick(8);
break;
case box(5) == -1 || box(7) == -1:
Xcase = "3";
aiClick(4);
break;
case box(8) == -1:
Xcase = "4";
aiClick(2);
break;
default:
aiClick(8);
break;
}
}
if (aiSteps === 2) {
switch (Xcase) {
case "1":
if (box(3) == -1) { aiClick(2); } else { aiClick(6); }
break;
case "2":
if (box(2) == -1) { aiClick(6); } else { aiClick(2); }
break;
case "3":
if (box(5) == -1) { aiClick(2); } else { aiClick(6); }
break;
case "4":
aiClick(6);
break;
}
}
}
// AI
if (AI === "O") {
if (aiSteps === 0) {
if (box(4) == -1) {
aiClick(0);
} else {
aiClick(4);
}
} else if (aiSteps === 1) {
if (parseInt(box(0)) + parseInt(box(2)) + parseInt(box(6)) + parseInt(box(8)) == 2) { aiClick(1); }
else if (twoBox(2, 3) || twoBox(1, 6) || twoBox(1, 3)) { aiClick(0); }
else if (twoBox(0, 5) || twoBox(1, 8) || twoBox(1, 5)) { aiClick(2); }
else if (twoBox(0, 7) || twoBox(3, 8) || twoBox(3, 7)) { aiClick(6); }
else if (twoBox(5, 7) || twoBox(5, 6) || twoBox(2, 7)) { aiClick(8); }
else if (twoBox(0, 8) || twoBox(2, 6)) { aiClick(1); }
else { aiClick(2); }
} else if (aiSteps === 2 || aiSteps === 3) { randomStep(); }
}
}