2016-04-29 4 views
0

私は4x4 tic tac toeのコード片を与えられたIMプロジェクトに取り組んでいますが、あらかじめインストールされたAIを打ち負かすことができる自分のAIを実装する必要があります。 2人のAIの顔はシンプルで無作為です。ランダムはちょうど無作為にXを正方形に挿入し、シンプルプレーヤーは左上の四角形から開始し、右の四角形を反復します。だから、シンプルなプレイヤーを傍受するために、私は最初の行に最初のOを入れ、基本的には4行が終わるまで縦線を下ろします。しかし、無作為のプレーヤーは私のラインを横取りすることができます。その後、コンピュータプレーヤーは無作為にOを空の四角に置いて描きます。しかし、プレイヤーがどこに行くのかわからないので、プレイしていないかもしれないので、これは正しく動作しません。だから私のコンセプトを誰かが修正できるかどうかは分かります。 チックタックのつま先で自分のAIプレーヤーを作る

THIS

はランダムAIは幸いにもあなたは、単純なを使用する場合は、あなたの一日を台無しにつまずくかもしれない何かが常にある一日の終わりに私のコード

package noughtsAndCrossesV3; 

import ncErrors.outOfRangeError; 
import java.util.ArrayList; 
import java.util.Random; 

public class MyCompPlayer extends GenericPlayer implements NCPlayer { 

    Random theGenerator; 

    public MyCompPlayer() 
    { 
     super();  // no further initialisation required 
     theGenerator = new Random(); 
    } 

    // NCGrid is the grid the class that displays the grid and rules to win 

    @Override 
    public GridCoordinate getNextMove(NCGridV3 currentGrid) { 
     int Row; 
     int Col; 
     GridCoordinate theSquare = null; 
     int randomSelection; 
     ArrayList<GridCoordinate> freeSquares = new ArrayList<GridCoordinate>(); // array finding free squares 

     //iterates through row and column 
     for (Row = 0; (theSquare == null) && (Row < currentGrid.getGridRowDimension()); Row++){ 
      for (Col = 0; (theSquare == null) && (Col < currentGrid.getGridColDimension()); Col++){ 


       try{ 

        //If last column is empty, then draw a row of O's downwards in a straight line. 

        if(currentGrid.getSquareStatus(Row,3)==NCGridV3.SquareStatus.EMPTY){ 
        theSquare = new GridCoordinate(Row,3); 
        return theSquare; 
       } 
       //If there is a nought then randomize movement. This doesnt work yet. 
       else if(currentGrid.getSquareStatus(Row,3)==NCGridV3.SquareStatus.NOUGHT) 
        freeSquares.add(new GridCoordinate(Row, Col)); 
       // adds free sqaures to array and plots coordinate there but doesnt work. 

       } 

       catch (outOfRangeError e) 
       { 

       } 

      } 

     } 

    randomSelection = theGenerator.nextInt(freeSquares.size()); 


    return freeSquares.get(randomSelection); 
} 

}

+0

あなたが記述しているこれらの2種類のAIを打ち消したいのか、どのタイプのプレーヤー/ AIに打ち勝つ(可能な)AIを作りたいのかを指定できますか?あなたはこれを使うことができますhttp://www.wikihow.com/Win-at-Tic-Tac-Toe –

+0

どういう意味ですか?しかし、これは正しく動作しませんどこへ行く。" ?処理されないoutOfRangeError例外がスローされますか?また、宿題ですか? (タグ付けする必要があります) – phtrivier

答えて

0

のほんの一部に過ぎませんカウンターAI。私はその考え方が無視できるサイズに起こる可能性を最小限に抑えるアルゴリズムを作成することだと思います。たぶん、列の中を進むのではなく、別の方向に進み続け、可能でない限り最後に取った方向を常に優先します。

ゲームが決定的であり、オプションの量がチェスのように狂っていない場合は、十分な実行時間が与えられたときに常に勝つアルゴリズムを書くことができます。 minimaxのアプローチを見てみることをお勧めします。これは、チェス、チェッカー、チックタックのようなゲームのための最初のAIを書く古典的な方法です。

関連する問題