#include<stdio.h>
#include<stdlib.h>
int length;
int map[100][100];
int player=1;
//打印初始的棋盘
void init()
{
int x,y;
for(x=0;x<length;x++)
{
for(y=0;y<length;y++)
if(map[x][y]==0)
printf(". ");
printf("\n");
}
}
//打印下棋过程中的棋盘
void showmap()
{
int x,y;
for(x=0;x<length;x++)
{
for(y=0;y<length;y++)
{
if(map[x][y]==0)
printf(". ");
else if(map[x][y]==1)
printf("O ");
else
printf("X ");
}
printf("\n");
}
}
//判断输赢
int check()
{
int i,j;
//横
for(i=0;i<length;i++)
for(j=0;j<length-4;j++)
if((map[i][j]&map[i][j+1]&map[i][j+2]&map[i][j+3]\
&map[i][j+4])==player)
return player;
//竖
for(i=0;i<length-4;i++)
for(j=0;j<length;j++)
if((map[i][j]&map[i+1][j]&map[i+2][j]&map[i+3][j]\
&map[i+4][j])==player)
return player;
//斜 '\'
for(i=0;i<length-4;i++)
for(j=0;j<length-4;j++)
if((map[i][j]&map[i+1][j+1]&map[i+2][j+2]&map[i+3]\
[j+3]&map[i+4][j+4])==player)
return player;
//斜 '/'
for(i=0;i<length-4;i++)
for(j=length-1;j>0;j--)
if((map[i][j]&map[i+1][j-1]&map[i+2][j-2]&map[i+3]\
[j-3]&map[i+4][j-4])==player)
return player;
return 0;
}
void delay()
{
int i,j;
for(i=0;i<10000;i++)
for(j=0;j<10000;j++);
}
void play()
{
int x,y,i,j,flag;
for(i=0;i<length*length;i++)
{
//保证每次放置的棋子位置上之前都没放过
do{
printf("请%d号选手下棋:",player);
scanf("%d%d",&x,&y);
}while(map[x][y]!=0||x<0||x>length||y<0||y>length);
map[x][y]=player;
system("clear");
showmap();
flag=check();
if(flag==player)
{
sleep(2);
for(j=0;j<5;j++)
{
system("clear");
delay();
printf("玩家%d赢了!!!\n",player);
delay();
}
break;
}
player=3-player;
}
}
int main()
{
printf("请输入棋盘的大小:");
scanf("%d",&length);
system("clear");
init();
play();
//check();
}

这篇博客介绍了如何使用C语言在Linux终端上编写一个五指棋游戏。主要内容包括初始化棋盘、显示棋盘、判断输赢、延迟函数和游戏流程。通过输入棋盘大小开始游戏,玩家轮流在指定位置落子,当一方连成五子时宣告胜利。
4032

被折叠的 条评论
为什么被折叠?



