四子棋课程设计报告.docx
《四子棋课程设计报告.docx》由会员分享,可在线阅读,更多相关《四子棋课程设计报告.docx(10页珍藏版)》请在冰豆网上搜索。
![四子棋课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/23/114eee0e-3705-4aa0-94f4-07bf2115f88d/114eee0e-3705-4aa0-94f4-07bf2115f88d1.gif)
四子棋课程设计报告
学院
计算15级C语言课程设计报告
题目:
四子棋游戏
院(系、部)信息科学与电气工程学院
专业计算机科学与技术
课程设计报告规范
课程设计任务书
题目四子棋课程设计
院(部)信息科学与电气工程学院
专业计算机科学与技术
3月7日至3月20日共2周
指导教师(签字)
负责人(签字)
年月日
一、设计内容及要求
内容:
设计一个四子棋游戏程序,棋盘为11X12,先达到4子成一条线即结束游戏。
(该程序在DOS下运行)。
要求:
(1)画出棋盘界面。
(2)定义键盘的功能,可以实现棋子左右移动及落子。
(3)棋子不能悬空,落子后不能再移动。
(4)人、人分别落子。
(5)用不同的颜色区分各方的棋子。
(6)撰写设计说明书及调试心得。
二、设计原始资料
《C程序设计(第四版)》谭浩强著
《C语言程序设计实验指导与实训》中国水利水电出版社
三、设计完成后提交的文件和图表
1.计算说明书部分
课程设计报告(同时提交纸质版和电子版)
源程序(电子版)
程序的可执行文件(.exe)(电子版)
2.图纸部分:
程序主流程图:
流程图
开始
画棋盘
控制游戏开始,并且玩家落子
写棋子并计算棋子的位子
判断棋盘中是否有横,竖,斜线上是否有四子练成直线。
是
否
继续落子,直到下完
结束
四、进程安排
此处按照2周安排,前几天以查阅资料、分析问题、设计方案为主描述;中间以设计编程测试为主描述;最后以测试完善为主描述,第2周周五进行答辩,完成答辩后则整理资料撰写课程设计报告。
五、主要参考资料
《C程序设计(第四版)》谭浩强著
《C语言程序设计实验指导与实训》中国水利水电出版社
1课程设计的任务及要求
1.1设计任务
1.2任务要求
2程序设计思路
2.1主程序及流程图
2.2棋盘及棋子的绘制
2.3判断胜负
3程序测试
3.1开始界面
3.2输赢情况
4程序中未能解决的问题
5程序设计小结及心得
摘要
四子棋的程序中包含许多模块,其中有棋盘的绘制,棋子的绘制以及棋子坐标位置的计算,棋子胜负的算法等等,在主程序中需要将这些模块链接起来。
1.课程设计的任务及要求
1.1设计任务
设计一个四子棋游戏程序,棋盘为12X11,先达到4子成一条线即结束游戏。
(该程序在DOS下运行)。
1.2任务要求
(1)画出棋盘界面。
(2)定义键盘的功能,可以实现棋子左右移动及落子。
(3)棋子不能悬空,落子后不能再移动。
(4)人、人分别落子。
(5)用不同的颜色区分各方的棋子。
(6)撰写设计说明书及调试心得。
2.程序设计思路
2.1主程序流程图
程序主流程图:
开始
控制游戏开始,并且玩家落子
写棋子并计算棋子的位子
画棋盘
判断棋盘中是否有横,竖,斜线上是否有四子练成直线。
是
否
继续落子,直到下完
结束
2.2棋盘及棋子的绘制
开始划线
画出上边框
利用循环画出竖线加棋子
画出上边框
完成划线
绘制棋盘代码:
voidqipan()
{
inti,j;
printf("退出请选择0!
\n");
printf("┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓\n");
printf("┃⑴┃⑵┃⑶┃⑷┃⑸┃⑹┃⑺┃⑻┃⑼┃⑽┃⑾┃⑿┃\n");
printf("┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫\n");
for(i=10;i>=0;i--)
{
printf("┃");
for(j=0;j<=11;j++)
{
if(L[i][j]==0)
printf("┃");
if(L[i][j]==2)
printf("●┃");
if(L[i][j]==3)
printf("○┃");
}
if(i>0)
printf("\n┣━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫\n");
if(i==0)
printf("\n┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛\n");
}
}
2.3判断胜负
胜负判断的算法:
该算法的作用主要是判断玩家的落子后是否构成胜负关系,以及给出胜负的具体一方,该算法主要是通过一个二维数组来表示棋子的位置,通过计算某个棋子周围3个棋子的颜色来判断是否胜利。
程序源代码:
(以黑棋胜利为例,白棋同理)
{inta,b,c,d;a,b代表所下棋子的坐标
d=0;c代表向各个方向找3个棋子
for(a=0;a<=11;a++)d代表相同棋子的个数
for(b=0;b<=10;b++)
{if(L[a][b]>0)
{if(L[a][b]==2)
{for(c=3;c>=-3;c--)
{if(L[a-c][b]==2)
d++;
else
d=0;
if(d==4)
{d=0;
printf("黑方胜。
");竖4子胜利情况
return0;
}
}
for(c=3;c>=-3;c--)
{if(L[a][b-c]==2)
d++;
elsed=0;
if(d==4)
{d=0;
printf("黑方胜。
");横4子胜利情况
return0;
}
}
for(c=3;c>=-3;c--)
{if(L[a+c][b+c]==2)
d++;
elsed=0;
if(d==4)
{d=0;
printf("黑方胜。
");撇4子胜利情况
return0;
}
}
for(c=3;c>=-3;c--)
{if(L[a+c][b-c]==2)
d++;
elsed=0;
if(d==4)
{d=0;
printf("黑方胜。
");捺4子胜利情况
return0;}
3.程序测试
3.1进入游戏
3.2胜利情况测试
4程序中未能解决的问题
这个程序有个很大的不足之处,在填满整个棋盘的过程中游戏会中途崩盘,自动退出到开始界面。
希望在今后的学习中能够解决这一问题。
5程序设计心得
这次课程设计使我使我认识到我在C语言学习上的很多严重不足,现在算法编制不简洁,程序冗长,出现即使是自己编写的也造成很难读懂的情况,对一些命令认识有很大的疏漏,对命令的含义和使用方法理解的不够深刻。
通过这次的课程设计,对我编程方法掌握时有很大帮助,我发现并解决了平常一些不明显但实际上却很严重的问题,我对模块化的编程方式也有了更深的理解,我想我会在以后的课程设计中克服这次课程设计所暴露的问题,不在犯类似的错误。
对于程序中难以解决的问题,可以尝试通过小组合作解决,小组合作解决不了就一定要多请教老师不能放着不管。
软件的设计依靠团体中的每一个人共同努力,相互协作,才能做到最好。