C语言课程设计 一担挑游戏doc
中 国 地 质 大 学
本科生课程论文封面
2011年12月
课程设计评语
对课程论文的评语:
平时成绩:课程论文成绩:总 成 绩:评阅人签名:
注:1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目 录
课程设计评语2
目 录3
1.课程论文题目4
2.程序设计思路4
3.功能模块图5
4.数据结构设计5
5.算法设计6
6.程序代码13
7.程序运行结果22
8.编程中遇到的困难及解决方法25
9.总结心得及良好建议26
10.致谢26
一 课程论文题目 :一担挑游戏
二.程序设计思路
1 题目要求:
1.计算机移动是,使用相应函数扫描棋盘矩阵,寻找未占单元;发现空单元后,置为“0”;为发现时,报告平局退出。
2.轮到对弈者时,使用相应函数要求对弈者回答想把“X”放在哪里。
3.谁先三点连成一线了,则报告谁胜出。
4.计算机与对弈者每下一步棋都会使相应位置变为“0”和“X”,便于在屏上显示矩阵。Char qi pan[3][3];
Void init_qipan(void);
{int i,j;
for(i=0;i<3;i++)
for(j=0:j<3;j++)
qipan[i][j]=’ ’
}
五.算法设计
1.主函数:较为简单,只有数据输入,功能处理等函数调用。
流程图
2各功能模块设计
棋盘输入
用二维数组构筑了棋盘,用间隔线分割棋盘后,就可以按自己意愿和计算机对弈了,此后每一步计算机都会调用相应的函数扫描棋盘。
Char qi pan[3][3];
Void init_qipan(void);
{int i,j;
for(i=0;i<3;i++)
for(j=0:j<3;j++)
qipan[i][j]=’ ’
(2)对弈模块
模块是提供用户模拟棋盘按用户自己的思想来下棋,这期间涉及两种情况1用户输入错误,2棋子位置错误。
/*************用户方面对弈************/
void player_move(void)
{
int x,y;
printf("It's your turn,please:");
scanf("%d%*c%d",&x,&y);
x--;y--;
if(qipan[x][y]!=' ')
{
printf("Error, try again.\n");
player_move();
}
else qipan[x][y]='X';
}
/**************计算机方面对弈*********/
void computer_move(void)
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
if(qipan[i][j]==' ')
break;
if(qipan[i][j]==' ')
break;
}
if(i*j==9)
{
printf("pingju\n");
exit(0);
}
else
qipan[i][j]='0';
}
(3)显现模块
显示模块
【需求分析】
该模块的作用是显示对弈结果。即要求计算机调用相关的函数多次扫描棋盘,谁的棋优先连成一线了,计算机就判定谁胜出:这期间有三种情况;1.用户是胜者,2.计算机胜出,3.二者打成平局.
【程序】
void disp(void)
{
int t;
for(t=0;t<3;t++)
{
printf("%c|%c|%c",qipan[t][0],qipan[t][1],qipan[t][2]);
if(t!=2)
printf("\n-|-|-\n");
}
printf("\n");
}
char check(void)
{
int i;
for(i=0;i<3;i++)
if(qipan[i][0]==qipan[i][1]&&qipan[i][0]==qipan[i][2])
return qipan[i][0];
for(i=0;i<3;i++)
if(qipan[0][i]==qipan[1][i]&&qipan[0][i]==qipan[2][i])
return qipan[0][i];
for(i=0;i<3;i++)
if(qipan[0][0]==qipan[1][1]&&qipan[0][0]==qipan[2][2])
return qipan[0][0];
for(i=0;i<3;i++)
if(qipan[0][2]==qipan[1][1]&&qipan[1][1]==qipan[2][0]