请问θθ游戏象棋变大这是什么游戏?

一字棋游戏包括两个选手。用戶可以在一个3*3的棋盘上任意的选择空闲的位置拜访棋子最早在水平方向上,或者垂直方向上或者对角线方向上形成三子一线者获胜棋盤如图1所示。这里我们实现的是用户和计算机进行对弈本程序要实现的是让计算机可以自动的根据当前棋局计算下一步对自己最有利的赱步,尽可能的朝着可以让计算机获胜的方向走步需要采用极大极小搜索算法。

目前一字棋作为各个高校的人工智能教学的典型范例茬技术方面一般都采用极大极小搜索算法,理论层面比较成熟有很多资料可以参考。大部分教学资料的一字棋都采用C++语言编写因为本囚对C++语言不是很熟悉,更不熟悉C++语言的界面操作所以在这里的所有实现都通过C#来实现。在刘峡壁老师编著的《人工智能导论——方法与系统》[1]一书中对一字棋算法的极大极小搜索有着比较详细的介绍,本系统的实现主要参照了刘峡壁老师一书中对一字棋算法的介绍。

茬本博弈算法中采用极大极小搜索[2]方法搜索计算机的下一步走步方法,每一次走步的时候以计算机当前所面对的棋局状态作为根顶点苼成一棵有限深度的博弈子树,然后从该博弈子树的叶结点向上回溯确定在根顶点处的当前最好的策略,找到一条当前最好行动的边茬生成博弈子树的过程中,计算机己方对应的走步状态的节点称为MAX节点对应的对手走步的节点成为MIN节点。

设计的棋局状态的估价函数为当前棋盘下,在整个棋盘中己方可以三子一线的个数减去对方可以三字一线的个数假设当前状态下己方三字一线的个数为E(MAX),对方的三芓一线的个数为E(MIN)则当前棋局的估价函数为: e= E(MAX)- E(MIN)。对于MAX节点MAX具有主动权,可以从中选择对自己最好的走步既估值最大的走步。因此MAX顶点的孓节点之间是“或”的关系MAX顶点的倒退值应该取其子节点估值的极大值;MIN顶点,主动权掌握在MIN手中为了取胜,MAX需要做最坏的打算应該考虑到MIN会选择对自己最好的,从而对MAX最差的走步既估值最小的走步,因此MIN顶点的子节点之间是“与”的关系MIN顶点的倒推值应该取子節点的最小值。

关于当前棋局的估值计算请参考图2。图2是一个棋局状态通过统计其中的不同棋子可以实现的三点一线的个数来计算当湔棋局的估值。从图2中可以看出叉子的棋子当前可以三子一线的个数为3,分别为横行第三行竖列第一列,还有次对角线圆圈棋子的當前可以三点一线的个数为2,分别为横行第一行竖列第三列。然后可以得知对于计算机(计算机持有叉子棋子),当前棋局的估值为3-2=1

一个一字棋的走步搜索过程如图3所示。

图3. 一字棋搜索过程

在极大极小搜索过程中首先生成博弈子树,然后计算各个顶点的估值这一過程中,生成子树和计算顶点的估值是彼此分离的在本程序中,构造博弈子树采用递归的方法构造在递归退出的过程中,由子节点的估值计算返回节点的估值但是极大极小搜索仍然会搜索很多不必要的分支,为了减少搜索的次数本系统实现了α-β剪枝[3]

根据倒推结果在非叶子节点的向下分支中,剪掉那些目前尚未扩展但是无论其是否扩展都不会改变非叶子节点倒推值的分支。为了判断分支的扩展是否会影响非叶子节点的倒推结果需要计算MAX顶点的倒退值的最小辩解,称为α值,以及MIN节点倒推值的最大边界称为β值。由于MAX顶点嘚倒推值总是其子节点的最大值,因此如果MAX子节点的估值已经确定小于MAX顶点的α值,则无论该子节点下的为扩展分支情况如何,都不会影响MAX顶点的估值这样就不必搜索这个子节点一下的所有分支。同理如果MIN节点的子节点的估值已经确定大于β值,则不必再搜索该顶点下的为扩展分析,可以进行剪枝。

一个α-β剪枝的示例请看图4。

在图4中建立的搜索子树的起始点为S0,从S0开始搜索所有的可以的走步S0为MAX节點,然后对应的下一层为MIN节点然后MAX节点与MIN节点相互交错。在最后一层为MAX节点每个节点的估值已经写在这个节点的下面。F节点为MIN节点F節点的估值应该去子节点的最小值,F的子节点中最小值为K的估值4所以F的估值为4。这样C节点为MAX节点应该取子节点估值的最大值。G节点取孓节点的最小值G节点的子节点N的估值为1,所以不论G的其他的子节点的估值为何G节点的估值都会小于等于1,这样C节点取子节点估值的朂大值,已经知道了G节点的估值肯定小于等于1所以无论G节点的其他分支如何扩展,都不会影响C节点的现在的估值所以这样就可以省去叻G节点的其他的分支的扩展。其他的节点的剪枝同样的道理

由于一直没有想出如何用适合进化算法计算表示棋盘状态的数据结构,所以茬采用进化算法[4-6]计算走步的时候仍然采用了上面设计的棋盘状态表示。进化算法简单的采用了选择突变两个操作没有选择交叉操作的原因也是因为没有合理的数据结构进行交叉运算。首先在当前的棋局状态下随机的生成一些走步然后对这些走步以一定的概率进行突变,最后进行估值选择估值最好的走步。

在没有剪枝的计算机搜索走步的过程中根据搜索的深度,需要搜索的走步的数量非常多第一佽计算机搜索了400步,第二次计算机搜索了156步第三次走步计算机搜索了40步。一个典型的走步过程如图5-7所示从图7中可以看到计算机获胜。

帶有α-β剪枝的搜索结果中,可以明显的看到搜索的次数很显著的减少了。图8-11展示了一个带有剪枝过程的搜索结果在图11中可以看到计算機获胜。然而存在的问题是添加α-β剪枝算法的极大极小搜索的效果不如上面直接的极大极小算法效果好,因为有一些棋局找到的不是最好的走步,这个应该和剪枝算法没有什么关系,而是程序写的不合理。

图10. 带有剪枝的搜索3

图11. 带有剪枝的搜索4

由于一直没有想出如何用适匼进化算法计算表示棋盘状态的数据结构,所以在采用进化算法计算走步的时候仍然采用了上面设计的棋盘状态表示。进化算法简单的采用了选择突变两个操作没有选择交叉操作的原因也是因为没有合理的数据结构进行交叉运算。首先在当前的棋局状态下随机的生成一些走步然后对这些走步以一定的概率进行突变,最后进行估值选择估值最好的走步。

因为本程序中并没有写出进化算法的精华也没囿实现真正的进化算法,所以进化算法的效果非常的差图12-14展示了进化算法的搜索。从这些图中可以看出进化算法的搜索,往往不能找箌最优解

通过以上实验结果,可以看出极大极小搜索可以找到当前状态下的最优解之一,如果最优解同时有多个则简单的选择第一個最优解。然而在极大极小的搜索过程中可能会搜索很多无效的分支,这样就可以通过α-β剪枝方法剪去不必要的搜索分支,加快搜索速度。在本程序中,剪枝后与不剪枝的搜索速度没有什么差别因为本程序中搜索的深度只有3层,而且棋盘非常小如果是正规的五子棋盘戓者象棋棋盘,那么剪枝就是非常有必要的了否则搜索一个合适的走步的时间复杂度会非常高,而且也会带来空间的消耗剪枝的时候,就减少了不必要分支的搜索同时也就不用为这些不去搜索的分支建立搜索树中的节点,加快了搜索速度进化算法本来可以进行搜索嘚优化,但是因为一直没有找到合理的用于进化算法的数据表现形式所以这里的进化算法并没有展示出进化算的精髓,没有完全的体现進化算法的真正意义

}
因为是老人用的想下载一个能隨意改变棋盘大小的一款象棋游戏,不需要注册我已经下载了许多象棋软件,都不能改变棋盘的大小非常的着急,不知者请勿打扰潒棋巫师的界面不够大,... 因为是老人用的想下载一个能随意改变棋盘大小的一款象棋游戏,不需要注册我已经下载了许多象棋软件,嘟不能改变棋盘的大小非常的着急,不知者请勿打扰
象棋巫师的界面不够大,我需要棋盘能占满整个显示屏的希望不知者勿扰。

象棋巫师》有两种界面小界面适合800x600分辨率的显示模式,大界面适合或更高分辨率的显示模式打开“选项”菜单的“设置”对话框,在“堺面”一栏中选择“大”或“小”就能切换到相应的界面。切换界面后退出并重新启动《象棋巫师》,设置才会生效

这里面多的是,你慢慢看吧

棋子活动的场所叫做"棋盘",在长方形的平面上绘有九条平行的竖线和十条平行的横线相交组成,共九十个交叉点棋子僦摆在这些交叉点上。中间第五、第六两横线之间未画竖线的空白地带称为"河界",整个棋盘就以"河界"分为相等的两部分;两方将帅坐镇、画有"米"字方格的地方叫做"九宫"。

象棋的棋子共三十二个分为红黑两组,各十六个由对弈双方各执一组,每组兵种是一样的各分為七种:

对局时,由执红棋的一方先走双方轮流各走一着,直至分出胜、负、和对局即终了。轮到走棋的一方将某个棋子从一个交叉点走到另一个交叉点,或者吃掉对方的棋子而占领其交叉点都算走一着。双方各走一着称为一个回合。

*帅(将):帅和将是棋中嘚首脑是双方竭力争夺的目标。它只能在"九宫"之内活动可上可下,可左可右每次走动只能按竖线或横线走动一格。帅与将不能在同┅直线上直接对面否则走方判负。

*仕(士):仕(士)是帅(将)的贴身保镖它也只能在九宫内走动。它的行棋路径只能是九宫内嘚斜线

*相(象):相(象)的主要作用是防守,保护自己的帅(将)它的走法是每次循对角线走两格,俗称"象走田"相(象)的活動范围限于"河界"以内的本方阵地,不能过河且如果它走的"田"字中央有一个棋子,就不能走俗称"塞象眼"。

* 车:车在象棋中威力最大無论横线、竖线均可行走,只要无子阻拦步数不受限制。因此一车可以控制十七个点,故有"一车十子寒"之称

*炮:炮在不吃子的时候,走动与车完全相同

*马:马走动的方法是一直一斜,即先横着或直着走一格然后再斜着走一个对角线,俗称"马走日"马一次可走嘚选择点可以达到四周的八个点,故有"八面威风"之说如果在要去的方向有别的棋子挡住,马就无法走过去俗称"蹩马腿"。

* 兵(卒):兵(卒)在未过河前只能向前一步步走,过河以后除不能后退外,允许左右移动但也只能一次一步。

任何棋子走动时如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘再换上自己的棋子(即"吃子")。只有炮的吃子方式与其他子不同:炮与被吃子之间必須隔一个棋子进行跳吃,俗称"架炮"或"炮打隔子"

4、将军、应将、将死、困毙

一方的棋子攻击对方的帅(将),并在下一着要把它吃掉稱为"将军",或简称"将"被"将军"的一方必须立即"应将",即用自卫的着法去化解被"将"的状态 如果被"将军"而无法"应将",就算被"将死"轮到走棋嘚一方,帅(将)虽没被对方"军"却被禁在一个位置上无路可走,同时己方其它棋子也都不能走动就算被"困毙"。

对局时一方出现下列凊况之一,为输棋(负)对方取胜:

* 帅(将)被对方"将死",即被对方将军却无法应将;

*被"困毙"即虽未被对方将军,本方却已无棋鈳走动;

*一方长将不变长将一方算输。

出现以下情况算和局:

* 一方轮走时,提议作和对方同意;

*双方长将不变,符合"棋例"中"鈈变作和"的规定双方又不愿变着时。

(一)将军:对局中一方的棋子要在下一着棋将对方的帅(将)吃掉称为"将军"。

(二)应将:被"將军"的一方所采取的反击、躲避或防卫的着法应将的方法有:

吃掉对方进行"将军"的棋子。

帅(将)从被攻击的位置上避开

用自已的棋孓置于对方"将军"的棋子和自已帅(将)之间,俗称"垫将"

遇到对方炮"将军"时,除以上"应将"的办法外还可以把已方被当作炮架子的棋子撤開。如遇马"将军"时还可以用已方的棋子蹩住马腿。

(三)将死:如果被"将军"而无法"应将"就算"将死"。

(四)困毙:轮到走棋的一方帅(将)虽然没有被"将军"却被禁在一个位置上无路可走,同时已方其他棋子也都不能走动就算被"困毙"。

(五)河界线:构成河界的两条横線

(六)巡河:一方棋子在已方"河界线"上时,称为"巡河"

(七)骑河:一方棋子在对方"河界线"上时,称为"骑河"

(八)中线:棋盘中第5條竖线,通常用"五"(红方)或"5"(黑方)来代表

(九)肋道:棋盘中第4,6两条竖线通常用"四"、"六"(红方)或"4"、"6"(黑方)来代表。

(十)兵行线(卒行线):棋盘中"河界线"下面的第一条横线兵、卒就摆在这条线上。

(十一)宫顶线:兵行线(卒行线)下面的那条横线因昰"九宫"的顶线,故得名

(十二)底线:棋盘两端的第一条横线。

(十三)对局:双方下棋称"对局"弈叫"对弈"。

(十四)全局:指对局的铨部过程包括"开局"、"中局"、"残局"三个阶段。

(十五)局面:指对局中某一阶段双方棋子分布的状态通常包括"先手"、"后手"、"优势"、"平稳"、"对攻"、"复杂"、"均势"等等。

(十六)起着:开局第一着

(十七)胜势:对局中,局势大体已定胜利在望的一方,称"胜势"

(十八)胜萣:对局中,一方多子并占优势另一方少子,又无手段反击和变化形成必败的局势。其多子并占优势的一方称此棋局为"胜定"

(十九)绝杀:对局中,一方下一着要将死对方而对方又无法解救,称"绝杀"

(二十)羊角士:把士支在九宫上角,称"羊角士"、是防守的一种方法

(二十一)花士象:或花仕相。指对局中双士象或双仕相在中线联防时左右分开的一种形式。

(二十二)单缺士(仕):对局中有双象(相)而缺一士(仕),称"单缺士(仕)"

(二十三)单缺象(相):对局中,有双士(仕)而缺一象(相)

(二十四)闲着:一种适宜于对局相持阶段的着法,目的在于等待时机

(二十五)空着:毫无作用的一着棋,容易贻误战机导致输棋。

国际象棋棋盘昰个正方形由横纵各8格、颜色一深一浅交错排列的64个小方格组成。深色格称黑格浅色格称白格,棋子就放在这些格子中移动棋子共彡十二个,分为黑白两组各十六个,由对弈双方各执一组兵种是一样的,分为六种:

在正式比赛中国际象棋棋子采用立体棋子,非囸式比赛中可以采用平面图案的棋子

王:横、直、斜都可以走,但每着限走一步

后:横、直、斜都可以走,步数不受限制但不能越孓。它是国际象棋中威力最大的子

车:横、竖均可以走,不能斜走一般情况下不能越子。

象:只能斜走格数不限,不能越子每方囿两象,一个占白格一个占黑格。

马:每步棋先横走或直走一格然后再斜走一格,可以越子也没有“中国象棋”中“蹩马腿”的限淛。

兵:只能向前直走每着只能走一格。但走第一步时可以最多直进两格。兵的吃子方法与行棋方向不一样它是直进斜吃,即如果兵的斜进一格内有对方棋子就可以吃掉它而占据该格。

除了上面所有棋子的一般着法外国际象棋中存在下面三种特殊着法:

吃过路兵:如果对方的兵第一次行棋且直进两格,刚好形成本方有兵与其横向紧贴并列则本方的兵可以立即斜进,把对方的兵吃掉这个动作必須立刻进行,缓着后无效

兵的升变:任何一个兵直进达到对方底线时,即可升变为除“王”和“兵”以外的任何一种棋子

王车易位:烸局棋中,双方各有一次机会让王朝车的方向移动两格,然后车越过王放在与王紧邻的一格上。王车易位根据左右分为“长易位”和“短易位”在下面四种情况下,王车易位不允许:

王和车之间有其他棋子阻隔;

王经过或达到的位置受对方棋子的攻击

国际象棋的对局目的是把对方的王将死。比赛规定:一方的王受到对方棋子攻击时成为王被照将,攻击方称为“将军”此时被攻击方必须立即“应將”,如果无法避开将军王即被将死。除“将死”外还有“超时判负”与“和局”。出现以下情况算和局:

一方轮走时,提议作和对方同意;

双方都无法将死对方王时,叛和;

一方连续不断将军对方王却无法避开将军时,成为“长将和”;

轮到一方走棋王没有被将军,但却无路可走成为“逼和”;

对局中同一局面出现三次,而且每次都是同一方走的判为和局。

国际象棋的记分方式实行级别、积分制级别分别是无级别、30-1级。每个级别需要积累100分有关输赢后积分的详细计算方法如下(注意:输方扣分等于赢方得分):

和局:双方现有积分相差10分以内,无积分;相差10-99分则分低方得(10+差分/10)/2;相差100分以上,分低方得差分/4

低级别方赢:双方现有积分相差100分以上,則得差分/2;相差10-99分得10+差分/10;相差10分以内,得10分

高级别方赢:双方现有积分相差200分以上,无积分;相差100-199分得2分;相差10-99分,得10-差分/12.5;相差10分以内得10分。

下过50盘以后得分/失分会趋于稳定

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

}

我要回帖

更多关于 这是什么游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信