C语言课程设计中国象棋.docx

上传人:b****4 文档编号:12220678 上传时间:2023-04-17 格式:DOCX 页数:15 大小:124.97KB
下载 相关 举报
C语言课程设计中国象棋.docx_第1页
第1页 / 共15页
C语言课程设计中国象棋.docx_第2页
第2页 / 共15页
C语言课程设计中国象棋.docx_第3页
第3页 / 共15页
C语言课程设计中国象棋.docx_第4页
第4页 / 共15页
C语言课程设计中国象棋.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言课程设计中国象棋.docx

《C语言课程设计中国象棋.docx》由会员分享,可在线阅读,更多相关《C语言课程设计中国象棋.docx(15页珍藏版)》请在冰豆网上搜索。

C语言课程设计中国象棋.docx

C语言课程设计中国象棋

南昌航空大学信息工程学院

 

课程设计说明书

 

课程名称:

C语言课程设计

设计题目:

中国象棋

专业:

计算机科学与技术班级:

______

姓名:

学号:

___

评分:

指导教师:

 

2012年6月26日

Ⅰ摘要

Ⅱ前言

Ⅲ功能描述

Ⅳ配置要求

Ⅴ总体设计(个人负责模块)

一、功能模块设计

二、数据结构设计

三、函数功能描述

四、代码实现

五、运行结果

Ⅵ小结

Ⅰ摘要

中国象棋是一款很古老、很受欢迎的游戏,其开发过程有一定的技巧和方法,其中

涉及到函数调用、二维数组、键盘操作等方面的知识。

本游戏的开发者需要基本掌握复

杂情况下函数的编写以及调用能力、二维数组的运用能力、复杂算法的设计能力等。

Ⅱ前言

中国象棋是一款经典的智力游戏,具有悠久的历史,早在战国时期就有了关于中国象棋的记载,经过几千年的流传,目前仍然是中国家喻户晓的棋类游戏,颇受欢迎。

因此,我们决定借这次机会通过用C语言将中国象棋实现出来,当然,我们也借鉴了前人的一些技巧经验。

有不足之处,希望老师能够谅解,我们以后将会再接再厉。

Ⅲ功能描述

本人负责棋子帅(将)、象(相)、士(仕)、卒(兵)子函数的编写,它们的所能实现的功能分别是:

(1)帅(将):

控制棋子帅(将)能符合现实情况下的游戏规则而行走,例如帅(将)只能在规定范围内向上或向左、右、下行走一格,最后返回一个行走正确或行走错误的数据。

(2)象(相):

控制棋子象(相)能符合现实情况下的游戏规则而行走,例如象(相)只能在自己领域内走“田”字格,且中间不能有其他棋子阻挡,最后返回一个行走正确或行走错误的数据。

(3)士(仕):

控制棋子士(仕)能符合现实情况下的游戏规则而行走,例如士(仕)只能在规定范围内斜着跨一格,然后返回一个行走正确或行走错误的数据。

(4)卒(兵):

控制棋子卒(兵)能符合现实情况下的游戏规则而行走,例如卒(兵)只能一次走一格,同时在自己领域内只能向前走,而在对方领域内可向前、左、右方向走一格,最后返回一个行走正确或行走错误的数据。

Ⅳ配置要求

(1)硬件配置

CPU:

≥PentiumIII600

内存:

≥64MB

硬盘剩余空间:

≥128MB

(2)软件环境

VisualC++6.0及其以上版本

Ⅴ总体设计(个人负责模块)

本人为小组成员,负责的模块是:

棋子帅(将)、象(相)、士(仕)、卒(兵)子函数的设计与编写。

一、系统模块设计

1、系统模块图

本人所负责的模块共有四个小项目组成,分别是控制棋子正确行走的帅(将)、象(相)、士(仕)、卒(兵)子函数。

(1)帅(将)

该子函数主要负责控制维持棋子帅(将)的正确行走,返回正确或错误的数据信息。

(2)象(相)

该子函数主要负责控制维持棋子象(相)的正确行走,返回正确或错误的数据信息。

(3)士(仕)

该子函数主要负责控制维持棋子士(仕)的正确行走,返回正确或错误的数据信息。

(4)卒(兵)

该子函数主要负责控制维持棋子卒(兵)的正确行走,返回正确或错误的数据信息。

调调

用调调调用

用用用

图1.系统模块图

2、任务执行流程图

在玩家进行游戏移动棋子帅(将)、象(相)、士(仕)、卒(兵)的时候,主函数调用这几个子函数的执行流程图均为:

图2.任务执行流程图

二、数据结构设计

四个子函数均定义了局部变量x1,x2,y1,y2,table[][10],通过主函数调用将玩家从键盘输入的值传递给x1,x2,y1,y2.table[][10]是在主函数中定义的一个二维数组,在子函数中同样控制棋盘的输出。

三、函数功能描述

1.chekshuai()

函数原型:

intcheckshuai(intx1,inty1,intx2,inty2,inttable[][10])

checkshuai()函数控制棋子帅(将)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别帅(将)的行走是否符合规则。

2.checkxiang()

函数原型:

intcheckxiang(intx1,inty1,intx2,inty2,inttable[][10])

checkxiang()函数控制棋子象(相)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别象(相)的行走是否符合规则。

3.checkshi()

函数原型:

intcheckshi(intx1,inty1,intx2,inty2,inttable[][10])

checkshi()函数控制棋子士(仕)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别士(仕)的行走是否符合规则。

4.checkbing()

函数原型:

intcheckbing(intx1,inty1,intx2,inty2,inttable[][10])

checkbing()函数控制棋子士(仕)的正确行走,通过主函数将初始位置的坐标x1,y1与目标位置的坐标x2,y2传递给该子函数,从而判别士(仕)的行走是否符合规则。

四、代码实现

1.帅(将)

intcheckshuai(intx1,inty1,intx2,inty2,inttable[][10])

{

if((x2<8||x2>10||y2<4||y2>6)&&(x2<1||x2>3||y2<4||y2>6))

//控制棋子的行走范围是在自己领域的九宫格内

{

printf("\n将或者帅是不能移出九宫区域的,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif((abs(x2-x1)==1)&&(abs(y2-y1)==1))

//控制棋子的行走只能是直线

{

printf("\n将或者帅是不能走斜线的哦,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif(table[x2][y2]*table[x1][y1]>0)

//控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n自己不能吃掉自己呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif((abs(x2-x1)>=2)||(abs(y2-y1)>=2))

//控制棋子每次只能跨越一格

{

printf("\n将或者帅不能一次走多格呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elsereturn1;//若未遇到错误则返回1继续进行游戏

}

2.象(相)

intcheckxiang(intx1,inty1,intx2,inty2,inttable[][10])

{

if((abs(x2-x1))!

=2||(abs(y2-y1))!

=2)

//控制棋子的行走路线为田字格对角线

{

printf("\n相(象)只能走田字呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif((table[x1][y1]>0&&x2>5)||(table[x1][y1]<0&&x2<5))

//控制棋子只能在自己领域内移动

{

printf("\n相(象)不能渡过楚河汉界呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif(table[(x1+x2)/2][(y1+y2)/2]!

=0)

//当棋子移动路径上有其他棋子阻挡时棋子不能移动

{

printf("\n您要移动的路径上有其他棋挡着呢,不能移动,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif(table[x2][y2]*table[x1][y1]>0)

//控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n自己不能吃掉自己呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elsereturn1;//若未遇到错误则返回1继续进行游戏

}

3.士(仕)

intcheckshi(intx1,inty1,intx2,inty2,inttable[][10])

{

if((x2<8||x2>10||y2<4||y2>6)&&(x2<1||x2>3||y2<4||y2>6))

//控制棋子的行走范围是在自己领域的九宫格内

{

printf("\n士或者仕是不能移出九宫区域的,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif(table[x2][y2]*table[x1][y1]>0)

//控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n自己不能吃掉自己呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif((abs(x2-x1)>=2)||(abs(y2-y1)>=2))

//控制棋子每次只能跨越一格

{

printf("\n士或者仕不能一次走多格呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elseif(!

((abs(x2-x1)==1)&&(abs(y2-y1)==1)))

//控制棋子行走路径只能是沿着一格的对角线

{

printf("\n士或者仕只能斜着走呀,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

elsereturn1;//若未遇到错误则返回1继续进行游戏

}

4.卒(兵)

intcheckbing(intx1,inty1,intx2,inty2,inttable[][10])

{

if(table[x1][y1]>0)

//兵(卒)是否是甲方棋子(在上方)

{

if(table[x2][y2]>0)

//控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n拜托,不能自己吃自己\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

if(x1<6)

//此时兵(卒)没过河

{

if((y1==y2)&&(x2-x1==1))

//控制棋子只能向前走

{

return1;//若符合规则则继续游戏

}

else

{

printf("\n兵(卒)过河前只能向前走,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

}

else

//若此时兵(卒)已过河

{

if(((y1==y2)&&(x2-x1==1))||((y1-y2==1)&&(x2==x1))||((y2-y1==1)&&(x2==x1)))

//控制棋子过河后只能向前或者向左、右移动

{

return1;//若符合规则则继续游戏

}

else

{

printf("\n兵(卒)过河后只能向前走或者平移,不能后退,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

}

}

else

//判断兵是否在乙方(在下方)

{

if(table[x2][y2]<0)

//控制棋子只能覆盖对方棋子以分清敌我

{

printf("\n拜托,自己不能吃自己\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

if(x1>5)

//如果兵(卒)没过河

{

if((y1==y2)&&(x1-x2==1))

//控制棋子只能向前走

return1;//若符合规则则继续游戏

else

{

printf("\n兵(卒)过河前只能向前走,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

}

else

//如果兵(卒)已过河

{

if(((y1==y2)&&(x1-x2==1))||((y1-y2==1)&&(x2==x1))||((y2-y1==1)&&(x2==x1)))

//控制棋子过河后只能向前或者向左、右移动

return1;//若符合规则则继续游戏

else

{

printf("\n兵(卒)过河后只能向前走或者平移,不能后退,重新输入吧!

\n");

return0;//规则错误后出现提示信息并且返回0进行重新输入

}

}

}

}

五、运行结果

1、游戏进入初始界面

进入游戏后显示的初始界面截图如下图:

图3.游戏初始界面

 

2、游戏进行中的界面

如下显示了游戏进行中的界面截图:

 

图4.游戏进行过程中界面

3、游戏结束

完成游戏后结束的界面截图:

图5.游戏结束界面

Ⅵ小结

两周的课程设计结束了,这次的课程设计不仅检验了我们所学的知识,同时也培养了大家如何去把一件事情认认真真的做好。

在整个设计过程中,我们互相讨论、互相学习、互相监督。

C语言程序设计是一门基础性极强的计算机语言,它具有功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,既适于编写系统软件,又能方便的用来编写应用软件。

因此作为理工科院校的大学生,学好、用好C语言这个工具是一项最基本的要求,也是为日后的工作打下良好的基础。

通过这次课程设计,我们都熟练掌握了函数调用以及二维数组、多分支结构、循环结构等的运用,其他很多方面也有所提高。

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

当前位置:首页 > 工程科技 > 能源化工

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

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