C语言课程设计-中国象棋_第1页
C语言课程设计-中国象棋_第2页
C语言课程设计-中国象棋_第3页
C语言课程设计-中国象棋_第4页
C语言课程设计-中国象棋_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言课程设计-中国象棋南 昌航空大学借息工程学院课程设计说明书课程名称:C语言课程设计设计悬E目:中国象棋专业:计算机科学与技术班级:姓名:学号:一评分:指导教师:2012年6月26日I摘要 前言In功能描述IV配置要求V总体设计(个人负责模块)一、功能模块设计二、数据结构设计三、函数功能描述 四、代码实现 五、运行结果Vl小结I摘要中国象棋是一款很古老、很受欢迎的游戏,其开发过程有一定的技巧和方法,其中涉及到函数调用、二维数组、键盘操作等方面 的知识。本游戏的开发者需要基本掌握复杂情况下函数的编写以及调用能力、二维数组 的运用能力、复杂算法的设计能力等。II前言中国象棋是一款经典的智力游戏

2、,具有悠 久的历史,早在战国时期就有了关于中国象棋的记载,经过几千年的流传,目前仍然是中国 家喻户晓的棋类游戏,颇受欢迎。因此,我们 决定借这次机会通过用C语言将中国象棋实 现出来,当然,我们也借鉴了前人的一些技巧 经验。有不足之处,希望老师能够谅解,我们 以后将会再接再厉。m功能描述本人负责棋子帅(将)、象(相)、士(仕)、 卒(兵)子函数的编写,它们的所能实现的功能分别是:(1)帅(将):控制棋子帅(将)能符合现实情况下的游戏规则而行走,例如帅(将)只能在规定范围内向上或向左、右、下行走一格,最后返回一个行走正确或行走错误的数据。(2)象(相):控制棋子象(相)能符合现 实情况下的游戏规则

3、而行走,例如象(相)只能在自己领域内走“田”字格,且中间不能有 错误的数据。I=J其他棋子阻挡,最后返回一个行走正确或行走(3)士(仕):控制棋子士(仕)能符合现 实情况下的游戏规则而行走,例如士(仕)只 能在规定范围内斜着跨一格,然后返回一个行 走正确或行走错误的数据。(4)卒(兵):控制棋子卒(兵)能符合现 实情况下的游戏规则而行走,例如卒(兵)只 能一次走一格,同时在自己领域内只能向前 走,而在对方领域内可向前、左、右方向走一 格,最后返回一个行走正确或行走错误的数据。IV配置要求(1)硬件配置CPU: Pentium III 600内存:64MB硬盘剩余空间:M128MB(2)软件环境

4、ViSUaI C+6. 0及其以上版本V总体设计(个人负责模块)本人为小组成员,负责的模块是:棋子 帅(将)、象(相)、士(仕)、卒(兵)子函 数的设计与编写。一、系统模块设计1、系统模块图本人所负责的模块共有四个小项目组 成,分别是控制棋子正确行走的帅(将)、象 (相)、士(仕)、卒(兵)子函数。(1)帅(将)该子函数主要负责控制维持棋子帅(将)的 正确行走,返回正确或错误的数据信息。(2)象(相)该子函数主要负责控制维持棋子象(相)的正 确行走,返回正确或错误的数据信息。(3)士(仕)该子函数主要负责控制维持棋子士(仕)的正 确行走,返回正确或错误的数据信息。(4)卒(兵)该子函数主要负责

5、控制维持棋子卒(兵)的正 确行走,返回正确或错误的数据信息。主函数图1.系统模块图2、任务执行流程图在玩家进行游戏移动棋子帅(将)、象(相)、士(仕)、卒(兵)的时候,主函数调用这几个子函数的执行流程图均为:图2.任务执行流程图二、数据结构设计四个子函数均定义了局部变量 xl,x2,yl,y2,table10,通过主函数调用将玩家 从键盘输入的值传递给xx2,yl,y2. table10 是在主函数中定义的一个二维数组,在子函数中 同样控制棋盘的输出。三、函数功能描述l.chekshuai ()函数原型:int CheCkShUai (int xl, int yl, int x2, int y

6、2, int table 10)CheCkShUai ()函数控制棋子帅(将) 的正确行走,通过主函数将初始位置的坐 标xl, yl与目标位置的坐标x2, y2传递给 该子函数,从而判别帅(将)的行走是否 符合规则。2checkxiang ()函数原型:int CheCkXiang(int Xljnt yl,int x29int y2,int table10)CheCkXiang()函数控制棋子象(相) 的正确行走,通过主函数将初始位置的坐 标xl, yl与目标位置的坐标x2, y2传递给 该子函数,从而判别象(相)的行走是否 符合规则。3checkshi ()函数原型:int CheCkSh

7、i(int xljnt yljntx2,int y2jnt table10)CheCkShi ()函数控制棋子士(仕)的正确行走,通过主函数将初始位置的坐标xl, yl与目标位置的坐标x2, y2传递给该 子函数,从而判别士(仕)的行走是否符合规则。4.checkbing ()函数原型:int CheCkbmg(int XIJnt yl,intx29int y29int table10)CheCkbing()函数控制棋子士(仕)的正确行走,通过主函数将初始位置的坐标xl, yl与目标位置的坐标x2, y2传递给 该子函数,从而判别士(仕)的行走是否符合规则o四、代码实现1.帅(将)int Ch

8、eCkShUai(int xl,int yl,int x2jnt y2jnt table10)Ily2>6)&&(x2<l Il x2>3 Il y2<4ll y2>6)/控制棋子的行走范围是在自己Printf(n将或者帅是不能移出九宫区 域的,重新输入吧!n”);return 0;/规则错误后出现提示信息并且返回0进行重新输入ifelse(abs(x2-xl)=l)&&(abs(y2-yl)=l)/控制棋子的行走只能是直线PrintfC,n将或者帅是不能走斜线的 哦,重新输入HB!n);return 0;/规则错误后出现提示信息并

9、且返回0进行重新输入else if (tablex2y2*tablexlyl>0)/控制棋子只能覆盖对方棋子以分Priiltf(n自己不能吃掉自己呀,重新输入吧!n");return 0;/规则错误后出现提示信息并且返回0进行重新输入else(abs(x2-xl)>=2)ll(abs(y2-yl)>=2)/控制棋子每次只能跨越一格Prmtf(n将或者帅不能一次走多格呀,重新输入吧!n”);return 0;/规则错误后出现提示信息并且返回O进行重新输入else return 1;/若未遇到错误则返回1继续进行游戏2.象(相)int CheCkXiang(int xl

10、9int yljnt x29int y2jnt table10)if (abs(x2-xl)!=2 Il (abs(y2-yl)!=2)/控制棋子的行走路线为田字格对 角线Prmtf(n相像)只能走田字呀,重新输入 B!n);return 0;/规则错误后出现提示信息并且返回O进行重新输入elseif(tablexlyl>O&&x2>5)ll(tablexlyl<0 &&x2<5)/控制棋子只能在自己领域内移动 Prmtf(n相(象)不能渡过楚河汉界呀,重新输入吧!n);return 0;/规则错误后出现提示信息并且返回0进行重新输入el

11、se if (table(xl+x2)2(yl+y2)2!=0)/当棋子移动路径上有其他棋子阻挡时棋子不能移动if (x2<8 Il x2>10 Il y2<4Prmtf(nn您要移动的路径上有其他 棋挡着呢,不能移动,重新输入吧!n');return 0;/规则错误后出现提示信息并且返回0进行重新输入else if (tablex2y2*tablexlyl>0)/控制棋子只能覆盖对方棋子以分清敌我Priiltf(n自己不能吃掉自己呀,重新输入吧!n");return 0;/规则错误后出现提示信息并且返回0进行重新输入else return 1;/若未

12、遇到错误则返回1继续进行游戏3. 士(仕)int CheCkShi(int xl,int yl,int x2,int y2,int table10)Ily2>6)&&(x2<l Il x2>3 Il y2<4ll y2>6)/控制棋子的行走范围是在自己领域的九宫格内Prmtf(n 士或者仕是不能移出九宫 区域的,重新输入吧!nn);return 0;/规则错误后出现提示信息并且返回0进行重新输入else if (tablex2y2*tablexlyl>0)/控制棋子只能覆盖对方棋子以分'nPriiltf(n自己不能吃掉自己呀,重新输入

13、吧!n");return 0;/规则错误后出现提示信息并且返回0进行重新输入(abs(x2-xl)>=2)ll(abs(y2-yl)>=2)/控制棋子每次只能跨越一格Prmtf(n 士或者仕不能一次走多)呀,重新输入吧!n”);return 0;/规则错误后出现提示信息并且返回0进行重新输入else(I(abs(x2-xl)=l)&&(abs(y2-yl)=l)/控制棋子行走路径只能是沿着一格的对角线Prmtf(n 士或者仕只能斜着走呀,重 新输入吧!nj;return 0;/规则错误后出现提示信息并且返回0进行重新输入else return 1;/若未遇

14、到错误则返回1继续进行游戏4.卒(兵)int CheCkbing(int xljnt yl,int x2jnt y2,int table10)if(tablexlyl>O)/兵W是否是甲方棋子(在上方)if(tablex2y2>0)/控制棋子只能覆盖对方棋子以分Printf(n拜托,不能自己吃自 !n);return 0;/规则错误后出现提示信息并且返回0进行重新输入if(xl<6)/此时兵W没过河if(yl=y2)&&(x2-xl=l)/控制棋子只能向前走return 1;/若符合规则则继续游戏elsePrintf(n兵(卒)过河前只能向前走,重 新输入吧!

15、n”);return O; /规则错误后出现 提示信息并且返回O进行重新输入else/若此时兵()已过河if(yl=y2)&&(x2-xl=l)ll(yl-y2=l)&&(x2=xl)ll(y2-yl=l)&&(x2=xl)/控制棋子过河后只能向前或者向左、右移动return 1;/若符合规则则继续游戏elsePrintf(,n兵(卒)过河后只能向前走或 者平移,不能后退,重新输入吧!n');return 0;/规则错误后出现提示信息并且返回0进行重新输入else/判断兵是否在乙方(在下方)if(tablex2y2<0)/控制棋子只

16、能覆盖对方棋子以分Printf(n拜抵自己不能吃自己!n);return 0;/规则错误后出现提示信息并且返回0进行重新输入if(xl>5)/如果兵佯丿没过河if(yl=y2)&&(Xl-X2=l)H控制棋子只能向前走 return 1;/若符合规则则继续游戏elsePrintf(,n兵(卒)过河前只能向前走, 重新输入吧!nn);return 0;/规则错误后出现提示信息并且返回0进行重新输入else/如果兵(¥)已过河if(yl=y2)&&(xl-x2=l)ll(yl-y2=l)& & (x2=xl)ll(y2-yl=l)&a

17、mp;&(x2=xl)/控制棋子过河后只能向前或者向左、右移动return 1;/若符合规则则继续游elsePrmtf(n兵(卒)过河后只能向前走或 者平移,不能后退,重新输入吧恤”);return O;/规则错误后出现提示信息并且返回O进行重新输入五、运行结果1、游戏进入初始界面进入游戏后显示的初始界面截图如下图:*-'*ic''f' *i*iji LPJ ; 京''*'''-ic*甲方:车马象士将炮卒*乙方:車馬相仕帅砲兵松* *糾*何*経糾細* 衬*1234567891车马象士将士象马车23 hr i td4

18、卒+卒+卒+卒+卒5卜丄丄丄丄彳I *楚河*汉界* I6 IliIIIlI 9 了宾=S=兵丰宾+宾+宾8 h÷+=+m=910亘馬相仕帅仕胡馬車首先请甲方走棋!清输入您要移动的棋子位置(例如输入3 4代表弟三行第四列):图3.游戏初始界面2、游戏进行中的界面如下显示了游戏进行中的界面截图:* 水* 中* 国*象 ;棋 * *;* * *甲方:车马象 士将炮卒*乙方:車馬相仕帅砲兵糾*衬 * 宅*$:* !3e*l*!*!*2*!*!*!5e*:*1234567891车象士将士象车2 I H Illl I I3卜炮马+絶+马=H4举+卒=m*庞本5卜i-丄砲丄水楚河*材汉界* I6

19、IIlIlIlI7兵十兵十兵十兵十兵8 h+!;!;I9 IlIiI i I I I10車丄相仕帅仕相馬車请甲方走棋!请输入您要移动的棋子位置(例如输入3 4代表第三行第四列):7 5该甲方走棋了,请甲方走棋!请输入您要移动的棋子位曽(例如输入3 4代表第三行笫四列):6 5您输入的位置没有您的棋子,请检查后重新输入!请输入您要移动的棋子位宜例如输入3 4代表第三行第四列):图4.游戏进行过程中界面3、游戏结束完成游戏后结束的界面截图:* *cc*: * * 中*国*象 *膜水 * * *ICC* * * *甲方:车马象 士将炮卒*乙方:車馬相仕帅砲兵* A A* ¾ > > # ¼ ¢.AL* *¼A* >½ ¼ 

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论