-3

私は、JavaScript を使用して Tic Tac Toe ゲームを作成し、自分のターンでランダムなボックスを選択する AI を作成しました。ただし、同じボックスを 2 回選択したり、プレイヤー (X) が選択したボックスを選択したりすることもあります。コードは次のとおりです。

                   <!DOCTYPE html>
                   <html>
                   <body>

                   <input type="button" id="k1" value="  " onclick="tictactoe(this)">  
                   <input type="button" id="k2" value="  " onclick="tictactoe(this)">
                   <input type="button" id="k3" value="  " onclick="tictactoe(this)">
                   <br />
                   <input type="button" id="k4" value="  " onclick="tictactoe(this)">
                   <input type="button" id="k5" value="  " onclick="tictactoe(this)">
                   <input type="button" id="k6" value="  " onclick="tictactoe(this)">
                   <br />
                   <input type="button" id="k7" value="  " onclick="tictactoe(this)">
                   <input type="button" id="k8" value="  " onclick="tictactoe(this)">
                   <input type="button" id="k9" value="  " onclick="tictactoe(this)">
                   <br />

                   <script>
                   var nummoves=0;
                   var nummoves1=1;
                   var nummoves2=2;
                   var nummoves3=3;
                   var nummoves4=4;
                   var nummoves5=5;
                   var nummoves6=6;
                   var nummoves7=7;
                   var nummoves8=8;
                   var nummoves9=9;
                   var comp;

                   function tictactoe(square)
                   {

                   var check=["c1","c2","c3","c4","c5","c6","c7","c8","c9"]
                   check[0]=document.getElementById("k1");
                   check[1]=document.getElementById("k2");
                   check[2]=document.getElementById("k3");
                   check[3]=document.getElementById("k4");
                   check[4]=document.getElementById("k5");
                   check[5]=document.getElementById("k6");
                   check[6]=document.getElementById("k7");
                   check[7]=document.getElementById("k8");
                   check[8]=document.getElementById("k9");
                   comp=check[Math.floor(Math.random()*check.length)];


                   if(nummoves==0)
                   {
                   square.value="X";
                   }

                   if(nummoves1==1)
                   {
                   comp.value="O";
                   }


                   if(nummoves2==2)
                   {
                   square.value="X";
                   }

                   if(nummoves3==3)
                   {
                   comp.value="O";
                   }

                   if(nummoves4==4)
                   {
                   square.value="X";
                   }

                   if(nummoves5==5)
                   {
                   comp.value="O";
                    }


                 if(nummoves6==6)
                 {
                 square.value="X";
                 }

                if(nummoves7==7)
                {
                comp.value="O";
                }


                if(nummoves8==8)
                {
                 square.value="X";
                }

              if(nummoves9==9)
               {
               comp.value="O";;
               }
              }




               </script>
                </body>
                 </html> 

では、AI が空のボックスを選択することだけを認識できるように、このコードを (完全ではありませんが!) どのように変更すればよいでしょうか?

また、巧妙な AI を作成することもできます。たとえば、プレーヤーが 3 列に並ぶのをブロックしたり、3 列に並んだりすることさえできます。

4

2 に答える 2

0

作成されたマーク (おそらく配列内) を追跡し、スクリプトに配列をチェックさせて、マークを付ける前にスポットが空かどうかを確認します。空でない場合、スクリプトは別の場所を選択する必要があります。

または、これを の代わりに追加しcomp=check[Math.floor(Math.random()*check.length)]ます。

var checking = true; // use this for the loop condition
while (checking)
{
    comp = check[Math.floor(Math.random()*check.length)];
    if (comp.value == "  ") // check to see that the square is empty
    {
        checking = false; // if so, set the loop condition to false so the loop ends
    }
}
于 2013-01-02T17:11:07.550 に答える