简单五子棋C语言课设.docx
- 文档编号:14177232
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:8
- 大小:77.82KB
简单五子棋C语言课设.docx
《简单五子棋C语言课设.docx》由会员分享,可在线阅读,更多相关《简单五子棋C语言课设.docx(8页珍藏版)》请在冰点文库上搜索。
简单五子棋C语言课设
简单五子棋C语言课设
C语言课程设计
姓名:
学号:
专业:
软件工程
班级:
3班
指导教师:
编写日期:
2015/6/25
一、需求分析
1、程序的输入与输出:
只需通过键盘“上”,“下”,“左”,“右”移动光标在棋盘上的位置,“p”键下子,“q”键悔棋进行人人对战。
2、程序的系统功能:
(1)五子棋;
(2)、根据需要提供对图书所需的查询方式。
二、系统总体设计
1问题:
(1)建立棋盘:
如何跟简便的建立棋盘;
(2)玩家操作如何移动光标;
(3)如何在各个方向上检查是否有五个棋子连接;
2.解决方法:
(1)用许多“+”符号连接起来构成简便棋盘,下棋时只需将棋子覆盖到“+”完成下子;
(2)棋子的移动与落子有键盘上按键控制,本程序选取按键为W、S、A、D和P键,分别代表上移、下移、左移、右移光标和落子。
在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。
落子后,程序会为落子处的数组元素赋一个特定值,用于判定胜负。
(3)胜负判断模块是程序的关键,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。
本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息,否则继续落子。
3、详细设计
1.建立棋盘
voiddrawqipan()//绘制棋盘及数据初始化
{
inti,j;
system("cls");//清除屏幕
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
Q[i][j]=0;
printf("十");
}
printf("\n");
}
weizhi.x=0;weizhi.y=0;//程序数据初始化
gotoxy(0,0);
}
2.玩家操作
voidjilu()//记录落子情况
{
Q[weizhi.x][weizhi.y]=player+1;
if(player)
{
player=0;//玩家变换
return;
}
player=1;
}
intcluozi(intx,inty)//由电脑落子时调用
{
weizhi.x=x;weizhi.y=y;
gotoxy(weizhi.x,weizhi.y);
if(Q[weizhi.x][weizhi.y]==0)//判断当前位置是否已经落子
{
jilu();
printf("○");
gotoxy(weizhi.x,weizhi.y);
}
}
voidluozi()//玩家落子
{
if(Q[weizhi.x][weizhi.y]==0)//判断当前位置是否已经落子
{
if(player)
{
jilu();
printf("●");
}
else
{
jilu();
printf("○");
}
gotoxy(weizhi.x,weizhi.y);
}
}
3、system
system("CLS")可以实现清屏操作。
而调用color函数可以改变控制台的前景色和背景。
4、判断胜负
intcheckWin()//检查游戏是否有输赢
{
intp;
intr,c,rr,cc,count=0;
p=player==0?
2:
1;
for(c=0;c<20;c++)
{
for(r=0;r<20;r++)
{
if(Q[r][c]!
=p)
continue;
//检查列
rr=r;cc=c;
while(--cc>=0&&Q[rr][cc]==p)count++;cc=c;
while(++cc<20&&Q[rr][cc]==p)count++;cc=c;
if(count+1>=5)
returnp;
//检查行
count=0;
while(--rr>=0&&Q[rr][cc]==p)count++;rr=r;
while(++rr<20&&Q[rr][cc]==p)count++;rr=r;
if(count+1>=5)
returnp;
//检查反斜边
count=0;
cc--;rr--;
while((cc>=0||rr>=0)&&Q[rr][cc]==p){count++;cc--;rr--;}rr=r;cc=c;
cc++;rr++;
while((cc<20||rr<20)&&Q[rr][cc]==p){count++;cc++;rr++;}rr=r;cc=c;
if(count+1>=5)
returnp;
count=0;
//检查正斜边
count=0;
cc++;rr--;
while((cc<20||rr>=0)&&Q[rr][cc]==p){count++;cc++;rr--;}rr=r;cc=c;
cc--;rr++;
while((cc>=0||rr<20)&&Q[rr][cc]==p){count++;cc--;rr++;}rr=r;cc=c;
if(count+1>=5)
returnp;
count=0;
}
}
return0;
}
四、程序运行结果测试与分析
1.棋盘
2.光标移动
3.判断胜负
五、结论与心得
这次课程设计完成了五子棋的主体设计,基本实现了五子棋的核心要求,另外在构建棋盘时用到了创新的思路,更加简便的完成了棋盘的建立。
程序的总体设计较为简单,并没有用到许多复杂的语句等,其所用的语句如:
for,while,switch,case.....都是C语言基础的语句,比较适合阅读。
在设计程序的过程中,我们遇到了许多困难,比如建立棋盘时遇到了错误,于是我们小组成员通过上网查阅资料的方式解决了问题。
但是,这个程序有一个待改进的地方就是该游戏只能人与人对战而不能人机对战,所以在单人时缺乏可玩性,我想我们小组一定会在往后的学习中努力解决人机对战的问题,使程序更加完善。
6、致谢、
这次设计首先要感谢的是王老师,在程序设计中老师指出了我们程序的优点与不足,让我们更加清晰我们的程序;另外,感谢我的小组成员袁志鹏和郑磊,在我们的互相帮助下完成这次的课程设计。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 五子棋 语言
![提示](https://static.bingdoc.com/images/bang_tan.gif)