知识大全 Java中国象棋博弈程序探秘之生成有效着法

Posted

篇首语:缥帙各舒散,前后互相逾。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中国象棋博弈程序探秘之生成有效着法相关的知识,希望对你有一定的参考价值。

Java中国象棋博弈程序探秘之生成有效着法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  着法生成就是要产生所有有效的着法 让电脑棋手在这些着法中选择最好的着法 最后走出这一著 要生成所有着法只能用穷举了 中国象棋大约每一步可以有 个着法选择 下面是代码

  view plaincopy to clipboardprint?    <PRE class=java name= code >    /**

  * Generates all valid motions

  * @return all valid motion list if no motion could be generated

  * returns <code>null</code>

  * @see cn edu ynu mon Motion

  */

  @SuppressWarnings( unchecked )

  final public List<Motion> generatePossibleMoves()

  List<Motion> ret = new ArrayList<Motion>();

  for (int x = ; x < ; x++)

  for (int y = ; y < ; y++)

  int chessman = chessboard[x][y];

  if (chessman != )

  if (!isRedGo && isRed(chessman))

  continue;

  

  if (isRedGo && !isRed(chessman))

  continue;

  

  switch (chessman)

  case :

  //<editor fold defaultstate= collapsed desc= Hong Jiang >

  if (isValidMove(x y x y + ))

  ret add(new Motion(chessman x y x y + ));

  

  if (isValidMove(x y x y ))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x y))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x + y))

  ret add(new Motion(chessman x y x + y ));

  

  for (int oppJiangY = ; oppJiangY < ; oppJiangY++)

  if (isValidMove(x y x oppJiangY))

  ret add(new Motion(chessman x y x oppJiangY ));

  

  

  //</editor fold>

  break;

  case :

  //<editor fold defaultstate= collapsed desc= Hei Jiang >

  if (isValidMove(x y x y + ))

  ret add(new Motion(chessman x y x y + ));

  

  if (isValidMove(x y x y ))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x y))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x + y))

  ret add(new Motion(chessman x y x + y ));

  

  for (int oppJiangY = ; oppJiangY < ; oppJiangY++)

  if (isValidMove(x y x oppJiangY))

  ret add(new Motion(chessman x y x oppJiangY ));

  

  

  //</editor fold>

  break;

  case :

  case :

  //<editor fold defaultstate= collapsed desc= Shi >

  if (isValidMove(x y x y + ))

  ret add(new Motion(chessman x y x y + ));

  

  if (isValidMove(x y x y ))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x + y + ))

  ret add(new Motion(chessman x y x + y + ));

  

  if (isValidMove(x y x + y ))

  ret add(new Motion(chessman x y x + y ));

  

  //</editor fold>

  break;

  case :

  case :

  //<editor fold defaultstate= collapsed desc= Xiang >

  if (isValidMove(x y x y + ))

  ret add(new Motion(chessman x y x y + ));

  

  if (isValidMove(x y x y ))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x + y + ))

  ret add(new Motion(chessman x y x + y + ));

  

  if (isValidMove(x y x + y ))

  ret add(new Motion(chessman x y x + y ));

  

  //</editor fold>

  break;

  case :

  case :

  //<editor fold defaultstate= collapsed desc= Ma >

  if (isValidMove(x y x y + ))

  ret add(new Motion(chessman x y x y + ));

  

  if (isValidMove(x y x y ))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x y + ))

  ret add(new Motion(chessman x y x y + ));

  

  if (isValidMove(x y x y ))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x + y + ))

  ret add(new Motion(chessman x y x + y + ));

  

  if (isValidMove(x y x + y ))

  ret add(new Motion(chessman x y x + y ));

  

  if (isValidMove(x y x + y + ))

  ret add(new Motion(chessman x y x + y + ));

  

  if (isValidMove(x y x + y ))

  ret add(new Motion(chessman x y x + y ));

  

  //</editor fold>

  break;

  case :

  case :

  //<editor fold defaultstate= collapsed desc= Che >

  // up

  for (int i = y + ; i < ; i++)

  if (isValidMove(x y x i))

  ret add(new Motion(chessman x y x i ));

   else

  // one chessman block its ways

  break;

  

  

  // down

  for (int i = y ; i > ; i )

  if (isValidMove(x y x i))

  ret add(new Motion(chessman x y x i ));

   else

  // one chessman block its ways

  break;

  

  

  // left

  for (int j = x ; j > ; j )

  if (isValidMove(x y j y))

  ret add(new Motion(chessman x y j y ));

   else

  // one chessman block its ways

  break;

  

  

  // right

  for (int j = x + ; j < ; j++)

  if (isValidMove(x y j y))

  ret add(new Motion(chessman x y j y ));

   else

  // one chessman block its ways

  break;

  

  

  //</editor fold>

  break;

  case :

  case :

  //<editor fold defaultstate= collapsed desc= Pao >

  // up

  for (int i = y + ; i < ; i++)

  if (isValidMove(x y x i))

  ret add(new Motion(chessman x y x i ));

  

  

  // down

  for (int i = y ; i > ; i )

  if (isValidMove(x y x i))

  ret add(new Motion(chessman x y x i ));

  

  

  // left

  for (int j = x ; j > ; j )

  if (isValidMove(x y j y))

  ret add(new Motion(chessman x y j y ));

  

  

  // right

  for (int j = x + ; j < ; j++)

  if (isValidMove(x y j y))

  ret add(new Motion(chessman x y j y ));

  

  

  //</editor fold>

  break;

  case :

  case :

  //<editor fold defaultstate= collapsed desc= Bing >

  if (isRed(chessman))

  if (isValidMove(x y x y + ))

  // I can see one point at my front

  ret add(new Motion(chessman x y x y + ));

  

  if (y >= )

  // passed the He Jie I can see the point at

  // my left and right

  if (isValidMove(x y x y))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x + y))

  ret add(new Motion(chessman x y x + y ));

  

  

   else

  if (isValidMove(x y x y ))

  // I can see one point at my front

  ret add(new Motion(chessman x y x y ));

  

  if (y <= )

  // passed the He Jie I can see the point at

  // my left and right

  if (isValidMove(x y x y))

  ret add(new Motion(chessman x y x y ));

  

  if (isValidMove(x y x + y))

  ret add(new Motion(chessman x y x + y ));

  

  

  

  //</editor fold>

  break;

  

  

  

  

  // alpha beta or its variations are all move ordering related!

  Collections sort(ret);

  return ret isEmpty() ? null : ret;

  

  </PRE>           转载请保留作者信息

  作者

  Blog

cha138/Article/program/Java/hx/201311/25876

相关参考