知识大全 象棋编程游戏——悔棋算法
Posted 象棋
篇首语:不知道自己无知,乃是双倍的无知。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 象棋编程游戏——悔棋算法相关的知识,希望对你有一定的参考价值。
观棋不语真君子 落子无悔大丈夫 这是小时候就知道的一句话 但是进入象棋世界不久的我 还没有形成自己独有的下棋风格 也没有刻意步步为营 落一步子 就考虑好以后很多步应该怎么走 因此 在做几乎所有单机象棋版本都会有的功能——悔棋算法的时候 对人生也进行了一些思考
人生的每一步棋 我们不可能都是走对的 但是我们没有悔棋功能 为了以后少走烂著 少牺牲一些本来就不多的棋子 还是要每走一步 停下来思考一下
悔棋算法
public class RegretBack
public int[] fromIndex=new int[ ]; //记录每走一步棋 所动的棋子public int[] toIndex = new int[ ]; //记录每走一步棋 所动的棋子
public Point[] fromPoint=new Point[ ];
public Point[] toPoint=new Point[ ];
public int[] fromPointIndex=new int[ ]; //记录当前棋子位置
public int[] toPointIndex=new int[ ];
public string[] Chess_Text=new string[ ]; //存放每一步棋的说明文字
public int[] signRight=new int[ ]; //保存哪方走棋标志
public bool[] start=new bool[ ]; //悔棋操作 要恢复的标志位
public string[] wrongString=new string[ ]; //记录排斥事件的标志
public bool[] whichFangQianZou = new bool[ ];//悔棋操作 要恢复的标志位
public RegretBack[] b = new RegretBack[ ];
public int activeIndex; //起流动指针作用
public int tailIndex; //始终指向尾部(刚走完的最后一步)的索引
public RegretBack()
this Initialize();
public void Initialize()
//初始化各数组
for(int i= ;i< ;i++)
fromIndex[i]= ; toIndex[i]= ;
fromPoint[i] X= ; fromPoint[i] Y= ;
toPoint[i] X= ; toPoint[i] Y= ;
fromPointIndex[i]= ; toPointIndex[i]= ;
for(int i= ;i< ;i++)
this Chess_Text[i]= ;
this signRight[i]= ;
this start[i]=false;
this wrongString[i]= right ;
this whichFangQianZou[i]=false;
this b[i] = new RegretBack();
this b[i] Initialize();
//初始化索引activeIndex= ;
tailIndex= ;
public void Initialize(int i)
//初始化一个数组
fromIndex[i]= ; toIndex[i]= ;
fromPoint[i] X= ; fromPoint[i] Y= ;
toPoint[i] X= ; toPoint[i] Y= ;
fromPointIndex[i]= ; toPointIndex[i]= ;
this Chess_Text[i]= ;
this signRight[i]= ;
this start[i]=false;
this wrongString[i]= right ;
this whichFangQianZou[i]=false;
this b[i] Initialize();
public void SubLastItem()
if(this activeIndex
for(int i=this activeIndex+ ;i<=this tailIndex;i++) this Initialize(i);
return;
this Initialize(this tailIndex);
this tailIndex ;
this activeIndex=this tailIndex;
public void SaveNewItem(int fromIndex int toIndex Point fromPoint Point toPoint string Chess_Text int signRight bool start string wrongString bool whichFangQianZou RegretBack b)
if(this activeIndex>this tailIndex)
this activeIndex=this tailIndex;
this activeIndex++;
if(this activeIndex== )
MessageBox Show( 悔棋超出边界范围! );
return;
this fromIndex[this activeIndex]=fromIndex;
this toIndex[this activeIndex]=toIndex;
this fromPoint[this activeIndex]=fromPoint;
this toPoint[this activeIndex]=toPoint;
this Chess_Text[this activeIndex]=Chess_Text;
this signRight[this activeIndex]=signRight;
this start[this activeIndex]=start;
this wrongString[this activeIndex]=wrongString;
this whichFangQianZou[this activeIndex]=whichFangQianZou;
RegretBack tempRegretBack = new RegretBack();
tempRegretBack Initialize();
for(int i= ;i< ;i++)
tempRegretBack have[i] = b have[i];
tempRegretBack who[i] = b who[i];
tempRegretBack str[i] = b str[i];
tempRegretBack allPoint[i] = b allPoint[i];
if(i< )
tempRegretBack partPoint[i] = b partPoint[i];
tempRegretBack whichPicture[i] = b whichPicture[i];
tempRegretBack rednum = b rednum;
tempRegretBack blacknum = b blacknum;
tempRegretBack index = b index;
tempRegretBack first_X = b first_X;
tempRegretBack first_Y = b first_Y;
tempRegretBack height = b height;
tempRegretBack width = b width;
this b[this activeIndex] = tempRegretBack;
this tailIndex=this activeIndex;
public int FallBack(ref int fromIndex ref int toIndex ref Point fromPoint ref Point toPoint ref string Chess_Text ref int signRight ref bool start ref string wrongString ref bool whichFangQianZou ref RegretBack b)
if(this activeIndex< )
return ;
if(this activeIndex>=this tailIndex) this activeIndex=this tailIndex ;
if(this activeIndex<= ) //防止一开始就点后退
return ;
fromIndex=this fromIndex[this activeIndex];
toIndex=this toIndex[this activeIndex];
fromPoint=this fromPoint[this activeIndex];
toPoint=this toPoint[this activeIndex];
Chess_Text=this Chess_Text[this activeIndex];
signRight=this signRight[this activeIndex];
start=this start[this activeIndex];
wrongString=this wrongString[this activeIndex];
whichFangQianZou=this whichFangQianZou[this activeIndex];
b Initialize();
b Initialize(this b[this activeIndex]);
this activeIndex ;
return ;
public int GoAhead(ref int fromIndex ref int toIndex ref Point fromPoint ref Point toPoint ref string Chess_Text ref int signRight ref bool start ref string wrongString ref bool whichFangQianZou ref RegretBack b)
if(this activeIndex>=this tailIndex )
return ; //只能前进到最后一步旗
this activeIndex++;
if(this activeIndex< ) this activeIndex= ;
fromIndex=this fromIndex[this activeIndex];
toIndex=this toIndex[this activeIndex];
fromPoint=this fromPoint[this activeIndex];
toPoint=this toPoint[this activeIndex];
Chess_Text=this Chess_Text[this activeIndex+ ];
signRight=this signRight[this activeIndex+ ];
start=this start[this activeIndex+ ];
wrongString=this wrongString[this activeIndex+ ];
whichFangQianZou=this whichFangQianZou[this activeIndex+ ];
b Initialize();
b Initialize(this b[this activeIndex+ ]);
return ;
cha138/Article/program/net/201311/12475
相关参考
学习编程数学到底需要不需要很好呢?编程如果不是从事3D游戏引擎,人工智能,高级算法,航天科学,那数学一点都不重要。最多游戏开发中用到些牛顿运动定律,圆周和抛物线运动,而且有大量现成的例子,不需要你数学
JAVA编程语言开发DES算法理论 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [java]
Java经典算法编程题目,适合面试前进行练习 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!定义一个
给一颗二叉树每个节点都有左孩子指针和右孩子指针(当然可能为空)要求给每个节点添加一个指针这个指针要指向它的同一层的紧临的兄弟(要求写代码)给一个单链表将其反转(要求写代码)写一个函数传入一个字符串判断
知识大全 javascript和HTML5利用canvas构建猜牌游戏实现算法
javascript和HTML5利用canvas构建猜牌游戏实现算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
下列哪些活动属于零和游戏?A、炒股票B、下象棋C、打麻将D、炒期货答案:BC解析:零和游戏又被称为游戏理论或零和博弈,源于博弈论。是指一项游戏中,游戏者有输有赢,一方所赢正是另一方所输,而游戏的总成绩
知识大全 Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让
学习JAVA游戏开发要用什么软件编程? 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!学习JAVA游戏
知识大全 求一部美国电影,好多年前看的,讲的是有人玩象棋,突然远古的动物穿越到现代的城市.
求一部美国电影,好多年前看的,讲的是有人玩象棋,突然远古的动物穿越到现代的城市.电影《勇敢者的游戏》描述1969年的一天,12岁的小男孩阿伦·帕里斯无意中在父亲的制鞋厂的工地上发现了埋在土中的"尤曼吉
知识大全 本人想自学编程 但是0基础 有什么容易入手的 如果是游戏的那些该学习什么 听说学编程英文要很好是不。
本人想自学编程但是0基础有什么容易入手的如果是游戏的那些该学习什么听说学编程英文要很好是不。英语还是次要的,更要命的是逻辑思维能力。基本上将来能在程序界混得差不多的人都是有足够能力不会问出你这种问题的