急求一个C语言或C++编写的象棋小游戏的程序,有的请发到我邮箱:jiangjin1228@163.com谢了
发布网友
发布时间:2022-05-31 16:16
我来回答
共3个回答
热心网友
时间:2023-10-19 05:01
感恩
这些日子一直顺应着自己的感觉在过,做该做的事,闲的时候便呆在网上,与这颗能容下某些事物的头脑来说,网络真是个很神奇的东西,它可以让你每天都有新的发现。不知为什么,近段已很难有让自己感动的东西出现。诸如人、诸如事,也许是因为有太多太多,我无法去顾及,还是我自己早已变得麻木。我怀疑真的麻木了。以至失去了去感知事物的能力。
周六日可以破天荒的睡到早上十点,而我却总把这些归咎于天气,冬天了人总可以找些事情来感概的。在这样的季节里,才算真正品尝到冷的滋味、寒的彻骨。想在那极寒的表层下,去找寻可以爆发的*,我却寻求不来。因为天冷了,人极其渴望温暖,不管是外界和内心都需要,而刚才说了,内心已近乎麻木,所以只有依赖外界,依赖于可以带来温暖的地方,温暖的被窝,温暖的房间。刻意把沙发上也放了被子,在夜里一个人拿着书一边听着音乐,衣服都忘了脱,就这样睡着,再醒已是黎明了,黎明过后的清晨又得接受周而复始的生活。当你还来不及逃避的时候,白天已经占住了你的全部。
早几天见到父亲,我说不清那是怎样的一种感觉了。尽管我们才两周没见面,但父亲微笑,让我感觉好久违了。他见到精神爽朗的我,我不知否是从前的我未感知到这微笑背后的魅力,还是因为只到今天我才真正懂得父亲微笑背后所承载的东西,这么多年以后,才谛结而成的。同时见到父亲的几个朋友,看到他们善意的微笑,同时对爸讲:“你女儿看起来真是不错”。简简单单的一句话,我听起来没什么,我想父亲听来心里定然会很开心,当然我也笑了。以前从没注意过长辈的这种情绪,今天才觉得亲情在我生命里显得如此的重要。跟父亲走了一段路,便离开了。父亲有他要处理的事情,我也有。而且我更想让这种和谐且真挚的感觉残留在心底。女儿大了,翅膀硬了……终究得逃离父母的束缚。但不管我们到了什么样的年龄在父母眼里,我终究是个孩子。
儿时的记忆隐现,父亲总跟我聊起他年轻时候的岁月。为了我们家也能过上小康的生活,父亲起早贪黑的工作,而如今生活是好了,但父亲也因他的付出,而日渐的苍老。这是怎样的一种情感,我下辈子都无法还清的。再看看如今的我,过着不愁吃不愁穿的生活。虽然这当中会有太多太多的困惑,但比起曾经父亲那一代人所经过的岁月,我如今所要去承受的又算得了什么呢……
在听欧阳菲菲的《感恩的心》“我来自偶然,像一粒尘土,有谁看出我的脆弱。
我来自何方,我情归何处,谁在下一刻呼唤我。
天地虽宽,这条路却难走,我看遍这人间坎坷辛苦。
我还有多少爱,我还有多少泪,让苍天知道,我不认输。
感恩的心,感谢有你,伴我一生,让我有勇气做我自己。
感恩的心,感谢有你,花开花落,我一样会珍惜。“
并不懂得当时欧阳菲菲想要诠释的感情,但对于此刻的我来讲……
需要这颗感恩的心……
珍惜,我的亲人,我一样会珍惜,我依然会珍惜……
感恩
落叶在空中盘旋,谱写着一曲感恩的乐章,那是大树对滋养它大地的感恩;白云在蔚蓝的天空中飘荡,绘画着那一幅幅感人的画面,那是白云对哺育它的蓝天的感恩。因为感恩才会有这个多彩的社会,因为感恩才会有真挚的友情。因为感恩才让我们懂得了生命的真谛 ——题记
从婴儿的“哇哇”坠地到哺育他长大*,父母们花去了多少的心血与汗水,编织了多少个日日夜夜;从上小学到初中,乃至大学,又有多少老师为他呕心沥血,默默奉献着光和热,燃烧着自己,点亮着他人。
感恩是发自内心的。俗话说“滴水之恩,当涌泉相报。”更何况父母,亲友为你付出的不仅仅是“一滴水”,而是一片汪洋大海。是否你在父母劳累后递上一杯暖茶,在他们生日时递上一张卡片,在他们失落时奉上一番问候与安慰,他们往往为我们倾注了心血、精力,而我们又何曾记得他们的生日,体会他们的劳累,又是否察觉到那缕缕银丝,那一丝丝皱纹。感恩需要你用心去体会,去报答。
感恩是敬重的。居里夫人作为有名的科学家,曾两次获得诺贝尔奖,但她在会上看见自己的小学老师,用一束鲜花表达她的感激之情;伟人*也同样在佳节送上对老师的一份深深感激。自古以来的伟人无不有着一颗感恩的心,感激不需要惊天动地,只需要你的一句问候,一声呼唤,一丝感慨。
感恩是有意义的。爱让这个世界不停旋转。父母的付出远远比山高、比海深,而作为我们,只知饭来张口,衣来伸手。而似乎又有一条隔离带,让我们变得自私自利,忘记了曾经父母的付出,忘记了那一声声快乐,学会去感激别人是自己的一份良心,一份孝心,因为如此才会有和睦,有快乐,有彼此间的敬重。
怀着一颗感恩的心,去看待社会,看待父母,看待亲朋,你将会发现自己是多么快乐,放开你的胸怀,让霏霏细雨洗刷你心灵的污染。学会感恩,因为这会使世界更美好,使生活更加充实。
学会感恩
亲爱的同学们,我们的人生之路总是阳光明媚,晴空万里,到底哪一缕阳光最耀眼?有人说是优异的学习成绩,有人说是给予别人帮助……而我认为在我们的人生路上最灿烂的阳光应该属于知恩图报,感谢帮助我们成长的每一个人。是的,学会感恩,是一种情怀,学会感恩,更是一种情操.
两年前,我得了一场大病,父母背着我东奔西跑,到处求医,从他们焦急的神态中,从他们悉心的呵护中,我深深地体会到父母对我发自内心的爱。一天,爸爸用自行车驮我去医院,我坐车后发现爸爸骑得很慢.几个月了,爸爸是太累了,我的病让他身心疲惫。我无意中发现了爸爸头上的一些白发。啊,爸爸变了,变老了。我在他身上看到了岁月的沧桑,看到了生活的艰辛,更看到了爸爸为我操劳的痕迹。啊,爸爸没变,大山般的父爱没变。我依然感受着他的温暖,他的爱。
那是我住院期间的一天傍晚,天很冷,外面的雪下得很大。爸爸下班后赶来给我送饭,可是我想吃饺子。他二话不说,放下手里提来的家里做好的饭菜,迎着凛冽的大风,冒着漫天飞舞的鹅毛大雪又出去为我买饺子。天黑了,风更猛了,雪更大了.这时,雪人似的爸爸一边走还一边说:“饿坏了吧!”看着爸爸慈祥的面容,摸着爸爸冻得通红的双手,我感动得流泪了。“爸爸,爸爸……”我在心里一遍遍地念叨,“你真是我的好爸爸!”。冬天是寒冷的,而爸爸所做的一切,却仿佛阳光,温暖我病痛的躯体;又似暖流,融进我愁苦的心坎里;爸爸的关爱,撑起了我战胜病魔的信念,经过一个多月的治疗,我康复出院.
我永远不会忘记父母对我的爱,对我的呵护和关怀。我能为他们做些什么?我常常这样问自己。哪怕是为他们垂垂肩,洗洗碗,给他们唱段曲儿,陪他们逛逛街,散散步,我也会感到心里的安慰。学会感恩,学会报答,我仿佛一下子长大了:我用心学习,不让他们为我的操心;我抢着洗碗拣菜,让他们能多休息一会儿;我经常哼哼小曲,让家庭充满欢声笑语……我尽我所能给父母留下最难忘的美好时光,让他们开心,让他们骄傲,
我爱我的父母,普天下的孩子们都爱自己的父母.让我们一起对父母说一声:“我们爱您!”让我们一起行动,知恩图报,学会感恩.冬天就不再寒冷,黑夜就不再漫长,幸福快乐就时刻陪伴在你我身边.
感恩生活
有朋友发来信息才知道今天是感恩节,在这个信息时代,生活也教会我们懂得更多的去享受生活,抓住这世界上一切可以分享美好的机会,把爱心与快乐互相传递。用“狗狗”搜索关于‘感恩’的话题,才知道感恩节是美国人民独创的一个节日,在11月的最后一个星期四。
中国有句俗话叫‘知恩图报’,滴水之恩当涌泉相报。1620年和1621年之交的冬天,不堪忍受英国国内宗教*的清教徒们,在到达美洲时遇到了难以想象的困难,是心地善良的印第安人给移民送来了生活必需品,帮助他们渡过难关,走出了困境。人在困境时得到他人的帮助是幸运的,那种感激之情难以言表;而帮助他人是一种美德,从我们的歌里常常也能领略到这样一种爱的精神,让世界充满爱,这个世界才会更加的美好,我们的心灵也会更加纯洁。移民们为了纪念这样的日子,在规定了感谢上帝的同时并决定为感谢印第安人的真诚帮助,邀请他们一同庆祝节日。
懂得感恩不仅是种修养更是一种态度,就如我们平时常说的‘知足常乐’,要懂得体验生活给予我们的一切,无论是快乐还是痛苦,都要坦然从容去面对这样的经历,提高自己的鉴赏力与生活的能力,养成一种积极向上的生活态度。
那么就让我们也一起来感恩吧!感恩在生活的点点滴滴中经历的平凡与不平凡,感恩父母给予了生命的起点,感恩爱情带来的幸福与苦痛,感恩人生之路带来的一切艰辛与坎坷,感恩朋友间的平淡与真诚,感恩陌生人礼貌与谦让,感恩同事间为真理而争吵。感恩,让我们学会感恩所有所有吧!感恩是一种处世哲学,是生活中的大智能,感恩,是一种美德,它来自对生活的爱与希望。今天,在这个他乡的感恩节里,感恩,让我们的生活变得更加美好!
热心网友
时间:2023-10-19 05:01
sDef.h里的东西一定要先看一下, 否则会摸不到头脑的。
还有棋盘坐标:
象棋棋盘大小9x10,为了便于编程,规定棋盘每条边留有一个元素的边界。
这样棋盘大小(包括边界)变成11x12。棋盘x坐标轴向右,y轴向下。
黑棋永远在上方,在标准开局时左上角的黑车坐标是(1,1)。
局面用这三个变量表示:
static POINT g_pointChessman[32]; //棋子坐标
static int g_iChessmanMap[11][12]; //棋位状态
static int g_iSide; //轮到哪方走
智能部分有几个函数的前三个参数就是这个东西, 应该不难理解吧?
---------------------------------------------------------------------------------------
search函数:
先说明一下, 经常有朋友问我要原理, 但我公开源代码是给大家一个参考, 而不是什么教程,所以我不想说那些理论的东西。
基本原理是α-β搜索, 很多人工智能的教科书上都有讲到, 没看过的的赶快去找一本来啃一啃;
虽然这些书上的文字大多晦涩难懂,但毕竟讲得明明白白。
没有书的朋友请发挥一下主观能动性, 去找一找,不要来问我要, 因为我也没有。
我在这里只分析一下search函数:
弄懂α-β搜索后来看看这个博弈树, 看怎么编程实现它。
先规定一下, 我们用一个整数表示局面的好坏.
这个数越大说明局面对 "走棋方" 越有利,0表示双方实力相等。
1a( 1) ┬ 2a(-1) ┬ 3a(-1)
│ └ 3b( 1)
└ 2b(-5) ┬ 3c( 2)
├ 3d(-4)
└ 3e( 5)
分析一下这棵树,有这么个特点: 父结点的值 = -MAX(子结点的值)
我们还知道1、每个结点对应一个局面。2、底层的结点的值是"估"出来的。
于是我们可以写出伪代码了:
伪代码: 搜索一个结点下的分支, 得到这个结点的值。
参数: 局面,搜索深度
返回值:结点的值
int search(局面,int depth)
{
if(depth!=0)//不是底层结点
{
枚举出所有子结点(列出所有走法);
int count=子结点数;
int maxvalue= -∞;
for(int i=0;i<count;i++)//遍历所有结点
{
算出子结点局面;
maxvalue=max(maxvalue,search(子结点局面,depth-1));
}
return -maxvalue;
}
else //是底层结点
{
return 估计值;
}
}
这就是搜索算法的框架, 用到了递归。
MantisChess的智能部分函数都在MantisChessThink.cpp里, 其中search是搜索, 跟上面的这个search差不多,我把它copy出来注释一下:
int Search(int tmap[11][12],POINT tmanposition[32],int &tside,int man, POINT point,int upmax,int depth)
{
//前面的三个参数就是局面。
//man 和point 是走法,用来计算本结点的局面。 这里是把计算局面放在函数的开头,跟上面的伪代码不太一样。
//upmax: up - 上一层, max - 最大值, 这是α-β的剪枝用到的东西, 后面再讲。
//depth: 搜索深度
int ate,cur,maxvalue,curvalue,xs,ys;
int count;
//#####################这一段是计算本结点的局面#########################################
ate=32;
//移动棋子:
xs=tmanposition[man].x;ys=tmanposition[man].y; //原坐标
if (SideOfMan[tmap[point.x][point.y]]==!tside) //目标点有对方的棋子
{
ate=tmap[point.x][point.y]; //记录下被吃掉的棋子
if(ate==0 || ate==16)
{
return 9999;
}
tmanposition[ate].x=0; //目标点的棋子被吃掉
}
tmap[point.x][point.y]=man; //这两行是:
tmap[xs][ys]=32; //在map上的移动
tmanposition[man]=point;
tside=!tside;
//####################################################################################
depth--;
if(depth>0) //不是底层结点
{
int chessman[125];
POINT targetpoint[125];
if(EnumList(tmap,tmanposition,tside,chessman,targetpoint,count)) //枚举出所有子结点(列出所有走法)
{
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//这里是剪枝(不是α-β剪枝), 原理是在正式搜索之前先用较浅的搜索来得到误差较大的值
//然后根据这些值来对子结点排序, 只保留最好的S_WIDTH个结点进行正式搜索。
//显然,这个剪枝有一定的风险
if(depth>=2 && count>S_WIDTH+2)
{
int value[125];
cur=0;
maxvalue=-10000;
while(cur< count)
{
curvalue=Search(tmap,tmanposition,tside,chessman[cur],targetpoint[cur],-10000,depth-2);
value[cur]=curvalue;
if(curvalue>maxvalue)maxvalue=curvalue;
cur ++;
}
::Mantis_QuickSort(value,chessman,targetpoint,0,count-1); //排序
count=S_WIDTH;//剪枝
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
maxvalue=-10000;
cur=0;
while(cur< count)
{
curvalue=Search(tmap,tmanposition,tside,chessman[cur],targetpoint[cur],maxvalue,depth);
if(curvalue>maxvalue)maxvalue=curvalue;
if(curvalue>=-upmax)goto _ENDSUB; //α-β剪枝, 符合剪枝条件的就Cut掉。 这里用了goto语句了, 千万别学我。
cur ++;
}
}
else maxvalue=9800;
}
else //是底层结点
{
maxvalue=Value(tmap,tmanposition,tside); //估值
}
_ENDSUB:
//返回之前要恢复父结点的局面
//####################################################################################
tmanposition[man].x=xs; //这两行是:
tmanposition[man].y=ys; //在face上的恢复
tmap[xs][ys]=man; //在map上的恢复
if(ate!=32)
{
tmanposition[ate]=point;
tmap[point.x][point.y]=ate;
}
else tmap[point.x][point.y]=32;
tside=!tside;
//####################################################################################
return -maxvalue;
}
上面的代码用到了α-β剪枝, 举个例子就明白了:
还是这个博弈树,从上往下遍历。
1a( 1) ┳ 2a(-1) ┳ 3a(-1)
┃ ┗ 3b( 1)
┗ 2b(-5) ┯ 3c( 2)
├ 3d(-4)
└ 3e( 5)
2a遍历完后 upmax=-1, 继续遍历完3c后返回2b, 发现3c=2>-upmax, 这时就不用管3d和3e了, 因为无论他们的值是多少 2b=-max(3c,3d,3e)<2a 一定成立,
也就是说2b可以安全地剪掉。这就是α-β剪枝。
从上面的代码来看我的MantisChess算法与标准的α-β剪枝搜索并没有什么不同, 只不过加了排序和剪枝而已。
热心网友
时间:2023-10-19 05:02
已经发送!
请查收!