知识大全 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应用程序生成证书链 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 学习如何创建数字
巧用工具为Java程序生成代码做覆蓋统计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 曾经为大
如何有效防止Java程序源码被人偷窥? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
.对象的生成和大小的调整 JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数从而常常会生成大量的对象(或实例)由于系统不仅要花时间生成对象以后可能还需花时间对这些对象进
读阳光人生的博弈智慧之学会共赢有感作文人生从某两个角度来看,是两个不同的转折点。有的人认为人生是悲剧是凄惨是幸福的结局甚至让自己没有生的希望,又有些人认为人生是新生的小草,湛蓝的海洋,应为他们都具有最
JavaSE6之脚本引擎让程序如虎添翼 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!现在JavaS
javah头文件生成器 javah程序创建C头文件和存根文件这些是把本地C成员函数包入java所需要的被创建的头文件给出了有关java类的信息这些信息是C成员函数与java类交换数据所必需的存根
自从人类发现有地磁现象存在,就开始探索地磁起源的问题。人类最早、最朴素的想法就是地球是一块大磁体,北极是磁体的n极,南极是磁体的s极。这种想法不但中国古代有,在西方
概要本文通过查看一个精心构造的类结构的运行输出和使用javap工具查看实际生成的java字节码(bytecode)向java程序员展示了一个类在运行时是如何构造生成的 关键字java构造ja
博弈K线指标的使用要领1、一根顶天立地的大博弈阳K线穿过筹码低位密集区,显示了强大的上升动力,预示该股后市能大涨。大阳线顶天接近100%时最好,但适当放宽一些也有效。2、如顶天立地大博弈阳K线是在换手