象棋游戏课程设计

象棋游戏课程设计
象棋游戏课程设计

数学与计算机学院

课程设计说明书

课程名称: 算法设计与分析-课程设计

课程代码: 7106620

题目: 象棋游戏软件设计

年级/专业/班: 07级信科2班

学生姓名: 陈俊良

学号: 312007*********

开始时间:2010 年12月26日

完成时间:2011 年01月 09 日

课程设计成绩:

指导教师签名:年月日

算法设计与分析

目录

1 引言 (1)

1.1问题的提出 (1)

2.需求分析 (3)

2.1系统运行环境 (4)

2.2问题描述 (4)

3概要设计 (6)

4系统流程图 (7)

5 详细设计 (9)

5.1棋盘棋子表示 (9)

5.2着法生成 (11)

5.3搜索算法 (13)

5.4置换表 (17)

5.5调试分析 (18)

6源程序 (18)

7心得体会 (32)

参考文献 (33)

I

算法设计与分析

1 引言

1.1 问题的提出

计算机博弈是人工智能研究的一个重要分支,被专家门称为人工智能界的果蝇,意思是说人类对计算机博弈的研究衍生了大量的研究成果,这些成果在人工智能领域产生了重要影响。国际象棋计算机博弈研究已经有了五十多年的历史,IBM公司在1997年开发出了超级计算机“深蓝”战胜了当时世界公认第一的国际象棋大师卡斯帕罗夫,标志其水平已超过国际象棋世界冠军。而中国象棋的历史更为悠久,早在2000多年前的战国时代就已经有了关于象棋的记载。中国象棋计算机博弈的难度绝不会低于国际象棋,图1.1是几种棋类游戏空间复杂度和树复杂度对比,其中中国象棋的空间负责度是国际象棋的100倍,而树复杂度则达到了1027倍。

表1.1 几种棋类空间复杂度和树复杂度对比

中国象棋计算机博弈起步晚,七十年代末才有相关的研究文献,比国际象棋晚了近20年,相对国际象棋计算机博弈技术还不够成熟。但近年来通过许多中国象棋软件编程爱好者和多个象棋开发团队的努力,使中国象棋软件水平有了长足的进步,慢棋已达到业余大师水平,快棋可以和象棋大师对抗。但要设计出打败人类的中国象棋软件,还需要一段发展过程。

许多学者认为,对于人工智能研究而言,象棋的重要作用相当于遗传

1

学研究的果蝇。就是说人类对机器博弈的研究衍生了大量的研究成果,这些成果对更广泛的领域产生了重要影响。人工智能的先驱者们曾认真地表明:如果能够掌握下棋的本质,也许就掌握了人类智能行为的核心;那些能够存在于下棋活动中的重大原则,或许就存在于其它任何需要人类智能的活动中。因此对于中国象棋人机博弈问题的研究意义重大。

2.需求分析

1.走棋和吃子

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

2、各种棋子的走法

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

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

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

?车:车在象棋中威力最大,无论横线、竖线均可行走,只要无子阻拦,步数不受限制。因此,一车可以控制十七个点,故有"一车十子寒"之称。?炮:炮在不吃子的时候,走动与车完全相同。炮与被吃子之间必须隔一个棋子,进行跳吃,俗称"架炮"或"炮打隔子"。

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

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

3、吃子:任何棋子走动时,如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘,再换上自己的棋子(即"吃子")。

2.1系统运行环境

(1)硬件环境

本系统适用于那种Inter386以上计算机,内存容量为128M,应配备,键盘,鼠标,显示器等外部设备。

(2)软件环境

本系统的设计采用Visual C++6.0编写。在Windows XP SP2环境下测试通过

(3)本游戏软件在Windows平台下都可以运行。

2.2问题描述

象棋是一种双方对阵的竞技项目。棋子共有三十二个,分为红黑两组,各有十六个,由对弈的双方各执一组。兵种是一样的,分为七种:红方:红方有帅一个,仕、相、车、马、炮各两个,兵五个。

黑方: 黑方有将一个,士、象、车、马、炮各两个,卒五个。

其中帅与将;仕与士;相与象;兵与卒的作用完全相同,仅仅是为了

区别红棋和黑棋而已。

棋子活动的场所,叫作"棋盘"。在长方形的平面上,绘有九条平行的竖线和十条平行的横线相交组成,共有九十个交叉点,棋子就摆在交叉点上。中间部分,也就是棋盘的第五,第六两横线之间末画竖线的空白地带称为“河界”。两端的中间,也就是两端第四条到第六条竖线之间的正方形部位,以斜交叉线构成“米”字方格的地方,叫作“九宫”(它恰好有九个交叉点)。

整个棋盘以“河界”分为相等的两部分。为了比赛记录和学习棋谱方便起见,现行规则规定:按九条竖线从右至左用中文数字一-九来表示红方的每条竖线,用阿拉伯数字‘1’~‘9’来表示黑方的每条竖线。对弈开始之前,红黑双方应该把棋子摆放在规定的位置。任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。

任何棋子在走动时,如果乙方棋子可以到达的位置有对方的棋子,就可以把对方棋子拿出棋盘(称为吃子)而换上自己的棋子。只有炮的"吃子"方式与它的走法不同:它和对方棋子之间必须隔一个子(无论是自己的还是对方的),具备此条件才能"吃掉"人家。一定要注意,中隔一个棋子,这个棋子俗称“炮架子”。帅和将被吃或不能动弹即输棋。下面是具体的界面:

3概要设计

首先将棋盘的每一格坐标化,横坐标从01开始到09。纵坐标从01开始到10,初始横坐标01行上摆放红子棋子,01放车、02放马、03放象、04放士、05放帅,06、07、08、09对称放士、象、马、车。横坐标03行02、08列放炮,横坐标04行01、03、05、07、09列放兵。绿子旗子和红子棋子对称放在对面。在这个初始化的坐标上每一个棋子都对应的有一个点,并且对应一个数,红子棋子从车(i=0)开始一直到帅,for(i=0;i<5;i++); x[i][1]=x[10-i][1]=i+10;既从车到帅对应的数为:11,12,13,14,15;兵为17,炮为16;绿子棋子:x[i][10]=x[10-i][10]=i+20; 既从车到帅对应的数为:21,22,23,24,25;卒为27,炮为26;具体如下图:

4系统流程图

5软件系统结构图

5 详细设计

5.1 棋盘棋子表示

使用位棋盘技术,我们的棋盘是一个大小为16x16的二维数组,即程序里的 ucpcSquares[256] 。象棋只有10x9的大小,用16x16的二维数组似乎有些浪费,然而这给程序带来了很多好处。

(1),免去了烦琐的边界判断(只要预先给10x9外的其他棋格赋值一个非空的虚拟棋子即可)。

(2),我们可以根据棋子的位置数字potion(0-255)快速得到行列信息,行号 = potion>>4 ;列号= (potion<<4) >> 4

图“出棋制胜”软件的棋盘表示

5.2着法生成

由于采取了16x16的棋盘数组来表示棋子位置,所以一步着法可以表示成:sGX,sGY,eGX,eGY4个[0到15]之间的数字,合并成一个则为0-65535之间的整数。

(1),我们将在图5.2这个棋盘上演绎马是如何走棋的

首先,我们预置一个常量数组 ccInBoard[256],表示哪些格子在棋盘外(紫色格子,填0),哪些格子在棋盘内(浅色格子,填1),所以就没有必要使用 x >= X_LEFT && x <= X_RIGHT && y >= Y_TOP && y <= Y_BOTTOM 之类的边界判断语句了,取而代之的是 ccInBoard[sq] != 0。

其次,一维数组的好就是上下左右关系非常简明——上面一格是sq - 16,下面一格是 sq + 16,左面一格是 sq - 1,右面一格是 sq + 1。马可以跳的点只有8个,终点相对起点的偏移值是固定的:

const char ccKnightDelta[4][2] = {{-33, -31}, {-18, 14}, {-14, 18}, {31, 33}};

而对应的马腿的偏移值是:

const char ccKingDelta[4] = {-16, -1, 1, 16};

这个数组之所以命名为 ccKingDelta,是因为它也是帅(将)的偏移值。

这样,找到一个马的所有走法就容易很多了。首先判断某个方向上的马腿是否有子,然后判断该方向上的两个走法是否能走:

(2),界面模块用户着法合法性判断

如果让用引擎的着法生成器生成所有着法看是否包含用户的着法则太浪费时间,“出棋制胜”用了一个小技巧,下面看最负责的马象着法合法性判断,(sGX,sGY)是着法起始坐标,(eGX,eGY)是着法结束坐标。

(3),判断将军

中国象棋的胜负标准就是帅(将)有没有被将死或困毙,我们的做法很简单——生成所有走法,如果走任意一步都会被将军,那么该局面就是将死或困毙的局面,棋局到此结束。

那么如何来判断是否被将军呢?我们有两种做法:

A. 让对方生成全部走法,看看其中有没有走法可以吃掉自己的帅(将);

B. 按照判断走法是否符合规则的思路,采用更简单的做法。

第一种做法没有什么不对的,但电脑象棋程序每秒种需要分析上万个局面,对每个局面都去生成全部走法显然太花时间了,所以我们要尝试第二种做法。其实判断帅(将)是否被将军的过程并不复杂:

(1) 假设帅(将)是车,判断它是否能吃到对方的车和将(帅)(中国象棋中有将帅不能对脸的规则);

(2) 假设帅(将)是炮,判断它是否能吃到对方的炮;

(3) 假设帅(将)是马,判断它是否能吃到对方的马,需要注意的是,帅(将)的马腿用的数组是 ccAdvisorDelta,而不是 ccKingDelta;

(4) 假设帅(将)是过河的兵(卒),判断它是否能吃到对方的卒(兵)。

这样,一个复杂的走法生成过程(方案A)就被简化成几个简单的走

法判断过程(方案B)。

5.3 搜索算法

(3.1)博弈树的基本概念

如果参加博弈的不是一个主体,而是对抗性的敌我双方,则搜索的进程不仅仅取决于其中一方的意愿,而是取决于对方应付的策略。由此而产生的搜索树,通常称为博弈树[5]。图2.2就是一颗红方走棋时展开的4层博弈树。

红方走棋时展开的4层博弈树

博弈树搜索的目标是在博弈的任何一个中间阶段,站在博弈双方其中一方的立场上,可以构想一颗博弈树。这颗博弈树的根节点是当前时刻的棋局,它的儿子节点是假设再行棋一步以后的各种棋局,孙子节点是从

儿子节点的棋局再行棋一步的各种棋局,以此类推,构造整棵博弈树,直到可以分出胜负的棋局。像这样从根部向下递归产生的一棵包含所有可能的对弈过程的搜索树,成为完全搜索树。像这样的完全搜索树是非常庞大的,正如表1.1所示,中国象棋的完全搜索树复杂度是10150,IBM 公司目前正在制造全球运算速度最快的超级计算机,估计峰值操作突破一千万亿(即1015)浮点运算的限制。则计算如此一颗完全搜索树需要的时间是10135妙,约3*10127年。所以不可能建立到棋局结束的完全搜索树,搜索也不必真地进行到分出胜负的棋局,只需要在一定深度范围内对局面进行评价即可。当搜索进行到一定深度,用局面评价机制来评价棋局,按照极大极小的原则选出最优,向上回溯,给出这一局面的父亲节点的价值评价,然后再继续向上回溯,一直到根节点,最优走步就是这样搜索出来的。

(3.2)极大极小算法

极大极小值算法是解决博弈树问题的基本方法。

在象棋博弈中,极大极小值算法体现在始终站在博弈一方的立场选择着法。因为一方所追求的利益恰是另一方极力避免的,所以在这一方行棋的时候,选择价值极大的儿子节点着法,另一方行棋则选择价值极小的儿子节点着法。这就是一个极大极小过程。

当然,程序不能也没有必要做到搜索整棵博弈树的所有节点,对于一些己经确定为不佳的走步可以将以它为根节点的子树剪掉。在这个过程中,最为重要的是搜索算法,高效的搜索算法可以保证用尽量少的时间和空间损耗来达到寻找高价值的走步。但是真的想要博弈程序棋力提高,还必须有一个好的局面评价机制,即估值算法作后。就是说,用这个估值算

法评价的局面价值必须是客观的、正确的,可以确凿的评价局面的优劣以及优劣的程度。如图2.3就是一颗结合估值算法搜索5层的完全极大极小博弈树。

图极大极小搜索

在图2.3中,最底层为当前搜索深度(5层)下对各个可能出现的棋面进行估值的结果,按照由底向上推理,先由黑方选择从第5层各个子节点中选择较小的值推出第4层各个父节点,然后红方从第4各个节点中选择教大的值向上推出第3层各个父节点,依次交替类推,推出第一层的节点值,从而选择出博弈路径。

(3.3) 负极大值法

普通的极大极小值算法有点麻烦,一方试图取极小值,而另一方试图取极大值,也就是说我们总要检查哪一方要取极大值。负极大值法是一种可以避免此类判断的算法,负极大值算的值是各子节点的值的负数的极

大值。如要这个算法正确运作。例如象棋,估值函数必须对谁走棋敏感,也就是说对于一正的估值的话,则对于一个该黑方走棋的局面返回负的估值。这样才能保证原来取极大值还是取极大值,原来取极小值则转变成取儿子节点负数的极大值。(3.4)Alpha-Beta搜索算法

Alpha-Beta算法的原理是根据当前的信息确定儿子节点的上下界Alpha,Beta,然后根据儿子节点的儿子节点返回值进行剪枝操作。其具体过程如图2.4所示:

图Alpha-Beta剪枝示意图

图左半部分是一颗极大极小树的片段,节点下面的数字为该节点的值,搜索开始时,A为MAX局面,要从所有的儿子节点中返回最大值,首先搜索第一个子节点B,假定得到返回值10,那么此时可以确定A的值必

定>=10。接着搜索C的第一个子节点D,得到值8,因为C为MIN局面,返回所有子节点最小值,此时可以确定C的值必定<=8。不论E,F等其他C的子节点可以取道多大的值,C的值都会小于B,不会被A选中,即可剪去对等其他C的子节点的搜索。此为Alpha剪枝(下界剪枝)。

图右半部分是是一颗极大极小树的片段,节点下面的数字为该节点的值,搜索开始时,A为MIN局面,要从所有的儿子节点中返回最小值,首先搜索第一个子节点B,假定得到返回值10,那么此时可以确定A的值必定<=10。接着搜索C的第一个子节点D,得到值12,因为C为MAX局面,返回所有子节点最大值,此时可以确定C的值必定>=12。不论E,F等其他C 的子节点可以取道多小的值,C的值都会大于B,不会被A选中,即可剪去对等其他C的子节点的搜索。此为Beta剪枝(上界剪枝)。

如果能尽早的找到值较大的子节点,则能在搜索中剪去很多兄弟节点。所以说Alpha-Beta算法的效率很大程度上受子节点顺序的影响。

5.4置换表

几乎所有的棋类计算机博弈程序都使用了置换表技术。

“出棋制胜”的置换表非常简单,以局面的 Zobrist Key % HASH_SIZE 作为索引值。每个置换表项存储的内容为:A. 深度,B. 标志,C. 分值,D. 最佳走法,E. Zobrist Lock 校验码。

置换表的处理函数ProbeHash 和 RecordHash,RecordHash在判断深度后,将节点的值赋值给Hash表项中的每个值。

ProbeHash 的过程:

(1) 检查局面所对应的置换表项,如果 Zobrist Lock 校验码匹配,那么我们就认为命中(Hit)了;

(2) 是否能直接利用置换表中的结果,取决于两个因素:A. 深度是否达到要求,B. 非PV节点还需要考虑边界。

第二种情况是最好的(完全利用),ProbeHash 返回一个非-MATE_VALUE 的值,这样就能不对该节点进行展开了。

如果仅仅符合第一种情况,那么该置换表项的信息仍旧是有意义的——它的最佳走法给了我们一定的启发(部分利用)。

5.5 调试分析

输入02,3,05,3。则炮走到05,03的位置,该步可以明显的显示。再输入02,10,03,08,绿子的马走到03,08的位置,继续输入03,4,03,5红子的兵走动。输入07,10,05,8绿子的相走到05,8的位置,一直继续下去直到红子吃掉绿子的将,提示为:lv qi shu le .或者绿子吃掉红子的将,提示为:hong qi shu le.或者提示为:平局.

6源程序

#include

#include

int x[11][12];

void main()

{

int i,j;

int x1,y1,x2,y2,rg,gg;

int rgo(int,int,int,int);

int ggo(int,int,int,int);

/*初始化棋子(开局)*/

for(i=1;i<=5;i++)

中国象棋-游戏规则

棋盘和棋子 象棋是棋子共三十二个,分为红黑两组,各十六个,由对弈双方各执一组,兵种是一样的,分为七种: 红方:帅、仕、相、车、马、炮、兵 黑方:将、士、象、车、马、炮、卒 其中帅与将、仕与士、相与象、兵与卒的作用完全相同,仅仅是为了区分红棋和黑棋。 棋子活动的场所,叫做"棋盘",在长方形的平面上,绘有九条平行的竖线和十条平行的横线相交组成,共九十个交叉点,棋子就摆在这些交叉点上。中间第五、第六两横线之间未画竖线的空白地带,称为"河界",整个棋盘就以"河界"分为相等的两部分;两方将帅坐镇、画"米"字方格的地方,叫做"九宫"。 将或帅 移动范围:它只能在王宫内移动。 移动规则:它每一步只可以水平或垂直移动一点。 士 移动范围:它只能在王宫内移动。 移动规则:它每一步只可以沿对角线方向移动一点。 象 移动范围:河界的一侧。 移动规则:它每一步只可以沿对角线方向移动两点,另外,在移动的过程中不能够穿越障碍。 马 移动范围:任何位置

移动规则:每一步只可以水平或垂直移动一点,再按对角线方面向左或者右移动。另外,在移动的过程中不能够穿越障碍。 车 移动范围:任何位置 移动规则:可以水平或垂直方向移动任意个无阻碍的点。 炮 移动范围:任何位置 移动规则:移动起来和车很相似,但它必须跳过一个棋子来吃掉对方的一个棋子。 兵 移动范围:任何位置 移动规则:每步只能向前移动一点。过河以后,它便增加了向左右移动的能力,兵不允许向后移动。 胜、负、和 对局中,出现下列情况之一,本方算输,对方赢: 帅(将)被对方"将死",即被对方将军却无法应将; 自己宣布认输; 走棋超时; 走棋时循环反复向对方将军三次,违反"不得将三将"的规定。 出现以下情况,算和局: 一方提议作和,对方同意; 双方走棋出现循环反复达三次,符合"不变作和"的规定,双方又不愿变着时。

象棋游戏毕业设计

智能中国象棋系统的设计与实现 摘要 人工智能(AI)中国象棋系统是将计算机知识和中国象棋知识结合起来的一种新型的游戏方式。智能中国象棋系统在此基础上实现人与机器的对弈,突破了以往传统象棋游戏只能人与人对战的限制,使中国象棋这一古老的游戏形式焕发出蓬勃朝气。 本文结合在中国象棋机器博弈方面的实践经验,在分析了中国象棋游戏需求基础上,设计并实现了智能中国象棋系统。该系统包括人人对战、人机对战、制作棋谱、播放棋谱以及挑战英雄榜等功能模块。人人对战规则明确,包含了中国象棋所有的着法;人机对战中电脑棋力分为简单、中等、困难三个等级,方便了不同水平人群的选择;制作和播放棋谱模块容易操作,方便学习;挑战英雄榜则为象棋游戏增加了乐趣。 本系统的实现满足了人们对中国象棋的基本需求,解决了传统象棋游戏学习性差、棋谱不易保存、不易演示等问题。 关键词:计算机博弈,中国象棋,人机对战,制作棋谱,搜索算法

Intelligent Chinese Chess System Design and Implementation Abstract Artificial Intelligence (AI) Chinese Chess System is a new games’ way which combines with computer knowledge and Chinese Chess knowledge.Intelligent Chinese Chess System on the basis of it which completes the game between human and computer , breaking the traditional chess game’s restriction that only can play against people. So that the ancient game of Chinese chess become prosperity . With the practical experience in Chinese chess computer game,a detailed analysis and research has been done .Based on those, I designed and implemented the Intelligent Chinese Chess System .This system includes the game against human ,the gme between computer and human ,make chess manual ,play chess manual and hero list functions .The game against human function has all the Chinese Chess rules and they are very clear.In the game between computer and human function ,computer thinking depth is divided into simple,medium and difficulty.It facilitate the choice of different levels. Making and playing chess manual fuctions are easy to operating and learning. Hero list fuction adds much fun to chess game. This system satisfied the basic demand of people to Chinese chess and solved the studying hard and the theoretical is not easy to making and playing of the traditional chess game. Key Words:Computer Game, Chinese Chess,Game between Human and Computer, Make Chess Manual, Search Tecniques

中国象棋需求与设计方案

中国象棋需求与设计方案 (WORD版完整可编辑,需更多资料请联系) 一、系统概述 1.1 软件用途 提供了一个PC端的中国象棋游戏。同时发布了GUI版与CLI版。其中CLI 版为象棋AI部分开发过程中用作测试。但已经具有完整的人机对弈功能与相对友好的界面。考虑到有些用户可能相对GUI更偏向命令行操作方式,因此与GUI 版本一起发布。 CLI版本只有人机对弈功能,默认黑方(AI)先走。AI原理与GUI版相同,以下文档只对GUI版作出说明。如无特殊说明, 提到”软件”时,所指均为GUI版本。 软件具有两种模式,双人对弈与人机对弈。 若选择双人对弈, 因为此版本暂未开发联机对弈功能, 只能双人共用一台PC,红方先走,黑方后走,有一方被将死,即无棋可走时,电脑会自动判定胜负。 若选择人机对弈,默认用户执红子,AI执黑子。软件可自动判定胜负。 软件在ubuntu 13。04、windows7、windowsXP平台下测试性能良好。 此版本未实现的功能:长将判负。即假定红方只剩5个兵与一个将,且全部过河。黑方只剩一个将与一个车。则黑方基本不可能将死红方。但红方必定可在有限步之后将死黑方。则黑方为自保,最优策略是每一步都用车将红方的军,但无法将其将死。此时游戏会陷入循环。在正式象棋比赛中,任何情况下,长将判负。 考虑到主要是面向人机对弈, 和棋功能无意义, 亦未开发。 此AI与软件作者对弈,目前AI保持不败战绩。与其他测试者对弈,也是胜多败少。与作者ipad上的象棋app对弈,互有胜负,但软件AI胜少败多

游戏截图: 进场画面: 游戏界面:

1.2游戏特色 最大可达可接受时间内7层搜索深度,AI具有较高棋力。游戏固定权值与棋盘位置分值相结合的评估函数。基于alpha-beta搜索,走法排序后PVS搜索策略。 1.3 系统开发过程 软件作者为吕文龙与高楠。吕文龙负责开发系统的AI部分,即局面表示,走法生成,局面评估,Alpha-Beta搜索,搜索策略优化。高楠负责系统GUI的设计与实现。部分GUI设计吕文龙亦有参与。

基于java语言的中国象棋设计与实现

题目:基于JA V A语言的中国象棋设计与实现

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

【摘要】 电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来,随着人工智能及计算机硬件的发展,计算机象棋程序的水平也不断地得到提高。 本文通过研究中国象棋的国内外研究现状、分析中国象棋的需求和用JA V A 语言设计中国象棋程序的可行性,同时根据国际象棋程序设计的一些成功经验,主要借鉴了位棋盘、Zobrist键值等,针对中国象棋程序设计的一系列问题,总结出一些中国象棋程序的设计方法。根据该方法设计出了符合中国象棋行棋和吃子规则,能够判断胜负,能够实现悔棋、重新开始等多种功能,而且界面十分美观的中国象棋程序,并给出了JA V A语言的实现方法。 关键词:中国象棋,位棋盘,Zobrist键值,着发生成

基于Android的中国象棋毕业设计

基于Android的中国象棋 毕业设计 目录 1 绪论 (1) 1.1 中国象棋的背景介绍 (1) 1.1.1 中国象棋的历史起源 (1) 1.1.2 中国象棋的发展现状与前景 (1) 1.2 Android操作系统简介 (2) 1.2.1 Android操作系统背景 (2) 1.2.2 Android系统的优势与弊端 (3) 1.2.3 Android操作系统的现状与发展前景 (4) 2 Android系统的架构与开发环境 (6) 2.1 Android的体系结构 (6) 2.2 Android的四大组件 (8) 2.3 Android开发环境的搭建 (9) 2.3.1 Java JDK的安装 (9) 2.3.2 eclipse的下载与使用 (9) 2.3.3 Android开发工具的安装 (9) 2.3.4 Android工程的建立 (10) 3 中国象棋的走法规则与实现分析 (13) 3.1 中国象棋的走法规则 (13) 3.1.1 棋盘和棋子介绍 (13) 3.1.2 中国象棋的规则和胜负的判定 (14) 3.2 中国象棋的走法分析 (15) 4 中国象棋软件的主要功能和界面布局 (19) 4.1 中国象棋软件实现的主要功能 (19) 4.2 软件的主要布局与实现 (20) 4.2.1 开始游戏选项界面 (20) 4.2.2 中国象棋选项界面 (22)

5 中国象棋的算法设计与实现 (24) 5.1 工程的建立 (24) 5.2 工程模块的介绍 (25) 5.2.1 各个类主要实现的功能 (25) 5.2.2 工程中其他模块的介绍 (26) 5.3 中国象棋的逻辑算法和实现 (26) 5.3.1 棋盘和棋子的算法分析 (26) 5.3.3 棋盘和棋子的绘制 (28) 5.3.4 棋子的算法实现 (30) 6 问题与软件的改进 (32) 6.1 遇到的问题与解决方法 (32) 6.2 软件所需的改进 (33) 结束语 (34) 参考文献 (35) 致谢 (36) 附录 (38)

象棋游戏的设计与实现

象棋游戏的设计与实现

目录 1引言 (1) 1.1象棋设计背景和研究意义 (1) 1.2象棋设计研究方法 (1) 2人工智能算法设计 (2) 2.1棋局表示 (3) 2.2着法生成 (4) 2.3搜索算法 (5) 2.4历史启发及着法排序 (9) 2.5局面评估 (9) 2.6程序组装 (11) 3界面及程序辅助设计 (12) 3.1界面基本框架 (12) 3.2多线程 (13) 3.3着法名称显示 (14) 3.4悔棋和还原 (15) 4系统实现 (16) 结论 (19) 参考文献 (20)

1引言 1.1 象棋设计背景和研究意义 电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。游戏,作为一种娱乐活动。早期的人类社会由于生产力及科技的制约,只能进行一些户外的游戏。随着生产力的发展和科技进步,一种新的游戏方式——电子游戏也随之诞生。 当计算机发明以后,电子游戏又多了一个新的载体。电子游戏在整个计算机产业的带动下不断地创新、发展着。自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。而计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想。事实上,个人计算机软件市场的大约80%销售份额是来自游戏软件。棋牌游戏属于休闲类游戏,相对于角色扮演类游戏和即时战略类游戏等其它游戏,具有上手快、游戏时间短的特点,更利于用户进行放松休闲,为人们所喜爱,特别是棋类游戏,方便、快捷、操作简单,在休闲娱乐中占主要位置。作为中华民族悠久文化的代表之一,中国象棋不仅源远流长,而且基础广泛,作为一项智力运动,中国象棋开始走向世界。 随着计算机处理速度的飞速提高,人们很早就提出了疑问:计算机是否会超越人类?世界国际象棋大师已被计算机打败,计算机已经超过了人类?而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。 1.2 象棋设计研究方法 对于象棋来说,核心设计主要包括人工智能算法的以及整个游戏中界面及程序辅助部分的实现,主要用 Visual C++ 进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。 本文的目标是实现一款有着一定下棋水平且交互友好的中国象棋人机对弈程序。 该程序功能包括: *人机对弈; *搜索深度设定; (电脑棋力选择)

象棋游戏规则

中国象棋比赛规则 一、基本规则 遵循友谊第一,比赛第二的原则,讲究棋风、棋德,赛出风格,比出水平。 二、赛制与计分 1.赛制:小组积分循环,取前2名。然后进行交叉比赛。 (1)小组积分循环:赛2盘,胜者积3分,和积1分,负/弃权不积分。小组积分相同看胜负关系,胜负关系循环看净胜局数。 (2)交叉比赛:赛2盘,若两盘平局加赛一局。比赛猜先,红先黑后,和棋先手算负。 (3)比赛开始5分钟未到指定地点参赛的视为弃权,积0分,判参赛对方胜,胜者积2分。 (4)已经排好对阵的双方,如果有特殊情况不能按规定时间参赛,请于提前告知,以便及时协调调整。 2.比赛用时:任意时间(对于特殊情况酌情处理)。 三、胜负判定 (1)对局时,一方出现下列情况之一,就算输棋,对方得胜: 帅(将)被对方“将死”; 走棋后形成帅(将)直接对面; 被困毙(轮到走棋的一方,无子可走,就算被“困毙”); 长将、长吃;

自己宣布认输; 在同一棋局中,三次“犯规; 在对局中拒绝遵守本规则或严重违反纪律。 (2)对局时,出现下列情况之一,就算和棋: 属于理论上公认的双方均无取胜可能的局势; 提议作和,应使双方机会均等。只要是一方提和,另一方已宣告同意,双方都不许反悔; 双方走棋出现循环反复三次,符合“棋例”中“不变作和”的有关规定。 四、行棋规则 1.一着棋走了以后,不得再予更改。落子生根,以手离开棋子为准。 2.触摸对方的棋子,就必须吃掉那个棋子,只有当己方的任何棋子都无法去吃时,才可以另行走子。 3.不准摸子,否则按技术犯规论处。 五、犯规 对局时,一方出现下列情况之一,即为犯规: 1.在对方走棋时间内,无故提出问题,或有其他构成干扰对方注意力的行为; 2.提议作和经对方拒绝后,连续提出; 3.摸触了己方不可能走动的棋子; 4.摸触了对方的棋子,而己方的任何棋子都无法吃掉它; 六、判决标准 1.循环赛结束后,每组积分最高者胜出。

中国象棋人机对弈游戏的设计与实现 简单参考

中国象棋人机对弈游戏的设计与实现 摘要 象棋程序的实现可以被分为人工智能和界面程序辅助两大部分。人工智能部分主要体现计算机的下棋思路,既计算机如何进行思考并以最佳走法完成下一步,先由相应的搜索算法进行搜索,并对各种可能的走法进行估值,从中选择胜利面最大的一步;而界面及程序辅助部分主要便于用户通过以前的下棋步骤,更好地调整下棋思路,着法显示使用户能够清楚地知道下棋过程,更准确地把握整个局面。 本文首先研究了中国象棋在计算机中的表示问题,接着讨论如何产生着法一系列相关内容。其次研究了博弈树的极小极大搜索技术及在此基础上发展起来的Alpha-Beta剪枝算法,使用MFC文档视图体系结构和Visual C++开发工具,实现了一个具有一定棋力的中国象棋人机对弈程序。 关键词:中国象棋;人工智能;博弈树;Alpha-Beta搜索 The Design and Implementation of Chinese Chess Abstract The implementation of a chess program can be decomposed into two major parts: the artificial intelligence and the user interface and program assist. The part of artificial intelligence shows the way of computer thinking, and which step is the best step would be decided by it. Firstly, the computer uses search algorithms to search, and then evaluates every impossible step, finally choses the best one, the other part is used for the player to adjust his thought to the currently phases. The display of step list makes player know the process of chess distinctly, and let player make a better choice. This paper firstly studies how to represent a chess board in computer, then discusses how to generate legal moves. Secondly, this paper studies the mini-max searching procedure of Game Tree, and the Alpha-Beta pruning algorithm. A Chess-playing system is designed and developed, which is built on the integrated computer MFC SDI document view architecture by using Visual C++. Key words: Chinese chess; Artificial Intelligence; Game tree; Alpha-Beta searching 象棋设计研究方法 对于象棋来说,核心设计主要包括人工智能算法的以及整个游戏中界面及程序辅助部分的实现,主要用Visual C++ 进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。 本文的目标是实现一款有着一定下棋水平且交互友好的中国象棋人机对弈程序。 该程序功能包括: *人机对弈; *搜索深度设定; (电脑棋力选择) *悔棋、还原; *着法名称显示;

中国象棋(设计)

中国象棋(web版设计) 一、概述 1.1系统开发背景 只要能打开IE,10秒钟即可进入游戏,不用下载庞大客户端,更不存在机器配置不够的问题。最重要的是关闭或者切换极其方便。上世纪90年代昙花一现的网页游戏,最近在坊间再度复苏,有所不同的是,与任何怀旧复古风无关,曾因浏览器技术硬伤而遭雪藏的网页游戏,这一次,是以完全不同的面貌充任网游经营者的救世之师……。当然,技术硬伤被抚平之后,网页游戏最大的优势-方便性更加被发挥得肆无忌惮!不需要下载数据包、不需安装客户端、不需要安装光盘,玩家只需打开网页就可以玩的游戏,从第一步-游戏参与方式上就实现了革命性改变的网页游戏,几乎可以向中国1.72亿网民张开怀抱。 由于方便性所带来的游戏黏性力量是吓人的:据统计,中国2006年网络游戏人群达到率为70%,其中,QQ游戏到达率37%,联众20%,盛大20%。QQ游戏达到率遥遥领先的原因正是由于QQ的存在简化了游戏的达到途径。以此类推,将达到途径简化到极致的网页游戏(只要能上网就能玩游戏)在方便性上比QQ游戏有过之而无不及。web 正在统治互联网,网游行业也不能例外,网页游戏很可能成为传统网游的掘墓人。传统网游已经发展到了一个临界点,目前他们正在享受自己最后的晚餐。

1.2 WEB游戏的优势与特性 首先,从游戏市场和用户视角来看,网页游戏绝非主流游戏,而且也不可能成为主流。但是它满足了一部分人的需求,适应了一个细分市场。网页游戏最基本的特征,显然不是绚丽的画面、高超的3D技术,而是它刺中了上班族那根潜藏已久、没时间又怕辛苦的游戏娱乐神经。网页游戏提供的轻量级娱乐,占时间少,操作简单,给忙碌紧张的上班族一丝难得的轻松快意。这是它存在的理由。即便是很多玩魔兽网游的玩家,也并不排斥玩网页游戏。不少上班族晚上回家大战魔兽,但白天上班时会偶尔打开浏览器,在校内网里管理他的农场。一个是主流,一个是支流,一个是重量级大作,一个是轻量级娱乐,各有各的风格,各有各的玩法,道并行而不悖。大餐并不妨碍精制小菜的存在。如果说存在的就是合理的,那么网页游戏这种新形式的游戏,存在不仅合理,其发展也是合理的:因为有市场需求。其次,比传统网络游戏更具获益空间。比传统网络游戏更具获益空间。网页游戏尽管具备只要会上网就能玩的特点,但网页游戏并不能取《传奇》《魔兽》而代之,也正是由于参与的便捷性,决定了它最有可能获的是那些终日困在高档写字楼只尺方寸之间的白领们。再次,从游戏制作者的视角来看,网页游戏最大的贡献是它提供了一个低门槛的、通向财富和名声之路。网页游戏的出现,大大降低了网游制作的门槛,使没有充裕资金的小公司或小团队,可以选择在网页游戏方面试试他们的运气,这时取胜的法宝是创新、创意和对玩家需求的深度挖掘。网页

中国象棋的规则

中国象棋的规则 走棋和吃子 1、对局时,由执红棋的一方先走,双方轮流各走一着,直至分出胜、负、和,对局即终了。轮到走棋的一方,将某个棋子从一个交叉点走到另一个交叉点,或者吃掉对方的棋子而占领其交叉点,都算走一着。双方各走一着,称为一个回合。 2、各种棋子的走法 ?帅(将):帅和将是棋中的首脑,是双方竭力争夺的目标。它只能在"九宫"之内活动,可上可下,可左可右,每次走动只能按竖线或横线走动一格。帅与将不能在同一直线上直接对面,否则走方判负。 ?仕(士):仕(士)是帅(将)的贴身保镖,它也只能在九宫内走动。它的行棋路径只能是九宫内的斜线。 ?相(象):相(象)的主要作用是防守,保护自己的帅(将)。它的走法是每次循对角线走两格,俗称"象走田"。相(象)的活动范围限于"河界"以内的本方阵地,不能过河,且如果它走的"田"字中央有一个棋子,就不能走,俗称"塞象眼"。 ?车:车在象棋中威力最大,无论横线、竖线均可行走,只要无子阻拦,步数不受限制。因此,一车可以控制十七个点,故有"一车十子寒"之称。 ?炮:炮在不吃子的时候,走动与车完全相同。 ?马:马走动的方法是一直一斜,即先横着或直着走一格,然后再斜着走一个对角线,俗称"马走日"。马一次可走的选择点可以达到四周的八个点,故有"八面威风"之说。如果在要去的方向有别的棋子挡住,马就无法走过去,俗称"蹩马腿"。 ?兵(卒):兵(卒)在未过河前,只能向前一步步走,过河以后,除不能后退外,允许左右移动,但也只能一次一步。 3、吃子:任何棋子走动时,如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘,再换上自己的棋子(即"吃子")。只有炮的吃子方式与其他子不同:炮与被吃子之间必须隔一个棋子,进行跳吃,俗称"架炮"或"炮打隔子"。 《棋盘和棋子》 象棋是一种双方对阵的竞技项目。棋子共有三十二个,分为红黑两组,各有十六个,由对弈的双方各执一组。兵种是一样的,分为七种: 红方:红方有帅一个,仕、相、车、马、炮各两个,兵五个。 黑方: 黑方有将一个,士、象、车、马、炮各两个,卒五个。 其中帅与将;仕与士;相与象;兵与卒的作用完全相同,仅仅是为了区别红棋和黑棋而已。 棋子活动的场所,叫作"棋盘"。在长方形的平面上,绘有九条平行的竖线和十条平

java中国象棋对弈系统本科毕设论文

毕业设计(论文)中国象棋对弈系统 系别:计算机科学与技术系

专业(班级):计算机科学与技术09级本2班 作者(学号):XXX(学号) 指导教师:XXX(括号内填写职称或学位) 完成日期:2013年06月06日 XXXXX教务处制 目录 中国象棋对弈系统.................................................................................................................................... - 1 -Chinese chese playing system............................................................................................................ - 2 -第一章引言(概述)........................................................................................................................ - 3 -第二章系统可行性分析.......................................................................................................................... - 4 -2.1 总体分析............................................................................................................................................. - 4 -2.2 开发环境介绍..................................................................................................................................... - 4 - 2.2.1硬件开发环境 (4) 2.2.2软件开发环境 (4) 第三章系统需求设计.............................................................................................................................. - 5 -第四章详细设计.................................................................................................................................... - 6 -4.1 功能设计............................................................................................................................................. - 6 - 4.1.1功能说明 (6) 4.1.2对弈规则 (6) 4.1.3相关类图 (6) 4.1.4相关类的类图 (7) 4.2功能的实现.......................................................................................................................................... - 7 - 4.2.1图形界面的实现 (7) 4.2.2棋谱的实现 (10) 4.2.3棋子的添加 (10) 4.2.4背景音乐 (12)

中国象棋详细设计分析

《计算机综合实习》 题目:中国象棋(java单机版) 班级:信息与计算科学1001班姓名:曾广招 学号:100701120 指导教师:王静文 日期:2014.1.7

目录 第一章引言(概述)........................................................................................................................ - 1 -第二章可行性分析.................................................................................................................................. - 2 -2.1 总体分析............................................................................................................................................. - 2 -2.2 开发环境介绍..................................................................................................................................... - 2 - 2.2.1软件开发环境 (2) 第三章需求设计...................................................................................................................................... - 2 -第四章详细设计.................................................................................................................................... - 3 -4.1 功能设计............................................................................................................................................. - 3 - 4.1.1功能说明 (3) 4.1.2对弈规则 (3) 4.1.3相关类图 ..............................................................................错误!未定义书签。 4.2功能的实现.......................................................................................................................................... - 4 - 4.2.1界面的实现 (4) 4.2.2棋谱的实现 (8) 4.2.3开始 (8) 4.3棋子移动和吃棋规则.................................................................................................................... - 8 - 4.3.1本节说明 (8) 4.3.2详细规则介绍 (8) 4.3.2.1卒的移动及吃棋规则 (8) 4.3.2.2炮和车的移动及吃棋规则 (8) 4.3.2.3马的移动和吃棋规则 (9) 4.3.2.4相(象)的移动和吃棋规则 (9) 4.3.2.5士(仕)的移动和吃棋规则............................................错误!未定义书签。 4.3.2.6将(帅)的移动和吃棋规则 (9) 4.4 测试说明............................................................................................................................................. - 9 -4.5 测试结果........................................................................................................................................... - 10 - 运行结果 (10) 小结............................................................................................................................. 错误!未定义书签。

Java中国象棋对弈系统毕业设计(论文)

毕业设计(论文)中国象棋对弈系统

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

目录 中国象棋对弈系统 (1) Chinese chese playing system (2) 第一章引言(概述) (3) 第二章系统可行性分析 (4) 2.1 总体分析 (4) 2.2 开发环境介绍 (4) 2.2.1硬件开发环境 (4) 2.2.2软件开发环境 (5) 第三章系统需求设计 (5) 第四章详细设计 (6) 4.1 功能设计 (6) 4.1.1功能说明 (6) 4.1.2对弈规则 (6) 4.1.3相关类图 (7) 4.1.4相关类的类图 (7) 4.2功能的实现 (8) 4.2.1图形界面的实现 (8) 4.2.2棋谱的实现 (11) 4.2.3棋子的添加 (11) 4.2.4背景音乐 (13) 4.2.5版本信息 (13) 4.2.6新游戏 (13) 4.2.7保存与打开 (14) 4.2.8悔棋 (16) 4.3棋子移动和吃棋规则 (17) 4.3.1本节说明 (17) 4.3.2详细规则介绍 (17) 4.3.2.1卒的移动及吃棋规则 (17) 4.3.2.2炮和车的移动及吃棋规则 (18) 4.3.2.3马的移动和吃棋规则 (18) 4.3.2.4相(象)的移动和吃棋规则 (18)

网络象棋游戏的开发及测试

心之所向,所向披靡 武汉理工大学华夏学院 课程设计报告书 课程名称:软件测试综合设计 题目:网络象棋游戏的开发及测试 系名:信息工程系 专业班级:软件1091 姓名: 学号: 指导教师:司晓梅、钱小红 2013 年 1 月 4 日 课程设计任务书 学生姓名:专业班级:软件1091 指导教师:司晓梅工作单位:信息工程系 设计题目:网络象棋游戏的开发及测试 初始条件: jdk1.5+eclipse(netbeans) 要求完成的主要任务: 用Java语言实现一个网络象棋游戏软件,并对实现后的软件进行测试。要求按照IEEE 标准模板给出具体的测试计划书、软件的黑盒测试用例规格说明,并按照测试用例进行测试,提交缺陷报告。 提示:IEEE标准测试文档模板可以参阅人民邮电出版社佟伟光主编的教材《软件测试》设计报告撰写格式要求: 1设计题目与要求

2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册)、运行结果、关键界面截图 6 测试计划说明书、测试用例规格说明、缺陷报告 7 自我评价与总结 8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加 注释; 时间安排 12月24日~12月29日完成网络象棋游戏的开发、系统的打包和验收; 1月2 日~1月4日完成测试计划、测试用例的设计、测试缺陷报告的写作,并将以上工作整理成为课程设计报告,于1月4日下午提交课程设计报告。 指导教师签字:2012年12月15日 系主任签字:2012年12月16日 1 设计题目与要求 1.1设计题目 网络象棋游戏的开发及测试 1.2设计要求 用Java语言实现一个网络象棋游戏软件,并对实现后的软件进行测试。使用的开发环境是:JDK1.5及MyEclipse。黑方先走或红方先走都可。要求给每个棋子定义标准的走法规则。红黑方对弈。写出各个棋子走法的测试用例。 2 设计思想 首先在画布上确定位置画出棋盘。象棋是双方在有着9条竖线和10条横线的棋盘上对弈,对弈的竖线与横线的交叉点称做棋点,每个棋子都是在棋点上行走而不是在方格中行走河界将棋盘分成两个等份。每一边都有一块由9个点组成的九宫棋子。将、帅、士只能在九宫内移动,并且将帅每一步只可以水平或垂直移动一个棋点。士(仕),它只能在九宫内移动,并且它每一步只可以沿对角线方向移动一个棋点;象(相),它必须一步沿对角线方向走两个棋点,但它既不能过河,也不能跳过或穿越障碍,即象在走的过程中不能被别眼;马(馬),每一步只可以水平或垂直移动一个棋点,但必须按对角线方向,向左或右移动,象棋的马不能跳过障碍,即在走的过程中不能被别腿;车(車),可以水平或垂直方向移动任

基于JAVA中国象棋网络对弈软件毕业设计

摘要 中国象棋网络版是一款可以实现多人同时在线的网络对弈象棋软件。 中国象棋网络版采用C/S架构,由跨平台的Java语言和MySQ L数据库开发,在开发过程中使用了多线程、java swing、Socket编程以及TCP和UDP协议等技术。中国象棋网络版提供了:棋友状态列表,弈棋邀请,观看他人弈棋,棋谱记录和保存,在线交流,快速注册等功能。服务端提供了:发布系统消息提示,服务器状态显示,在线棋友管理等功能。最后,对系统进行测试表明,系统功能达到了预期的要求,实现与同类的象棋软件如QQ象棋类似的功能,具有界面友好,操作简便,运行稳定的特点,完成设计要求的功能。本系统不足之处在于没有实现人机对弈、聊天记录的本机存储,将在以后的更新版本中逐步完善。 关键词:对弈,Java,多线程

Abstract Chinese chess online is a software can support multiplayer play chess online at the same time . The chinese chess online, based on the architecture of C/S, is developed by MySQL database and Java, a cross-platform language. In the development, multi-thread, Java swing, Socket programming and TCP/UDP protocol are applied. First, the newer can fast register and then get an account in the network version. The players can invite others to join, watch others playing, communicate with others online and hold chess-playing records. Of course ,there exists a status bar to check the states of all chess players. Here the service releases the notes of the system information, displays the state of itself, and deal with chess players online, etc. The test of the system indicates, all the expected functions have been realized. It has the similar functions just like the QQ chess, an online software of kind. The interface is on good terms, and the operation is easy, and also it runs stably. However, disappointingly, the computer can't be an opponent of the players, and the users' computer can't keep the chat records itself. These are both the weak points and the improvements will be made in the new version. Keywords: chess-playing , Java, Multithreading

相关文档
最新文档