五子棋游戏C语言Word下载.docx
- 文档编号:16043509
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:20
- 大小:171.24KB
五子棋游戏C语言Word下载.docx
《五子棋游戏C语言Word下载.docx》由会员分享,可在线阅读,更多相关《五子棋游戏C语言Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
0环境下编译文件,c语言中的有些库函数并不支持,所以选择了’gotoxy()’函数并结合‘window。
h’下的函数,通过键盘按键控制达到光标移动功能。
定义一个二维数组来记录棋子落点数据,当棋盘上的某一个位置有棋子时,能判断这个位置不能再落子了。
因为游戏设置的是两个玩家操作不同的按键来控制的,所以当一方走棋时,另一方的按键要设置成无效,采用的办法是过滤接收的字符.例如,当玩家一走棋时,只有当输入的字符为‘W’、‘A’、‘S’、‘D’、‘Z’、‘Q'
、‘Esc'
时,才响应,而‘↑’、‘↓'
、‘←’、‘→’、‘空格’以及其他字符则不响应。
最后是判断输赢.根据五子棋规则,如果连续的五个相同颜色的棋子在一条直线上就算赢。
于是用代码实现时,就确定了基本的思路:
利用for循环来遍历棋盘上的落点。
这里有四种情况,分别是从左往右,从上往下,从左下往右上,从左上往右下,判断是否有五子连续在一直线上,并且连续五个位置记录的数据相等时就打赢某一方赢了。
要重新开始就输入‘Q’.
三、程序框图或流程图,程序清单与调用关系
程序清单:
函数声明
功能
Main()
主函数
voiddrawqipan()
画棋盘
voidgotoxy()
光标定位
voidmovegb()
移动光标
voidluozi()
落棋子
voidjudgewin()
判断输赢
voidsystem()
系统函数
intstartgame()
游戏初始界面
voidinitdata()
初始化游戏数据
程序调用关系:
程序流程图:
voidmovegb()luozi()
Voiddrawqipan()voidjudgewin()
否
是
是i
intStartGame()
四、全部源程序清单
#include〈stdio.h>
#include<
conio.h>
#include〈windows.h〉
#defineplay1up'
w'
#defineplay1down'
s'
#defineplay1left'
a’
#defineplay1right’d’
#defineplay2up72
#defineplay2down80
#defineplay2left75
#defineplay2right77
#defineplay1lq'
z’
#defineplay2lq’'
#defineN20
#defineplaynext'
q’
#defineexit27
intm=1;
/*游戏循环控制*/
intcount=1;
/*回合计数器*/
intt=0;
/*代表坐标交叉点有无棋子的状态*/
intflag=1;
/*输赢标志符*/
intp[N][N];
/*记录棋盘落子情况*/
charq[N][N];
/*记录棋盘交叉点棋子种类*/
structzuobiao/*坐标位置*/
{
intx;
inty;
}weizhi;
//-—-—-—-—-—-———--——
voidgotoxy(intx,inty)/*建立坐标函数*/
{
COORDc;
c。
X=x;
c.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
//--——--——-————---—--
voiddrawqipan()/*建立棋盘*/
{
inti,j;
for(i=0;
i<
N;
i++)
for(j=0;
j<
N;
j++)
{p[i][j]=0;
q[i][j]='
o’;
printf(”╋”);
printf(”\n”);
//-—--——-—-—————-—————
voidmovegb(charpress)/*光标的移动*/
{
switch(press)
caseplay1up:
if(weizhi。
y>
-1)weizhi.y-—;
y<
0)weizhi。
y=19;
break;
/*玩家1光标向下移动*/
caseplay1down:
if(weizhi.y〈20)weizhi.y++;
if(weizhi.y〉19)weizhi.y=0;
break;
/*玩家1光标向上移动*/
caseplay1left:
x>
—1)weizhi.x--;
if(weizhi.x〈0)weizhi。
x=19;
/*玩家1光标向左移动*/
caseplay1right:
x〈20)weizhi.x++;
if(weizhi.x>
19)weizhi.x=0;
/*玩家1光标向右移动*/
caseplay2up:
if(weizhi.y〉-1)weizhi.y--;
/*玩家2光标向上移动*/
caseplay2down:
if(weizhi.y〈20)weizhi.y++;
y〉19)weizhi.y=0;
/*玩家2光标向下移动*/
caseplay2left:
x〉-1)weizhi。
x—-;
x〈0)weizhi.x=19;
/*玩家2光标向左移动*/
caseplay2right:
if(weizhi.x<
20)weizhi.x++;
if(weizhi.x〉19)weizhi.x=0;
/*玩家2光标向右移动*/
default:
return;
}
gotoxy(2*(weizhi。
x),weizhi。
y);
return;
//——-——--—-——-—-—--—-——-—----—--
voidluozi(charpress)/*落子*/
if(press==play1lq)
{if(t==0&
&
p[weizhi。
x][weizhi.y]==0)
printf(”●”);
gotoxy(2*weizhi。
x,weizhi。
y);
q[weizhi。
x][weizhi.y]=press;
p[weizhi。
x][weizhi.y]=1;
t=1;
count++;
if(press==play2lq)
{if(t==1&
&p[weizhi。
x][weizhi。
y]==0)
printf(”○”);
x,weizhi.y);
q[weizhi。
x][weizhi.y]=press;
p[weizhi.x][weizhi。
y]=1;
t=0;
//-—-—————-—--—--—-—-——-—-——
voidjudgewin(charpress)/*判断输赢*/
inti,count1,count2=0,count3=0;
structzuobiaop;
4;
for(count1=4;
count1>
=-4;
count1-—)
{switch(i)
case0:
p。
x=weizhi.x-count1;
y=weizhi。
y;
/*从左往右判断是否有五子连续在一直线上*/
case1:
p.x=weizhi。
x;
y+count1;
/*从上往下判断是否有五子连续在一直线上*/
case2:
p.x=weizhi.x-count1;
y=weizhi.y+count1;
/*从左上往右下判断是否有五子连续在一直线上*/
case3:
p.x=weizhi.x—count1;
p.y=weizhi.y—count1;
/*从左下往右上判断是否有五子连续在一直线上*/
}
if(p.x〉=0&
y〉=0)
if(q[p.x][p。
y]==play1lq)
{count2++;
count3=0;
}if(q[p。
x][p。
y]==play2lq)
{count3++;
count2=0;
if(count2>
=5)
{gotoxy(2*22,8);
flag=0;
printf(”黑棋胜!
”);
gotoxy(0,21);
printf(”Playagainpress'
q’,andpress’Esc’escape!
\n”);
elsecount2=0;
if(count3〉=5)
{gotoxy(2*22,8);
printf("
白棋胜!
gotoxy(0,21);
printf(”Playagainpress’q’,andpress'
Esc'
escape!
\n”);
elsecount3=0;
//——-—-——-——-———-----—————----------—--—-—-—-
voidInitData()/*数据初始化*/
system("
cls"
);
drawqipan();
count=1;
t=0;
flag=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 游戏 语言