更好的AI for Tic&脚趾

时间:2013-03-13 17:14:13

标签: java swing user-interface artificial-intelligence

我正在制作一个Tic&脚趾游戏,包含一个PC播放器。它是一个3 x 3游戏板,然后包含9个按钮。一旦人类玩家点击按钮(这意味着标记'x'),PC播放器会自动选择下一个。请查看我为PC播放器开发的以下 代码,以选择合适的按钮来标记“o”。

if(buttons[1].getText().equals("O") && buttons[2].getText().equals("O") && buttons[3].getText().equals("")){
            buttons[3].setText("O");
            buttons[3].setEnabled(false);
        } else if(buttons[4].getText().equals("O") && buttons[5].getText().equals("O") && buttons[6].getText().equals("")){
            buttons[6].setText("O");
            buttons[6].setEnabled(false);
        } else if(buttons[7].getText().equals("O") && buttons[8].getText().equals("O") && buttons[9].getText().equals("")){
            buttons[9].setText("O");
            buttons[9].setEnabled(false);                
        } 

我对此并不满意。这只是一小块,如果其他很长,请逐一检查每个按钮。我不能称之为AI。如果我使网格4 x 4,这意味着我需要编辑整个if else!

有没有更好的方法来选择PC播放器的“o”标记按钮?请帮忙!

更新

我不是在寻找获胜国家。我正在寻找一种算法或其他我可以消除if else的东西。

3 个答案:

答案 0 :(得分:2)

你可以通过枚举所有游戏状态来解决井字游戏。你可以削减一些角落,但不是很多。

这是一个很好的图形表示,说明如何执行此操作。 http://xkcd.com/832/

答案 1 :(得分:1)

我(大约)在大学里为AI课程做了这件事。我使用的解决方案是创建几个函数,如findBestMove()isGameOver()等.AI部分是辅助函数,如lastSuccessfulMoveForScenario()。 Tic-Tac-Toe非常简单,我只是在之前的每次移动中都存储在内存中,是否会带来胜利。然后,我重播了成功的动作,并删除了表现不佳的动作。随着游戏的进行,AI在播放时变得越来越好。不确定这是否是您正在寻找的,但希望它有所帮助。

编辑:

我还应该指出,实际上只有少数人工智能有任何真正的决定。很明显,你必须阻止胜利,如果可以,你应该赢。如果我记得4个动作中只有1个最终使用了“AI”引擎。

答案 2 :(得分:-1)

对于这个,如果是唯一的方法。尽管这是一个漫长的过程,但我们必须这样做。检查所有获胜条件,并使用if else移动