使我的AI播放器在tic tac脚趾

时间:2016-04-29 13:20:17

标签: java tic-tac-toe

我正在开展一个项目,在这个项目中我给了4x4 tic tac toe的一段代码但是必须在其中实现我自己的AI,它可以击败预先安装的AI。 2 AI面临的简单随机。随机只是在一个正方形上随机插入X&,简单的播放器从左上方开始,并向右迭代1平方。因此,为了拦截简单的玩家,我已将我的第一个O放在第一行,并且基本上做了一条垂直线,直到连续4个为止。但是,随机播放器可以拦截我的线路,然后我的电脑玩家随机将O形图放在空白方块中进行绘制。但是,由于我的播放器停止转弯可能因为它不知道去哪里,所以这种方法不能正常工作。如果有人能够纠正我的概念,我将不胜感激。

这只是我的代码的一部分

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);
 }

}

1 个答案:

答案 0 :(得分:0)

在一天结束的时候,如果你使用一个简单的计数器AI,随机的AI总会偶然发现毁了你的一天。我认为这个想法是创建一种算法,将发生这种情况的可能性降至最小。也许不是只是在一个专栏中向下走,你会继续朝着不同的方向前进,并始终优先考虑你上次的方向,除非不可能。

在一天结束时,游戏是确定性的,并且选项的数量并不像国际象棋那样疯狂,你可以编写一个算法,在给定足够的运行时间的情况下获得所有时间。我建议你看看minimax方法,这是为国际象棋,西洋棋棋子或者tic tac toe等游戏编写你的第一个AI的经典方法。