五子棋C语音程序设计.docx
《五子棋C语音程序设计.docx》由会员分享,可在线阅读,更多相关《五子棋C语音程序设计.docx(12页珍藏版)》请在冰豆网上搜索。
五子棋C语音程序设计
青岛农业大学
本科生课程论文
论文题目五子棋C语音程序设计
学生专业班级通信工程
学生姓名(学号)
指导教师
完成时间
年月日
正文部分
1、
设计简介
五子棋是一种传统的棋盘游戏,是起源于中国古代的传统黑白棋种之一。
发展于日本,流行于欧美。
容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
这种游戏用笔纸都可以进行。
本程序设计为人与人对弈,双方棋子为两种不同符号。
一方执“黑笑脸”棋,一方执“白笑脸”棋,执“白笑脸”棋的一方先行下子,先输行再输列,比如ab,落子键为“Enter"。
接着双方轮流走棋,每方都试图在游戏结束前让自己的棋子在横线、竖线、斜线方向五子相连,首先实现五子相连的一方获胜,游戏结束。
程序执行过程中,要求棋盘、棋子时时可见,如果中途退出按q键。
二、设计模块
三、流程图
四.设计过程
1、列出所需头文件名
2、定义棋盘的制符表及位置
3、定义双方玩家各自的操作键
4、定义数据结构
5、说明自定义函数原型
6、定义全局变量
7.初始化图像以及获得按键值
8、嵌入各自定义函数编写主函数
9、编写界面初始化函数voidInit(void)
10、编写画棋盘函数voidPrint(void)
11、编写赢棋处理函数voidInput()
12、编写判断是否赢棋函数intJudge()
13、编写判断在规定方向是否有五子相连函数intLinksame()
14、编写游戏结束处理函数IntGameover()
5、调试过程
运行平台:
C/C++程序设计学习与实验系统
1、点击运行,出现棋盘界面
2、根据界面提示键落子,玩家一先下,双方轮流落子
3、方五子相连,判出赢家,游戏结束。
4、按q键退出游戏
六、源程序
#include
#include
#defineCHESSBOARD_SIZE15
constintlinkcount=5;
charchessboard[CHESSBOARD_SIZE][CHESSBOARD_SIZE];
intcount;
intplayerid;
voidinit()
{
inti,j;
count=1;
playerid=1;//默认Player1先走
for(i=0;i{
for(j=0;j{
chessboard[i][j]='+';
}
}
}
voidprint()
{
inti,j;
printf("abcdefghijklmno\n");
for(i=0;i{
printf("%c",i+'a');
for(j=0;j{
printf("%c",chessboard[i][j]);
if(j!
=CHESSBOARD_SIZE-1)
{
printf("-");
}
}
printf("\n");
}
}
voidinput()
{
charix,iy;
intx,y;
printf("player%d下棋,想退出请输入q键:
",playerid);
fflush(stdin);//清除之前缓存留下的数据
scanf("%c%c",&ix,&iy);
if(ix=='q')
{
exit(0);//退出游戏
}
getchar();
x=ix-'a';
y=iy-'a';
while(x<0||x>=CHESSBOARD_SIZE||y<0||y>=CHESSBOARD_SIZE||chessboard[x][y]!
='+')
{
printf("inputerror!
!
\npleaseinputagain:
");
fflush(stdin);//清除缓存留下的数据
scanf("%c%c",&ix,&iy);
getchar();
x=ix-'a';
y=iy-'a';
}
chessboard[x][y]=playerid+1;
count++;
playerid=count%2;//判断该步谁走
}
intlinksame(intx,inty,intxoffset,intyoffset,intncount)
{
intxnext,ynext;
if(chessboard[x][y]=='+')
{
return0;
}
if(ncount==linkcount-1)
{
return1;
}
xnext=x+xoffset;
ynext=y+yoffset;
if(xnext<0||xnext>=CHESSBOARD_SIZE||ynext<0||ynext>=CHESSBOARD_SIZE)
{
return0;
}
if(chessboard[x][y]==chessboard[xnext][ynext])
{
returnlinksame(xnext,ynext,xoffset,yoffset,ncount+1);
}
return0;
}
intjudge()
{
inti,j;
for(i=0;i{
for(j=0;j{
if(linksame(i,j,-1,1,0)||
linksame(i,j,0,1,0)||
linksame(i,j,1,1,0)||
linksame(i,j,1,0,0))
{
return1;
}
}
}
return0;
}
intgameover()
{
if(count==CHESSBOARD_SIZE*CHESSBOARD_SIZE-1)
{
system("cls");
print();
printf("drawgame!
!
\n");
return1;
}
if(judge())
{
system("cls");
print();
printf("player%d恭喜你赢了!
!
\n",playerid==1?
0:
1);
return1;
}
return0;
}
voidgamestart()
{
init();
while(!
gameover())
{
system("cls");
print();
input();
}
}
intmain()
{
charch='y';
while
(1)
{
gamestart();
getchar();
printf("continue?
(y/n):
");
ch=getchar();
if(ch=='n')
{
break;
}
}
return0;
}
七.自我总结
当题目出现在我的面前时,感觉真的一点都不会,让我自己编一个程序真的太难了,感觉自己上课的时候一点都没有好好的学,现在一点都不懂,就从网上参考了一下,当看到程序的时候都看不懂,经过问同学和同学之间的商量,老师的指导,终于做出一个完整的程序,当看到完整的的程序的时候真的感觉有一种成就感,真的觉得学到知识很好,所以在以后的学习中要做到认真努力。
课程论文成绩评定表
学生姓名
专业班级
论文题目
五子棋C语言课程设计
指导教师评语及意见:
成绩:
指导教师签字
年月日
忽略此处..