首页 > Linux操作系统 > Linux操作系统 > 一个五子棋小游戏的设计

public void actionPerformed(ActionEvent e)AI过程需要分析的也就是这张记录表,落子时分析每一个为空的交点,计算在此处落子的价值,选择价值最大的一点落子就好了。
{
//贴图(还得区分一下,是贴白棋子还是黑棋子)
//修改记录表
}
/**
*alpha beta剪枝算法
*
*@para depth 确定的检索深度,当达到此值时返回当前的最优解
*@para p 表示当前棋局状态的数据类型。
*@para player 当前的玩家,因为此时计算机将模拟用户作出选择,计算机扮演双角色
*@para alpha 初始设定的alpha值
*@para beta 初始设定的beta值
*@return 返回一个向量,向量的第一个元素是最佳落子点的价值,从第二个元素开始是
* 一个落子的序列,它表示取得最大价值所通过的路径,也就是说第二个元素就是
* 所求的最佳落子点。
*
*需要实现以下方法:
* //判断是否达到最大检索深度,如是返回真
* boolean reachedMaxDepth(Position,int)
* //评估函数
* float evaluation(Position,boolean)
* //返回可以下子的位置
* Position[] possibleMoves(Position,boolean)
*
*典型的调用:Position p=new Position(……);
* alphaBetaHelper(10, p, true, 1000000.0f, -1000000.0f);
*说明:这里的Position类是一个假设的类,它表示当前棋局状态,为方便起见,
* 将评估函数的对象,及可落子位置也设为此类型,读者可根据应用情况作出调整
*/
Vector alphaBetaHelper(int depth, Position p,
boolean player, float alpha, float beta)
{
if (reachedMaxDepth(p, depth))
{
Vector v = new Vector(2);
float value = evaluation(p, player);
v.addElement(new Float(value));
v.addElement(null);
return v;
}
Vector best = new Vector();
Position [] moves = possibleMoves(p, player);
for (int i = 0; i < moves.length; i++)
{
Vector v2 = alphaBetaHelper(depth + 1, moves[i], !player, -beta, -alpha);
float value = -((Float)v2.elementAt(0)).floatValue();
if (value > beta)
{
beta = value;
best = new Vector();
best.addElement(moves[i]);
Enumeration en = v2.elements();
en.nextElement(); // skip previous value
while (en.hasMoreElements())
{
Object o = en.nextElement();
if (o != null) best.addElement(o);
}
}
/**
* Use the alpha-beta cutoff test to abort search if we
* found a move that proves that the previous move in the
* move chain was dubious
*/
if (beta >= alpha)
{
break;
}
}
Vector v3 = new Vector();
v3.addElement(new Float(beta));
Enumeration en = best.elements();
while (en.hasMoreElements())
{
v3.addElement(en.nextElement());
}
return v3;
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15822571/viewspace-446903/ ,如需转载,请注明出处,否则将追究法律责任。