在QQ象棋游戏中怎样才能分辨对方是软件
整理:yaobaiwang.com 时间:07月03日
[怎样锻炼才能使短跑跑得快]怎样才可以跑得快?跳得高:一、提高起跑时的反应速度和起动速度 短跑起跑时反应速度和起动速度快的能使短跑比赛的成绩提高0.1~0.2 秒,甚至更快。仅对反应速度而言,反应速度快的...+阅读
在QQ象棋游戏中怎样才能分辨对方是软件
对方是否用软件一般有两种情况:
第一,对方直接挂软件,自动走棋;
第二,对方一边和你下,一边开软件和电脑下,他把你走的招法照搬,用来跟软件下;而把软件的招法也照搬,用来跟你下。 对于第一种情况,很好判定——你冷不丁把老帅送给他吃。如果是和人对弈,必然大大出乎他的预料,所以一般他会稍有迟疑,然后再吃你的老帅。如果对方是软件自动走棋,则它毫不犹豫就会吃掉你的将,比兔子都快。。。
对于第二种情况,就非常难判断了。因为经过人转手了一回,所以你只能根据棋来判断,而不能像第一种情况那样根据时间就可以判断。
1,一般软件行棋,总是重子不重势——这个就是软件跟人最大的不一样的地方;
2,软件一般不会走出特别精妙的招,但是也绝对不会犯低级错误;
3,人一般都有自己比较熟悉、经常采用的阵势;而软件开局则是根据棋谱来的,所以非常全面,不会特别偏向哪一种。
4,人的状态会有起伏。软件则没有。比如和人下,刚开始两三局可能走得很好,但是下到4、5局后,精力大大不如最初的时候,往往就会走出一些或明或暗的漏招、昏招出来。而软件则自然不会这样。 基本上就这些了。其中2、3、4点必须综合起来判断,因为这些只是普遍现象,但是不绝对。比如有些人精力非常旺盛,就算大战300回合也绝对不犯错。。。这种人当然是凤毛麟角,但是你不能说绝对没有。
象棋软件如何开发的
先弄明白数据的结构: MantisChessDef.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{ 算出子结点局面; 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(curmaxvalue)maxvalue=curvalue; cur ++; } ::Mantis_QuickSort(value,chessman,targetpoint,0,count-1); //排序 count=S_WIDTH;//剪枝 } // maxvalue=-10000; cur=0; while(curmaxvalue)maxvalue=curvalue; if(curvalue>=-upmax)goto _ENDSUB; //α-β剪枝, 符合剪枝条件的就Cut掉。 这里用了goto语句了, 千万别学我。 cur ++; } } else maxvalue=9800; } else //是底层结点 { maxvalue=Value(tmap,tmanposition,tside); //估...
以下为关联内容:
下象棋先怎么走比较好象棋。中国象棋先走什么。如果先架中心炮下面走什么最好:屏风马,过宫炮,仙人指路,起马局.在顺手炮中又分顺手炮直车对横车,横车对直车,缓开车等;在列炮中分大列手炮,小列手炮,后补列...
下象棋的规则都是什么拜托了各位象棋的基本下法:一.棋盘和棋子 1.棋盘 象棋盘由九道直线和十道横线交叉组成。棋盘上共有九十个交叉点,象棋子就摆放和活动在这些交叉点上。棋盘中间没有划通直线的地方,叫做"河...
中国象棋基本走法象棋的走法口诀:马走“日”字,只要几个方格加起来是个日字就行了,但是当马脚被挡的时候就不能走。 相(象)走“田”字,也要注意象脚被挡的时候就不能走,不能过河。 车直线走,可直接杀...
普通人如何在中国国际象棋协会注册关于QQ游戏国际象棋:去打运动员称号吧,先要打业余称号,比较繁。 在中国国际象棋协会注册了,不等于在世界国际象棋联合会自动注册。世界国际象棋联合会自动注册,是国家大师。 国际...
国际象棋有哪两个中心国际象棋文化:国际象棋有4个中心格,分别是d4.d5.e4.e5。没有两个中心一说。国际象棋(International Chess),又称欧洲象棋或西洋棋(港澳台地区多采用此说法),是一种二人对弈的战略棋...
天天象棋闯关第98关动态图天天象棋闯关90和113关怎么过啊下面有图:下棋步骤: 1、兵七平六,将5平4,兵八平七,将4平5,兵七平六,将5平4,车九进一,将4进1,马四退五,象7退5,车九退一,将4进1,马五退七,象5进3。 2、马二进...
中国象棋大师教学免费版v1有没有一个中国象棋程序出棋快且棋力强的呢:中国象棋大师教学免费版,专门提供象棋线上教学服务,帮助象棋爱好者们掌握了解最新的象棋知识,学习实战技巧,让象棋学习更加效率,让新手...
如何玩会下象棋王者荣耀成吉思汗怎么玩:怎样进修棋艺 象棋具有丰富的变化和内涵,要想学好象棋,必然要经历一个由不会到会,由知之较少到知之较多的过程。在这个学习过程中需要付出一定的时间和...
象棋的那种布局最好象棋什么布局可以攻守兼备:当年学棋的时候金波曾经说过一句我觉得很对的话,刚开始学棋必须要走中炮,回中炮,不仅易于上手,最关键的是培养一种进攻的意识,搏杀的意识,主动争胜就是积...