知识大全 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

相关参考

知识大全 为测试 Java 应用程序生成证书链

为测试Java应用程序生成证书链  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  学习如何创建数字

知识大全 巧用工具 为Java程序生成代码做覆蓋统计

巧用工具为Java程序生成代码做覆蓋统计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  曾经为大

知识大全 如何有效防止Java程序源码被人偷窥

如何有效防止Java程序源码被人偷窥?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 java性能优化-之一

  .对象的生成和大小的调整  JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数从而常常会生成大量的对象(或实例)由于系统不仅要花时间生成对象以后可能还需花时间对这些对象进

知识大全 读阳光人生的博弈智慧之学会共赢有感作文

读阳光人生的博弈智慧之学会共赢有感作文人生从某两个角度来看,是两个不同的转折点。有的人认为人生是悲剧是凄惨是幸福的结局甚至让自己没有生的希望,又有些人认为人生是新生的小草,湛蓝的海洋,应为他们都具有最

知识大全 Java SE 6之脚本引擎 让程序如虎添翼

JavaSE6之脚本引擎让程序如虎添翼  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!现在JavaS

知识大全 头文件生成器-javah.exe

  javah头文件生成器  javah程序创建C头文件和存根文件这些是把本地C成员函数包入java所需要的被创建的头文件给出了有关java类的信息这些信息是C成员函数与java类交换数据所必需的存根

宇宙探秘 地磁起源之谜

   自从人类发现有地磁现象存在,就开始探索地磁起源的问题。人类最早、最朴素的想法就是地球是一块大磁体,北极是磁体的n极,南极是磁体的s极。这种想法不但中国古代有,在西方

知识大全 逐步深入剖析java类的构造方式

  概要本文通过查看一个精心构造的类结构的运行输出和使用javap工具查看实际生成的java字节码(bytecode)向java程序员展示了一个类在运行时是如何构造生成的    关键字java构造ja

博弈K线指标的使用要领

博弈K线指标的使用要领1、一根顶天立地的大博弈阳K线穿过筹码低位密集区,显示了强大的上升动力,预示该股后市能大涨。大阳线顶天接近100%时最好,但适当放宽一些也有效。2、如顶天立地大博弈阳K线是在换手