我创建了一个checkress游戏,我希望计算机能够计算出最优的举措。 以下是我迄今所做的:计算跳棋的最佳举动
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是一个代表游戏板的类。
我想我必须让它更有效率,怎么样?
检查是否与检查员一样? – NPE 2013-04-06 14:25:33
对不起,我会更新。 – 2013-04-06 14:28:04
也许“calculateNextMove2”中的递归太深了?任何想法在结束条件发生前通常会调用多少次(我会说很多...)? – 2013-04-06 14:42:35