我创建了一个棋盘游戏,我希望计算机计算出最优化的移动。这是我到目前为止所做的:
public BoardS calcNextMove(BoardS bs)
{
ArrayList<BoardS>options = calcPossibleOptions(bs);
int max = -1;
int temp;
int bestMove = 0;
for(int k=0;k<options.size();k++)
{
temp = calculateNextMove2(options.get(k));
if(max<temp)
{
max = temp;
bestMove = k;
}
}
return options.get(bestMove);
}
public int calculateNextMove2(BoardS bs)
{
int res = soWhoWon(bs);
if(res == 2) //pc won(which is good so we return 1)
return 1;
if(res == 1)
return 0;
ArrayList<BoardS>options = calcPossibleOptions(bs);
int sum = 0;
for(int k=0;k<options.size();k++)
{
sum += calculateNextMove2(options.get(k));
}
return sum;
}
我不断得到
线程“AWT-EventQueue-0”中的异常 java.lang.StackOverflowError
calcPossibleOptions 效果很好,它是一个返回所有可能选项数组的函数。
BoardS 是一个代表游戏板的类。
我想我必须让它更有效率,怎么样?