【发布时间】:2015-02-26 12:07:12
【问题描述】:
我一直在做一个项目,这个项目是创建一个 Noughts and Crosses 游戏。我已经对 GUI 进行了编程,赢了检查等,但我一直坚持对 AI 进行编程。我代表了一个充满 JButtons 的 3x3 数组。这是非常具有挑战性的。
我正在寻找可以帮助我编写更高效的代码的想法。 我认为我的方法效率不高,我想对 AI 进行编码以在水平和垂直方向上进行标记(进攻和防守策略)。
提前致谢
这是我到目前为止所做的:
公共类计算机{
public void AI()
{
for(int i=0; i<3; i++ )
{
for (int j=0; j<3; j++)
{
// Diagonal Defensive Strategy for computerX and computerO
if ( Game.computerX == true && Game.Board[i*1][j*1].getText().equals("O") && Game.Board[i*1+1][j*1+1].getText().equals("O") && Game.Board[i*1+2][j*1+2].getText().equals(""))
{
Game.Board[i*1+2][j*1+2].setText("X");
}
else if (Game.computerX == true && Game.Board[i*1+2][j*1+2].getText().equals("O") && Game.Board[i*1+1][j*1+1].getText().equals("O") && Game.Board[i*1][j*1].getText().equals(""))
{
Game.Board[i*1][j*1].setText("X");
}
else if (Game.computerX == true && Game.Board[i*1+2][j*1+2].getText().equals("O") && Game.Board[i*1+1][j*1+1].getText().equals("") && Game.Board[i*1][j*1].getText().equals("O"))
{
Game.Board[i*1+1][j*1+1].setText("X");
}
//*************************************** For computerO *******************************
else if ( Game.computerO == true && Game.Board[i*1][j*1].getText().equals("X") && Game.Board[i*1+1][j*1+1].getText().equals("X") && Game.Board[i*1+2][j*1+2].getText().equals(""))
{
Game.Board[i*1+2][j*1+2].setText("O");
}
else if (Game.computerO == true && Game.Board[i*1+2][j*1+2].getText().equals("X") && Game.Board[i*1+1][j*1+1].getText().equals("X") && Game.Board[i*1][j*1].getText().equals(""))
{
Game.Board[i*1][j*1].setText("O");
}
else if (Game.computerO == true && Game.Board[i*1+2][j*1+2].getText().equals("X") && Game.Board[i*1+1][j*1+1].getText().equals("") && Game.Board[i*1][j*1].getText().equals("X"))
{
Game.Board[i*1+1][j*1+1].setText("O");
}
//*********************************************************************************************
// Diagonal Offensive Strategy for computerX and computerO
if ( Game.computerX == true && Game.Board[i*1][j*1].getText().equals("X") && Game.Board[i*1+1][j*1+1].getText().equals("X") && Game.Board[i*1+2][j*1+2].getText().equals(""))
{
Game.Board[i*1+2][j*1+2].setText("X");
}
else if (Game.computerX == true && Game.Board[i*1+2][j*1+2].getText().equals("X") && Game.Board[i*1+1][j*1+1].getText().equals("X") && Game.Board[i*1][j*1].getText().equals(""))
{
Game.Board[i*1][j*1].setText("X");
}
else if (Game.computerX == true && Game.Board[i*1+2][j*1+2].getText().equals("X") && Game.Board[i*1+1][j*1+1].getText().equals("") && Game.Board[i*1][j*1].getText().equals("X"))
{
Game.Board[i*1+1][j*1+1].setText("X");
}
//*************************************** For computerO *******************************
else if ( Game.computerO == true && Game.Board[i*1][j*1].getText().equals("O") && Game.Board[i*1+1][j*1+1].getText().equals("O") && Game.Board[i*1+2][j*1+2].getText().equals(""))
{
Game.Board[i*1+2][j*1+2].setText("O");
}
else if (Game.computerO == true && Game.Board[i*1+2][j*1+2].getText().equals("O") && Game.Board[i*1+1][j*1+1].getText().equals("O") && Game.Board[i*1][j*1].getText().equals(""))
{
Game.Board[i*1][j*1].setText("O");
}
else if (Game.computerO == true && Game.Board[i*1+2][j*1+2].getText().equals("O") && Game.Board[i*1+1][j*1+1].getText().equals("") && Game.Board[i*1][j*1].getText().equals("O"))
{
Game.Board[i*1+1][j*1+1].setText("O");
}
//**************************************************************************************
}
【问题讨论】:
-
你知道
i*1 = i,对吗? (类比,j*1 = j) -
AI 编程有不同的方法。有些更简单,有些则非常复杂,也许你应该检查一下它们并根据你潜在的编程技能来验证它们的难度。也许你应该看看this问题。
-
请注意,已经有一种算法可以在这场比赛中获胜或至少平局。但如果你想尝试一个简单的 AI 算法,你可以试试 minimax
标签: java eclipse oop tic-tac-toe