C语言课程设计中国象棋.docx
- 文档编号:26272642
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:22
- 大小:225.92KB
C语言课程设计中国象棋.docx
《C语言课程设计中国象棋.docx》由会员分享,可在线阅读,更多相关《C语言课程设计中国象棋.docx(22页珍藏版)》请在冰豆网上搜索。
C语言课程设计中国象棋
南昌航空大学信息工程学院
课程设计说明书
课程名称:
C语言课程设计
设计题目:
中国象棋
专业:
计算机科学与技术班级:
110451
姓名:
***学号:
********
评分:
指导教师:
2012年6月26日
Ⅰ摘要
Ⅱ前言
Ⅲ功能描述
Ⅳ配置要求
Ⅴ总体设计(个人负责模块)
一、功能模块设计
二、函数功能描述
三、代码实现
四、运行结果
Ⅵ小结
Ⅰ摘要
中国象棋是一款很古老、很受欢迎的游戏,其开发过程有一定的技巧和方法,其中,
涉及到函数调用、二维数组、键盘操作等方面的知识。
本游戏的开发者需要基本掌握复
杂情况下函数的编写以及调用能力、二维数组的运用能力、复杂算法的设计能力等。
Ⅱ前言
中国象棋是一款经典的智力游戏,具有悠久的历史,早在战国时期就有了关于中国象棋的记载,经过几千年的流传,目前仍然是中国家喻户晓的棋类游戏,颇受欢迎。
因此,我们决定借这次机会通过用C语言将中国象棋实现出来,当然,我们也借鉴了前人的一些技巧经验。
不足之处,希望老师能够谅解,我们以后将再接再厉。
Ⅲ功能描述
中国象棋是针对两人对弈的。
对弈者通过键盘输入要移动的棋子、要移动到哪即可。
(1)游戏开始后屏幕会提示对弈者轮到谁走棋;
(2)如果谁走错棋子,系统会提示其错误及其原因;
(3)当某一方赢时,系统会通知对弈者谁赢了。
并且提示是否继续。
Ⅳ配置要求
(1)硬件配置
CPU:
≥PentiumIII600
内存:
≥64MB
硬盘剩余空间:
≥128MB
(2)软件环境
VC6.0及其以上版本
Ⅴ总体设计(个人负责模块)
本人为小组成员,负责的模块是:
车,马,炮三个比较复杂的子函数。
一、功能模块设计
1.车
是是
否
否
2.马
是是
是是
否否否
否
3.炮
是是
否否
是是
否否
二、函数功能描述
1、checkche()
函数原型:
intcheckche(intx1,inty1,intx2,inty2,inttable[][10])
checkche()函数是判断“车”的移动合不合法,并且给出相应的返回值。
返回1可执行,返回0不可执行;
2、checkma()
函数原型:
intcheckma(intx1,inty1,intx2,inty2,inttable[][10])
checkma()函数是判断“马”的移动合不合法,并且给出相应的返回值;返回1可执行,返回0不可执行;
3、checkpao()
函数原型:
intcheckpao(intx1,inty1,intx2,inty2,inttable[][10])
checkpao()函数是判断“炮”的移动合不合法,并且给出相应的返回值;
三、代码实现
1、车
intcheckche(intx1,inty1,intx2,inty2,inttable[][10])
{
inti,flag=1;//给flag赋一个初值1
if(x1!
=x2&&y1!
=y2)//既不同行也不同列
{
printf("车不能斜着走呀,重新输入吧!
\n");
return0;
}
if(table[x2][y2]*table[x1][y1]>0)//移动到自己棋子的位置
{
printf("自己不能吃掉自己呀,检查后重新输入吧!
\n");
return0;
}
if(x1==x2)//同一行
{
if(y1>y2)
{
for(i=y2+1;i { if(table[x1][i]! =0)//y2到y1中间有棋子 { flag=0;//把0赋给flag break;//跳出,结束检测 } } } else//y1<=y2 { for(i=y1+1;i { if(table[x1][i]! =0)//y1到y2中间有棋子 { flag=0;//把0赋给flag break;//跳出,结束检测 } } } } if(y1==y2)//同一列 { if(x1>x2) { for(i=x2+1;i { if(table[i][y1]! =0)//x2到x1中间有棋子 { flag=0;//把0赋给flag break;//跳出,结束检测 } } } else//x1<=x2 { for(i=x1+1;i { if(table[i][y1]! =0)//x1到x2中间有棋子 { flag=0;//把0赋给flag break;//跳出,结束检测 } } } } if(flag==0)//检测到移动前后中间有棋子 { printf("车移动的时候中间不能有其他的棋子呀,请重新输入! \n"); return0;//不合法 } return1;//合法 } 2.马 intcheckma(intx1,inty1,intx2,inty2,inttable[][10]) { if(table[x2][y2]*table[x1][y1]>0)//移动到自己棋子的位置 { printf("自己不能吃掉自己呀,检查后重新输入吧! \n"); return0; } if((x1-x2==2)&&(abs(y2-y1)==1))//上方位 { if(table[x1-1][y1]==0)//(x1-1,y1)没棋子,不别腿 { return1;//合法 } else//able[x1-1][y1]! =0 { printf("别腿了! \n"); return0;//不合法 } } elseif((y2-y1==2)&&(abs(x1-x2)==1))//右方位 { if(table[x1][y1+1]==0)//(x1,y1+1)没棋子,不别腿 { return1;//合法 } else//table[x1][y1+1]! =0 { printf("别腿了! \n"); return0;//不合法 } } elseif(((x1+2==x2)&&(y1+1==y2))||((x1+2==x2)&&(y1-1==y2)))//下方位 { if(table[x1+1][y1]==0)//(x1+1,y1)没棋子,不别腿 { return1;//合法 } else//table[x1+1][y1]! =0 { printf("别腿了! \n"); return0;//不合法 } } elseif((y1-y2==2)||(abs(x1-x1)==1))//左方位 { if(table[x1][y1-1]==0)//(x1,y1-1)没棋子,不别腿 { return1;//合法 } else//able[x1][y1-1]! =0 { printf("别腿了! \n"); return0;//不合法 } } else { printf("别忘了马只能走斜日! \n"); return0;//不合法 } return1;//合法 } 3.炮 intcheckpao(intx1,inty1,intx2,inty2,inttable[][10]) { inti,flag=0;//给flag赋初值0 if(table[x1][y1]*table[x2][y2]>=0) { if(x1! =x2&&y1! =y2)//既不同行也不同列 { printf("炮不能斜走,请重新输入! \n"); return0;//不合法 } if(table[x2][y2]*table[x1][y1]>0)//移动到自己棋子的位置 { printf("不能自相残杀,请重新输入! \n"); return0;//不合法 } //下面的同行、同列是table[x1][y1]*table[x2][y2]==0时---平移 if(x1==x2)//同一行 { if(y1>y2) { for(i=y2+1;i { if(table[x1][i]! =0)//y2到y1有棋子 { flag=1;//给flag赋值1 break;//跳出,结束检测 } } } else//y1<=y2 { for(i=y1+1;i { if(table[x1][i]! =0)//y1到y2有棋子 { flag=1;//给flag赋值1 break;//跳出,结束检测 } } } } if(y1==y2)//同一列 { if(x1>x2) { for(i=x2+1;i { if(table[i][y1]! =0)//x2到x1有棋子 { flag=1;//给flag赋值1 break;//跳出,结束检测 } } } else//x1<=x2 { for(i=x1+1;i { if(table[i][y1]! =0)//x1到x2有棋子 { flag=1;//给flag赋值1 break;//跳出,结束检测 } } } } if(flag==1)//移动前后之间有棋子 { printf("炮移动时中间不能有其他的棋子呀,请重新输入! \n"); return0;//不合法 } } //下面是table[x1][y1]*table[x2][y2]<0时-----吃棋子 else { flag=0; if(x1! =x2&&y1! =y2)//既不是同行也不是同列 { printf("炮不能斜着走呀,重新输入吧! \n"); return0;//不合法 } else//x1==x2||y1==y2 { if(x1==x2)//同行 { if(y1>y2) { for(i=y2+1;i { if(table[x1][i]! =0)//y2到y1有棋子 { flag++;//记支架的个数 } } } else//y1<=y2 { for(i=y1+1;i { if(table[x1][i]! =0)//y1到y2有棋子 { flag++;//记支架的个数 } } } } if(y1==y2)//同列 { if(x1>x2) { for(i=x2+1;i { if(table[i][y1]! =0)//x2到x1有棋子 { flag++;//记支架的个数 } } } else//x1<=x2 { for(i=x1+1;i { if(table[i][y1]! =0)//x1到x2有棋子 { flag++;//记支架的个数 } } } } } if(flag==1)//移动前后之间只有一个棋子 return1;//合法 elseif(flag==0)//移动前后之间没有棋子 { printf("没有支架炮没法吃掉对方的棋子,请检查后重新输入! \n"); return0;//不合法 } else//flag>1,移动前后之间不止一个棋子 { printf("您不能用多个棋子做炮的支架吧,请重新输入! \n"); return0;//不合法 } } return1;//合法 } 四、 运行结果 1.游戏开始 图3.游戏初始界面 2. 游戏中途 图4.游戏进行过程中界面 3. 游戏结束 Ⅵ小结 中国象棋博大精深,我们只是写其比较简单的部分。 当然,写代码过程是循序渐进的,刚开始感觉无从下手,思考、失败、改进,N次循环后终于有了现在的成果。 当然,这在个过程中学到了很多东西,更懂得从多个方向想问题,把程序写得更简洁、高效。 在此,我非常感谢张老师及同组成员。 可以说,这是我们相互合作的结晶。 此外,还有很多地方可以改进,但由于知识面及时间的限制,我们的努力只换取现在的成果。 希望通过以后的学习可以把中国象棋做得更好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课程设计 中国象棋 语言 课程设计