C语言课程设计中国象棋.docx
《C语言课程设计中国象棋.docx》由会员分享,可在线阅读,更多相关《C语言课程设计中国象棋.docx(15页珍藏版)》请在冰豆网上搜索。
![C语言课程设计中国象棋.docx](https://file1.bdocx.com/fileroot1/2022-10/28/ea11a39f-a8dd-434a-ace1-d805670d1703/ea11a39f-a8dd-434a-ace1-d805670d17031.gif)
C语言课程设计中国象棋
C语言课程设计-中国象棋
南昌航空大学借息工程学院
课程设计说明书
课程名称:
C语言课程设计
设计悬
3目:
中国象棋
专业:
计算机科学与技术班级:
姓名:
学号:
一
评分:
指导教师:
I摘要
II前言
m功能描述
IV
配置要求
v总体设计(个人负责模块)
一、功能模块设计
二、数据结构设计
三、函数功能描述四、代码实现五、运行结果
VI小结
中国象棋是一款很古老、很受欢迎的游戏,
其开发过程有一定的技巧和方法,其中
涉及到函数调用、二维数组、键盘操作等方面的知识。
本游戏的开发者需要基本掌握复
杂情况下函数的编写以及调用能力、二维数组的运用能力、复杂算法的设计能力等。
II前言
中国象棋是一款经典的智力游戏,具有悠久的历史,早在战国时期就有了关于中国象棋
的记载,经过几千年的流传,目前仍然是中国家喻户晓的棋类游戏,颇受欢迎。
因此,我们决定借这次机会通过用C语言将中国象棋实现出来,当然,我们也借鉴了前人的一些技巧经验。
有不足之处,希望老师能够谅解,我们以后将会再接再厉。
m功能描述
本人负责棋子帅(将)、象(相)、士(仕)、卒(兵)子函数的编写,它们的所能实现的功
能分别是:
(1)帅(将):
控制棋子帅(将)能符合现
实情况下的游戏规则而行走,例如帅(将)只
能在规定范围内向上或向左、右、下行走一格,
最后返回一个行走正确或行走错误的数据。
(2)象(相):
控制棋子象(相)能符合现实情况下的游戏规则而行走,例如象(相)只
能在自己领域内走“田”字格,且中间不能有
其他棋子阻挡,最后返回一个行走正确或行走
错误的数据。
(3)士(仕):
控制棋子士(仕)能符合现实情况下的游戏规则而行走,例如士(仕)只能在规定范围内斜着跨一格,然后返回一个行走正确或行走错误的数据。
(4)卒(兵):
控制棋子卒(兵)能符合现实情况下的游戏规则而行走,例如卒(兵)只能一次走一格,同时在自己领域内只能向前走,而在对方领域内可向前、左、右方向走一格,最后返回一个行走正确或行走错误的数
据。
IV配置要求
(1)硬件配置
CPU:
MPentiumIII600
内存:
M64MB
硬盘剩余空间:
M128MB
(2)软件环境
VisualC++6.0及其以上版本
V总体设计(个人负责模块)
本人为小组成员,负责的模块是:
棋子帅(将)、象(相)、士(仕)、卒(兵)子函数的设计与编写。
一、系统模块设计
1、系统模块图
本人所负责的模块共有四个小项目组成,分别是控制棋子正确行走的帅(将)、象(相)、士(仕)、卒(兵)子函数。
(1)帅(将)
该子函数主要负责控制维持棋子帅(将)的正确行走,返回正确或错误的数据信息。
(2)象(相)
该子函数主要负责控制维持棋子象(相)的正确行走,返回正确或错误的数据信息。
(3)士(仕)
该子函数主要负责控制维持棋子士(仕)的正确行走,返回正确或错误的数据信息。
(4)卒(兵)
该子函数主要负责控制维持棋子卒(兵)的正确行走,返回正确或错误的数据信息。
主函数
图1.系统模块图
2、任务执行流程图
在玩家进行游戏移动棋子帅(将)、象
(相)、士(仕)、卒(兵)的时候,主函数调
用这几个子函数的执行流程图均为:
图2.任务执行流程图
二、数据结构设计
四个子函数均定义了局部变量xl,x2,yl,y2,table[][10],通过主函数调用将玩家从键盘输入的值传递给xl,x2,yl,y2・table[][10]是在主函数中定义的一个二维数组,在子函数中同样控制棋盘的输出。
三、函数功能描述
l.chekshuai()
函数原型:
intcheckshuai(intxl,int
yl,intx2,inty2,inttable[][10])checkshuai()函数控制棋子帅(将)的正确行走,通过主函数将初始位置的坐标xl,yl与目标位置的坐标x2,y2传递给该子函数,从而判别帅(将)的行走是否符合规则。
2xheckxiang()
函数原型:
intcheckxiang(intxljntyljntx29inty2,inttable[][10])
checkxiang()函数控制棋子象(相)的正确行走,通过主函数将初始位置的坐标xl,yl与目标位置的坐标x2,y2传递给该子函数,从而判别象(相)的行走是否符合规则。
3函数原型:
intcheckshi(intxl,intyljnt
x2,inty2,inttable[][10])
checkshi()函数控制棋子士(仕)的
正确行走,通过主函数将初始位置的坐标
xl,yl与目标位置的坐标x2,y2传递给该子函数,从而判别士(仕)的行走是否符
合规则。
4.checkbing()
函数原型:
intcheckbing(intxljntyl,int
x2,inty2,inttablet][10])
checkbing()函数控制棋子士(仕)
的正确行走,通过主函数将初始位置的坐
标xl,yl与目标位置的坐标x2,y2传递给该子函数,从而判别士(仕)的行走是否
符合规则o
四、代码实现
1.帅(将)
intcheckshuai(intxl,intyl,intx2,inty2,inttable[][10])
Ily2>6)&&(x23IIy2<4lly2>6))
//控制棋子的行走范围是在自己
printf(n\n将或者帅是不能移出九宫区域的,重新输入吧!
\n”);
return0;//规则错误后出现提
示信息并且返回0进行重新输入
}
if
else
((abs(x2-xl)==l)&&(abs(y2-yl)==l))
//控制棋子的行走只能是直线
{
printf("\n将或者帅是不能走斜线的哦,重新输入吧!
\n“);
return0;
//规则错误后出现
提示信息并且返回0进行重新输入
}
elseif(table[x2][y2]*table[xl][yl]>0)
//控制棋子只能覆盖对方棋子以分
printf(H\n自己不能吃掉自己呀,重新
输入吧!
\n“);
return0;//规则错误后出现提
示信息并且返回0进行重新输入
}
else
((abs(x2-xl)>=2)11(abs(y2-y1)>=2))
//控制棋子每次只能跨越一格
printf(H\n将或者帅不能一次走多格
呀,重新输入吧!
Z
);
return0;//规则错误后出现提
示信息并且返回0进行重新输入
}
elsereturn1;//若未遇到错误则返回
1继续进行游戏
}
2.象(相)
intcheckxiang(intxl,intyljntx2,inty2,inttable[][10])
//控制棋子的行走路线为田字格对角线
{
printf(H\n相像)只能走田字呀,重新
输入吧!
\n”);
return0;
//规则错误后出现提
示信息并且返回0进行重新输入
}
elseif((table[xl][yl]>0
&&x2>5)ll(table[xl][yl]<0&&x2<5))
//控制棋子只能在自己领域内移动{
printf(H\n相(象)不能渡过楚河汉界呀,
重新输入吧!
\n");
return0;
//规则错误后出现提
示信息并且返回0进行重新输入
}
elseif(table[(xl+x2)/2][(yl+y2)/2]!
=0)
//当棋子移动路径上有其他棋子阻
挡时棋子不能移动
printf(n\n您要移动的路径上有其他棋挡着呢,不能移动,重新输入吧!
\n'«);
return0;//规则错误后出现提示
信息并且返回0进行重新输入
elseif(table[x2][y2]*table[xl][yl]>0)
//控制棋子只能覆盖对方棋子以
分清敌我
printf(H\n自己不能吃掉自己呀,重新
输入吧!
return0;//规则错误后出现提示
信息并且返回0进行重新输入
}
elsereturn1;//若未遇到错误则返回
1继续进行游戏
}
3.士(仕)
intcheckshi(intxl,intyl,intx2,inty2,inttable[][10])
Ily2>6)&&(x23IIy2<4lly2>6))
//控制棋子的行走范围是在自己领
域的九宫格内
printf(H\n士或者仕是不能移出九宫区域的,重新输入吧!
\n”);
return0;//规则错误后出现提示
信息并且返回0进行重新输入
elseif(table[x2][y2]*table[xl][yl]>0)
//控制棋子只能覆盖对方棋子以分
printf(H\n自己不能吃掉自己呀,重新
输入吧!
\n“);
return0;//规则错误后出现提
示信息并且返回0进行重新输入
}
((abs(x2-xl)>=2)ll(abs(y2-yl)>=2))
//控制棋子每次只能跨越一格
printf(H\n士或者仕不能一次走多)
呀,重新输入吧!
W');
return0;//规则错误后出现提
示信息并且返回0进行重新输入
}
else
(!
((abs(x2-xl)==l)&&(abs(y2-yl)==l)))
//控制棋子行走路径只能是沿着一
格的对角线
printf(H\n士或者仕只能斜着走呀,重新输入吧!
W);
return0;
//规则错误后出现提
示信息并且返回0进行重新输入
}
elsereturn1;
//若未遇到错误则返
回1继续进行游戏
}
4.卒(兵)
intcheckbing(intxl,intyl,intx2,inty2,
inttable[][10])
if(table[xl][yl]>0)
//兵(^)是否是甲方棋子(在上方)
if(table[x2][y2]>0)
//控制棋子只能覆盖对方棋子以分
printf(H\n拜托,不能自己吃自B!
!
!
\nn);
return0;//规则错误后出现提
示信息并且返回0进行重新输入
if(xl<6)
//此时兵侔丿没过河
if((yl==y2)&&(x2-xl==l))
//控制棋子只能向前走
return1;
//若符合规则则继
续游戏
}
else
printf(n\n兵(卒)过河前只能向前走,重新输入吧!
\n”);
return0;//规则错误后出现
提示信息并且返回0进行重新输入
}
}
else
//若此时兵(^)已过河
if(((yl==y2)&&(x2-xl==l))ll((yl-y2==l)
&&(x2==xl))ll((y2-yl==l)&&(x2==xl)))
//控制棋子过河后只能向前或者向
左、右移动
return1;//若符合规则则继
续游戏
}
else
printf(n\n兵(卒)过河后只能向前走或者平移,不能后退,重新输入吧!
\n”);
return0;//规则错误后出现提
示信息并且返回0进行重新输入
}
}