中国象棋详细设计分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机综合实习》
题目:中国象棋(java单机版)
班级:信息与计算科学1001班*名:***
学号:*********
指导教师:***
日期: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)
小结................................................................................................................................ 错误!未定义书签。
第一章引言(概述)
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
中国象棋发展至今已有二千三、四百年的历史了,早在战国时期就有正式记载,堪称中国的国粹。
想必在未来的几年随着中国象棋在各个领域的推广,必定会带来巨大的影响和经济效益。
中国象棋对弈在中国有着悠久的历史,是二人对抗性游戏中的一种。
由于用具简单,趣味性很强,很快成为流行极为广泛的棋艺活动。
也是我国正式开展的78个体育项目之一,为促进该游戏在世界范围内的推广和普及,在中国历史上,象棋被列为士大夫们的修身之艺,现在被视为怡神益智的一种有益的游戏。
在棋艺对战中,玩家们可以从攻与防、虚与实、整体与局部等复杂关系的变化中悟出某种各种哲理。
象棋博弈是由两个玩家轮流走子,以“将死”或“困毙”对方将或帅为胜的一种棋类运动,有着数以万亿计的爱好者。
它不仅能丰富人们的文化生活,陶冶情操,更有助于开发个人智力,启迪思维,锻炼辨证分析能力和培养顽强的意志等等。
随着计算机的使用的深入普及,计算机应用技术的日益完善,人们已经和计算机有着密切的关联,在计算机上玩游戏已经大众化,给人们带来了无限的欢悦,本系统是一个小程序,只要在装有jdk中的虚拟机的计算机上即可运行,中国象棋对弈系统实现了双人对弈这个功能,可用于多人一起游戏。
而实现中国象棋对弈系统就为象棋在网络应用平台提供多人对弈打下基础。
中国象棋对弈系统主要要实现的是棋子的走法和规则,中国象棋讲究车,马,象,仕,卒,炮,将的活用;只有当将被对方玩家的棋子吃掉,则首先吃掉对方将或帅的一方就是胜利的一方。
玩家对局时,由红棋的一方先走,双方轮流各走一次,直至分出胜负,对局即结束。
轮到走棋的一方,要将某个棋子从一个十字交叉点走到另一个十字交叉点,或者吃掉对方的棋子而占领其十字交叉点,都算走一次。
双方各走一次,称为一个回合。
象棋是中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。
第二章可行性分析
2.1 总体分析
此次对弈系统的开发研究是大学专业知识的一次综合应用于提高,计算机主要安装jdk运行环境和相关应用程序开发工具。
运用java,gui监听器和标准类库等知识,首先编写一个主类ChineseChess,构造一个主窗口,在主窗口上添加一工具栏,有相应的按钮,用此来用来对“开始,悔棋,信息提示,退出,重新开始”进行操作。
1.中国象棋对弈系统是:图形界面,监听器等技术的综合运用。
2.对弈的实现:利用鼠标的监听来实现对象棋走法的操作。
2.2 开发环境介绍
2.2.1 软件开发环境
1.结合本系统的特点,只需要一个软件开发工具和一个虚拟机即可,因此需要的软件有:
2.操作系统在Windows Server 2003以上;
3.开发工具使用Jcreator;
4.在操作系统上安装jdk的开发环境以及jre(虚拟机)的运行环境。
第三章需求分析
中国象棋对弈系统要求实现下棋界面,利用鼠标监听来实现走棋与吃棋,胜负判断
并伴有信息提示,在棋盘界面上端设有工具栏,内容包括“开始,悔棋,信息提示,退
出,重新开始”等相关功能。
详情如下:
1.开始:开始一场新的游戏,并重新棋子初始化。
2.悔棋:返回到上一步棋局,并开始继续下棋。
3.信息提示:提示开始该谁走棋,默认红棋先走。
4.退出:对话框提示,是否退出系统。
5.重新开始:删除上次下棋的所有痕迹,重新初始化界面。
如下图:
(图)
第四章详细设计
4.1 功能设计
4.1.1 功能说明
这个系统主要实现人人对弈,采用鼠标监听的方法来实现对棋子的移动,双方依次轮流走棋,在工具栏有走棋的相关提示,主要提示该轮到哪方走棋。
如果一方想要悔棋,也是在征求对方同意的情况下,点击“悔棋”按钮,可连续悔棋。
为防止误操作关闭下棋界面,在退出时设有信息提示,如果确认退出,则点击“是”按钮,否则点击“否”返回下棋界面。
如果点击“重新开始”按钮,设有信息提示,确认“是”,页面回到初始状态,重新开始,否则页面保持不变。
4.1.2 对弈规则
默认是红方先手,黑方后手,双方轮流下棋。
当将或者帅被吃子,该方输棋。
4.1.3相关类图
………创建棋盘对象
………绘制棋盘
……创建对象
……放入棋子对象
4.2功能的实现
4.2.1 界面的实现
图形界面的是实现主要在类ChessWindow类中实现,通过继承Jframe,实现ActionListener,MouseListener接口来进行初始化操作,以下是相关代码:如(图)4.2.1-1 图形界面
//创建工具栏
Container con = this.getContentPane();//初始化
con.setLayout(null);
//初始化组件//
begin = new JButton("开始");
Rebegin = new JButton("重新开始");
Exit = new JButton("退出");
text = new JTextField("信息提示");
Toolbar = new JToolBar();
//初始化类对象//
chess = new Chess();
chessMan = new ChessMan();
gamePanel = new GamePanel();
controller = new Controller(gamePanel, chess, chessMan);
//把组件添加到工具栏并添加监听//
Toolbar.setLayout(new GridLayout(1,4));//四格
Toolbar.add(begin);
begin.addActionListener(this);
Toolbar.add(Exit);
Exit.addActionListener(this);
Toolbar.add(text);
Toolbar.add(Rebegin);
Rebegin.addActionListener(this);
addMouseListener(this);
//初始化类对象//
chess = new Chess();
chessMan = new ChessMan();
gamePanel = new GamePanel();
controller = new Controller(gamePanel, chess, chessMan);
//把组件添加到工具栏并添加监听//
Toolbar.setLayout(new GridLayout(1,4));//四格
Toolbar.add(begin);
begin.addActionListener(this);
Toolbar.add(Exit);
Exit.addActionListener(this);
Toolbar.add(text);
Toolbar.add(Rebegin);
Rebegin.addActionListener(this);
addMouseListener(this);
text.setEditable(false);
Toolbar.setBounds(0,0,500,30);
//向窗口添加组件,棋盘//
con.add(Toolbar);
gamePanel.setBounds(20,30,600,700);
con.add(gamePanel);
con.addMouseListener(controller);
}
(图)4.2.1 界面
(图)4.2.2
说明:由于图像太大,为了便于排版所以截半图
4.2.2 棋谱的实现
在界面的空白处添加画布,class Chess实现棋盘的画法,class ChessMan实现棋子画法,即可显示棋谱如(图)4.2.2 棋谱。
以下是相关代码:
//向窗口添加组件,棋盘//
con.add(Toolbar);
gamePanel.setBounds(20,30,600,700);
con.add(gamePanel);
con.addMouseListener(controller);
4.2.3 开始
在游戏进行过程中,往往会因某种原因会重新开始游戏,玩家不可能重新开启游戏客户端,为了给玩家更好的游戏体验,设置重新开始游戏是必不可少的功能。
重新开始游戏后,会重新排列棋子返回原位。
以下是红子“车”的排列方法,通过坐标把相应的棋子排列,其它棋子排列与此方法相似,只是坐标不同。
//重新排列每个棋子的位置
gamePanel.dispaly(new Chess(), new ChessMan());
4.3棋子移动和吃棋规则
4.3.1 本节说明
在该游戏中也存在各种规则,对各棋子的移动和吃子都有严格的限制。
本系统的所有棋子移动和吃棋规则都在class Controller中。
4.3.2详细规则介绍
4.3.2.1卒的移动及吃棋规则
移动规则:根据本系统的详细情况来说,黑卒向下移动,红兵向上移动,并且不能回头,但可以左右移动。
通过相关算法得到合法坐标,执行移动、吃棋和过河等操作。
吃棋规则:不管是黑卒还是红兵都可以吃掉正前方和左右方向上的任何棋子,但不能隔子吃棋。
4.3.2.2炮和车的移动及吃棋规则
走棋规则:首先判断起点和终点是否有棋子,炮和车只能上下和左右移动并吃棋,
起初要指定所有模糊的Y(X)坐标,移动的Y(X)坐标是否有指定坐标相近的所有棋子,找出在同一条竖线(横线)的所有棋子,并不包括自己,从起点到终点判断中间是否有棋子,如果中间有棋子就不可以从这条竖线(横线)过去,从起点到终点找起点和终点的棋子,起点和终点没有旗子就可以移动了。
吃棋规则:找出起点和终点是否有棋子,找出所有棋子,找出同一条线上的棋子,不包括自己,自己是七点被吃的终点。
起点和终点没有棋子是车的吃棋方法,不能吃己方棋子,起点和终点有一个棋子是炮的吃棋方法,也不能吃己方棋子。
4.3.2.3马的移动和吃棋规则
走棋规则:新建集合用来保存坐标和障碍,找到合法的X和Y坐标,判断正前方、正后方、正左方、正右方是否有别的棋子,判断移动该棋子。
来实现马飞日的走法。
吃棋规则:也要有集合存放障碍棋子,首先判断正方是否棋子,若有则不能吃正方前方的两个棋子,若没有则可以移动到指定位置及吃棋,不能吃自己的棋子,吃棋后,停止闪烁,不显示被吃棋子。
4.3.2.4相(象)的移动和吃棋规则
走棋规则:新建集合用来保存坐标和障碍棋子,用相关算法实现飞田算法,并且红(黑)棋不能过楚河汉界。
吃棋规则:吃棋时也是按照移动规则,进行判断吃子,判断被吃的棋子是否与士(仕)相近,如果相近则吃掉,且不能吃掉己方棋子。
(代码中有纤细说明,在class Controller中)
4.3.2.5将(帅)的移动和吃棋规则
帅和将是棋中的首脑,是双方竭力争夺的目标。
它只能在‘九宫‘之内活动,可上可下,可左可右,每次走动只能按竖线或横线走动一格。
帅与将不能在同一直线上直接对面,否则走方判负。
4.4 测试说明
在软件开发的过程中,人们使用了很多保证软件品质的方法分析、设计和实现软件系统,但免不了还会在工作中犯很多错误。
为了保证软件的质量和可靠性,应力求在分析、设计等各个开发阶段结束前,对软件的各项功能和操作进行严格的技术评审。
软件测试就是在软件正式运用前,对软件需求分析、设计规格说明和编码的再次审查和修改使之更加完善,是软件质量保证的关键所在,也可以说软件测试是为了发现运行中的错误而运行程序的过程。
其目的是想以最少的时间和人力找出软件中潜在的各种错误和缺陷。
目前,流行的软件测试方法有两种,一种是黑盒测试法,另一种是白盒测试法。
任何工程产品都可以使用这两种方法进行测试。
黑盒测试是已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
软件的白盒测试是对软件的过程性细节作细致的检查,它是已知产品的内部工作过程,可以通过测试证明每种操作是否符合设计规格要求,所有的内部成分是否已经检查。
但是,任何软件的开发项目都要受到期限、费用、人力和机时等条件的限制。
尽管我们以为为了充分揭露程序中的所有隐藏错误、彻底的做法是针对所有可能的数据进行测试,但事实告诉我们,这样做是不行的。
在测试阶段既然穷举测试不可行,为了节省时间和资源,提高测试效率,就必须精心设计测试用例,也就是要从数量极大的可用测试用例中精心地挑选少量的测试数据,使得采用这些测试数据能够达到最佳的测试效果,或者说它们能够高效率地把隐藏的错误揭露出来。
对于本软件的测试,我们选择的是黑盒测试法中的边界值测试。
人们从长期的测试工作经验得知,大量的错误是发生在输入或者输出范围的边界值上,而不是在输入范围的内部。
因此针对各种边界情况设计测试用例,可以查出更多的错误。
使用边界值分析方法设计测试用例,首先应确定边界情况。
通常输入等价类与输出等价类的边界,就是应着重测试的边界情况。
应当选取正好等于,刚刚大于,或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或者任意值作为测试用例。
边界值分析方法选择测试用例的原则:
(1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
(2)如果输入条件规定了值的个数,则用最大个数、最小个数、比最大个数多1、比最小个数少1作为测试数据。
(3)如果程序的规格说明给出的输入域或者输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
(4)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
(5)分析规格说明,找出其他可能的边界条件。
4.5 测试结果
运行结果
本系统可以实现人人对弈详情如图所示:
点击棋盘开始按钮开局,信息提示栏显示“红旗先走”,并且红方先手。
按照提示依次走棋最终分出胜负。
(图)4.5.1-1 红棋先走棋
(图)4.5.1-2 红棋走棋
(图)4.5.1-4 黑方获胜(图)4.5.1-3 退出提示
(图)4.5.1-4 重新开始界面
小结
通过这次实习,感觉自己还有很多都不会,感谢老师这么多天以来的悉心的辅导和悉心栽培和对成长的关系与爱护。
在走出校园之前毕业设计是大学生所学的唯一凭证,它概括了大学生在校的学习状况,总结了大学以来的个人实力。
从2012年11月15日接收到指导老师的任务书,经过差不多五个月的努力拼搏,终于在2013年4月底完成了《中国象棋对弈系统》的毕业论文。
每走一步都是新的尝试与挑战,是在大学期间唯一完成的大项目之一。
在此之间,从对网络资源的认识,再到熟练运用网络资源,最有帮助的软件就是qq 群,在做毕业设计的阶段里加了几个研究JAVA的群,里面的人非常热情,只要有问题,在群里问了,不要几分钟就能解决问题,里面有很多“老人”,很热情的为新手们解说当前的行业前景,对刚出校园的学生帮助很大。