象棋游戏的开发及测试.docx

上传人:b****8 文档编号:9699470 上传时间:2023-02-05 格式:DOCX 页数:18 大小:616.17KB
下载 相关 举报
象棋游戏的开发及测试.docx_第1页
第1页 / 共18页
象棋游戏的开发及测试.docx_第2页
第2页 / 共18页
象棋游戏的开发及测试.docx_第3页
第3页 / 共18页
象棋游戏的开发及测试.docx_第4页
第4页 / 共18页
象棋游戏的开发及测试.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

象棋游戏的开发及测试.docx

《象棋游戏的开发及测试.docx》由会员分享,可在线阅读,更多相关《象棋游戏的开发及测试.docx(18页珍藏版)》请在冰豆网上搜索。

象棋游戏的开发及测试.docx

象棋游戏的开发及测试

华夏学院

课程设计报告书

课程名称:

软件测试综合设计

 

题目:

象棋游戏的开发及测试

系名:

信息工程系

专业班级:

姓名:

学号:

******

********

 

2013年1月4日

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

信息工程系

设计题目:

象棋游戏的开发及测试

初始条件:

jdk1.5+MyEclipse

要求完成的主要任务:

用Java语言实现一个网络象棋游戏软件,并对实现后的软件进行测试。

要求按照IEEE标准模板给出具体的测试计划书、软件的黑盒测试用例规格说明,并按照测试用例进行测试,提交缺陷报告。

提示:

IEEE标准测试文档模板可以参阅人民邮电出版社佟伟光主编的教材《软件测试》

设计报告撰写格式要求:

1设计题目与要求

2设计思想

3系统结构

4数据结构的说明和模块的算法流程图

5使用说明书(即用户手册)、运行结果、关键界面截图

6测试计划说明书、测试用例规格说明、缺陷报告

7自我评价与总结

8附录:

程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;

时间安排

12月24日~12月29日完成网络象棋游戏的开发、系统的打包和验收;

1月2日~1月4日完成测试计划、测试用例的设计、测试缺陷报告的写作,并将以上工作整理成为课程设计报告,于1月4日下午提交课程设计报告。

指导教师签字:

2012年1月4日

系主任签字:

2012年1月4日

课程设计报告书

1.设计题目与要求

1.1.设计题目

象棋游戏的开发及测试

1.2.设计要求

实现一个基于网络的象棋游戏,可以让两方在网上进行象棋游戏对战。

红方先走,然后黑方走,交替进行。

给每个棋子定义标准的走法规则。

对每个棋子的走法规则进行测试,写出各个棋子走法的测试用例。

3.设计思想

中国象棋是双方在有着9条竖线和10条横线的棋盘上对弈,竖线和横线的交叉称为棋点或对弈点,每个棋子都是在棋点上行走。

所以要先在画布的具体位置上画出棋盘。

10条横线和9条竖线形成90个正方形的小方格,4条对角线构成帅和将的九方格。

一个和棋盘背景颜色相同的填充矩形形成红黑方的分界。

楚河汉界将棋盘分成两等份,每一边都有一块有9个点组成的九宫,棋子“将”、“帅”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,“马”没一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动。

中国象棋的“马”不能跳过障碍,即马不能别腿。

“车”可以水平或垂直方向移动人一个无障碍的点。

“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。

“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动

移动棋子,实际上就是监听了鼠标点击相应事件,先选棋子,通过点击了某一个有效的棋子区域,就将该点转化为棋子所在的行和列,再点击其他的有效区域,将先前的棋子的值复值给新的区域的值,并将原来的区域的值改为0,最后再调用repaint(),就实现了棋子的移动效果。

4.系统结构

4.1系统流程图

 

否否

 

是是

 

图1系统运行流程图

4.2模块功能定义

名称

功能

棋盘

展示棋盘排列

棋子

棋子共有三十二个

红棋子

16个

黑棋子

16个

黑方boss

红方boss

士每一着只许沿"九宫"斜线走一步,可进可退

相(象)不能越过"河界",每一着斜走两步,可进可退,即俗称"相(象)走田字。

当田字中心有别的棋子时,俗称塞相(象)眼,则不行走过去

相(象)不能越过"河界",每一着斜走两步,可进可退,即俗称"相(象)走田字。

当田字中心有别的棋子时,俗称塞相(象)眼,则不行走过去

马每着走一直(或一横)一斜,可进可退,即俗称"马走日字"。

如果在要去方向紧靠一直(或一横)的地方,有别的棋子挡住,俗称"蹩马腿",就不能走过去

车每一着可以直进、直退、横走,不限步数

炮在不吃子的时候,走法同车一样

兵(卒)在没有过"河界"前,每着只许向前直走一步;过"河界"后,每着可以向前走一步,也可以横走一步,但不能后退

兵(卒)在没有过"河界"前,每着只许向前直走一步;过"河界"后,每着可以向前走一步,也可以横走一步,但不能后退

将军

一方的棋子攻击对方的帅(将),并在下一着要把它吃掉,称为"将军"

吃子

 走一着棋时,如果己方棋子能够走到的位置有对方棋子存在,就可把对棋子吃掉而占领那个位置。

只有炮吃了必须隔一个棋子(无论是哪一方的)跳吃,即俗称"炮打隔子"。

除帅(将)外,其它棋子都可以听任对方吃,或主动送吃。

和棋

属于理论上公认的双方均无取胜可能的局势

胜利

帅(将)被对方"将死"

失败

帅(将)被"将军",无法避免地同对方将(帅)直接对面

5.详细设计

5.1画棋盘

该棋盘是由10条横线和9条竖线形成90个正方形(边长为50)的小方格,并在帅和将所在的特殊位置画出相应的对角线来,中间是由一个和棋盘背景颜色相同的填充矩形形成红黑方的分界,炮和兵(卒)初始化所对应的位置的棋盘背景是由相应的直线所画出来的。

并在棋盘相应的位置写上楚河、汉界字样。

5.2在棋盘中画棋子

图2棋盘及棋子初始化界面图

用一个二维数组来定义相应的棋子,用二维数组的下标来表示该棋子所在的行和列,用二维数组的值来表示相应的棋子,即0表示没有棋子,1-7表示黑方的(车马相士将炮卒),8-14表示红方的(车马相士帅炮兵)。

5.3选择棋子

用一个变量temp当做一个开关来切换红黑两方走棋的顺序。

初始值为0表示红方先走,红方走完后立即将该temp值改为1,当再次点击棋子时,只能使用黑方了,黑方同理。

当选中一方的棋子时,将选中的当前行赋值给selectRow,将选中的当前列赋值给selectCol,然后调用repaint()方法,并在paint()方法中进行判断,如果selectRow和selectCol的值发生了变化,就在变化的位置处画上相应的正方形。

5.4走棋

先选中棋子,通过点击了某一个有效的棋子区域,就将该点转化为棋子所在的行和列,再点击其他的有效区域,将先前的棋子的值赋值给新的区域的值,并将原来的区域的值改为0,最后再调用repaint(),就实现了棋子的移动效果了。

实现了棋子的移动效果后就要去实现各类棋子的走法规则,即让每个棋子按照规定的法则来移动。

6.棋子走法规则及测试

6.1兵(卒)的走法规则测试

走法规则:

兵(卒)在没有过"河界"前,每着只许向前直走一步;过"河界"后,每着可以向前走一步,也可以横走一步,但不能后退。

图3没有过河可移动位置图4过河后可移动的位置

6.2炮的走法规则测试

走法规则:

当炮在横纵轴方向上没有遇到障碍物时可以随意移动,一旦有障碍物出现的话,障碍物的前方必须存在有对方棋子时,才能吃掉对方的棋子

图5没有障碍物可移动位置图6有障碍物可移动的位置

6.3车的走法规则测试

走法规则:

车只能在横纵轴方向上随意移动,且不能越过障碍物,如果有障碍物的话,也只能吃掉对方的棋子。

图7车的可移动位置

6.4马的走法规则测试

走法规则:

马跳日。

当马在横向(或纵向)的方向上跳动时,如果在横向(纵向)的方向上没有障碍物的话,马才能跳过去,否则就跳不过去。

图8没有障碍物可移动位置图9有障碍物时不能移动到图中位置

6.5象(相)的走法规则

走法规则:

象(相)飞田。

当象(相)往前方(或后方)跳动时,如果在田子的中心位置没有障碍物出现,象(相)才能走动,否则它将不能移动。

并且象(相)是不能过河的。

6.6仕(士)的走法规则测试

走法规则:

仕(士)只能在九方格的对角线上行走,且每次只能移动一格。

图12可移动位置

6.7帅(将)的走法规则测试

走法规则:

帅(将)只能在九方格中的横纵轴上行走,且每次只能移动一步。

图13可移动位置

7.自我评价与总结

本次课程设计主要是运用之前所学到的Java基础知识来设计一个能进行对战的中国象棋对弈系统,并且重在用本学期所学的软件测试知识来进行测试。

这期间我遇到了很多的困难,发现了很多的问题,正是在解决问题的期间我才慢慢地熟悉了Java的基础知识,体会为了软件开发工程中测试的重要性和必要性。

通过本次课程设计,我明白了一个道理:

无论做什么事情,都必需养成严谨,认真的习惯,只有这样我们才能在工作生活的践行中少犯错误。

同时,在做完了一部分任务之后还要进行从头到尾的测试,因为我们不是神,就算是神也不能确保自己永远万无一失,不管我们技术多么强,经验多么老练丰富,我们都要进过检验测试。

就如马克思主义哲学里所说的,实践是检验真理的唯一标准,只有通过实践测试,才能发现潜存的问题,才能完善系统,才能创新。

对于这次设计和测试,积累了使用软件工程的思想来开发软件的经验,使我受益匪浅。

只有以后通过不断的努力、不断的研究和学习、不断的实践、细致耐心的测试,才能掌握更多的软件设计的技术和方法,发现潜存的细微的错误,才能设计出更好更完善的软件作品,提升自己的能力,才能做的更好。

设计过程中质疑(或答辩)记载:

1、既然是两人对弈,如何实对弈这个功能?

答:

在对弈过程中需要在对弈双方之间传输各类信息,抽象为各类消息。

如时间规则的协定、各方的走子信息等。

每方都有消息接收、消息处理和消息发送程序。

一方的MessageSender与对方的OuterMsgReceiver通过接口SrConnection连接。

所有接收的消息放入消息队列QzMsgQueue中,等待消息处理进程QzMessageHandler来处理。

所有的消息都封装在QzMessage类对象中,消息的类型通过消息的Header类型(以静态常量存放在MsgHeader类中)来区分。

2、棋子是如何实现移动的效果的?

答:

先选棋子,通过点击了某一个有效的棋子区域,就将该点转化为棋子所在的行和列,再点击其他的有效区域,将先前的棋子的值复值给新的区域的值,并将原来的区域的值改为0,最后再调用repaint(),就实现了棋子的移动效果了。

3、你是如何进行测试的?

答:

在开发过程中,我主要是一边编写代码,一边看其能否运行来进行白盒测试;当程序整体开发完成后在来通过走棋的方法进行黑盒测试,为了测试过程的严谨和避免自己的定式思维误区,我还叫同学一起进行二人对弈,测试各个棋子的各种走法,检验其是否符合理论上的法则,直到测试再三,才能下定论。

指导教师评语:

 

签名:

年月日

8.附录(部分程序代码)

8.1画棋盘代码如下所示:

//划横线

for(inty=50;y<=500;y+=50){

g.drawLine(50,y,450,y);

}

//划竖线

for(intx=50;x<=450;x+=50){

g.drawLine(x,50,x,500);

}

//画斜线

g.drawLine(200,50,300,150);

g.drawLine(300,50,200,150);

g.drawLine(200,400,300,500);

g.drawLine(300,400,200,500);

//画炮和兵所在位置的棋盘背景

drawZhiJiao(g,100,150);

drawZhiJiao(g,400,150);

drawZhiJiao(g,150,200);

drawZhiJiao(g,250,200);

drawZhiJiao(g,350,200);

drawZhiJiao(g,150,350);

drawZhiJiao(g,250,350);

drawZhiJiao(g,350,350);

drawZhiJiao(g,100,400);

drawZhiJiao(g,400,400);

drawZhiJiao(g,50,200);

drawZhiJiao(g,450,200);

drawZhiJiao(g,50,350);

drawZhiJiao(g,450,350);

/**画炮和兵的背景*/

privatevoiddrawZhiJiao(Graphicsg,intx,inty){if(x!

=50&&x!

=450){

drawLeftZhiJiao(g,x,y);

drawRightZhiJiao(g,x,y);

}elseif(x==50){

drawLeftZhiJiao(g,x,y);

}elseif(x==450){

drawRightZhiJiao(g,x,y);

}

}

8.2定义棋子代码:

privateintselectedRow=-1,selectedCol=-1;//表示所选中的行和列和列

//画棋子

for(introw=0;row<10;row++){

for(intcol=0;col<9;col++){

initChess(g,row,col,chessman[row][col]);

}

}

/*初始化棋子*/

privatevoidinitChess(Graphicsg,introw,intcol,intvalue){

intx=(col+1)*50;

inty=(row+1)*50;

//画棋子

if(value>=1&&value<=14){

//定义画笔颜色

if(value<8){

g.setColor(Color.BLACK);

}else{

g.setColor(Color.RED);

}

g.drawOval(x-20,y-20,40,40);

MyChesschess=newMyChess(value);

StringchessName=chess.getMyChessName(value);

g.setFont(newFont("楷体",Font.BOLD,30));

g.drawString(chessName,x-15,y+12);

if(selectedCol!

=-1&&selectedRow!

=-1){

g.setColor(Color.BLUE);

g.drawRect((selectedCol+1)*50-20,(selectedRow+1)*50-20,40,40);

}

}

}

8.3选择棋子

publicclassMyCanvesextendsCanvasimplementsMouseListener{

……

//有效范围,并且有棋子

if(row!

=-1&&col!

=-1){

if(temp==0){//红方

if(chessman[row][col]>7){

if(selectFlag==false){//第一次选中棋子

selectFlag=true;

selectedCol=col;

selectedRow=row;

}elseif(row==selectedRow&&col==selectedCol){//第二次选中该棋子

selectFlag=false;

selectedCol=-1;

selectedRow=-1;

}else{//选中己方的其他棋子

selectedCol=col;

selectedRow=row;

}

}else{//走棋}

repaint();

}

8.4走棋代码:

if(selectedRow!

=-1)

{

intvalue=chessman[selectedRow][selectedCol];

switch(value){

case8:

if(row==selectedRow){//车横着走时

if((col-selectedCol)>1){//向右走

for(inti=selectedCol+1;i

if(chessman[row][i]!

=0){

Obstacle++;

}

}

}

if((selectedCol-col)>1){//向左走

for(inti=selectedCol-1;i>col;i--){

if(chessman[row][i]!

=0){

Obstacle++;

}

}

}

if(Obstacle==0){

if(chessman[row][col]==5){

chessman[row][col]=value;

chessman[selectedRow][selectedCol]=0;

repaint();

JOptionPane.showMessageDialog(this,"红方已经胜利!

");

System.exit(0);

}else{

chessman[row][col]=value;

chessman[selectedRow][selectedCol]=0;

temp=1;

}

}

Obstacle=0;

}

if(col==selectedCol){//车竖着走时

if((row-selectedRow)>1){//向下走

for(inti=selectedRow+1;i

if(chessman[i][col]!

=0){

Obstacle++;

}

}

}

if((selectedRow-row)>1){//向上走

for(inti=selectedRow-1;i>row;i--){

if(chessman[i][col]!

=0){

Obstacle++;

}

}

}

if(Obstacle==0){

if(chessman[row][col]==5){

chessman[row][col]=value;

chessman[selectedRow][selectedCol]=0;

repaint();

JOptionPane.showMessageDialog(this,"红方已经胜利!

");

System.exit(0);

}else{

chessman[row][col]=value;

chessman[selectedRow][selectedCol]=0;

temp=1;

}

}

Obstacle=0;

}

break;

case9:

break;

case10:

break;

case11:

break;

case12:

break;

case13:

break;

case14:

break;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1