#include<stdio.h>
#include<stdlib.h>
/*
四子棋
1.在一个6行7列的棋盘中
2.玩家1和玩家2依次交替下子
3.每次下子落于棋盘可能达到的最下方
4.先四子相连为胜
5.棋盘已满且无四子相连为平局
*/
/*定义常量*/
//行数
#define ROW 7
//列数
#define COL 8
//玩家1的棋子
#define O 1
//玩家2的棋子
#define X 2
//空白
#define WHITE 0
//胜利需要的连字数
#define COUNT 4
/*定义全局变量*/
int map[ROW][COL]={0};
//打印地图
void PrintMap(int map[][COL],int row,int col);
//下子
int PlayChess(int map[][COL],int col,int piece);
//是否已经赢了
int IsWin(int map[][COL],int row,int col,int piece);
int main()
{
int piece=O;
int row;
int col;
int Winner=0;
int count_piece=0;
while(1)
{
/*清屏*/
system("cls");
PrintMap(map,ROW-1,COL-1);
if(Winner!=0||count_piece==(ROW-1)*(COL-1))
{
break;
}
printf("现在%d号玩家下子\n",piece);
printf("落子位置(1~%d):",COL-1);
scanf("%d",&col);
if(col<1||col>=COL)
{
printf("下子位置无效!\n");
continue;
}
row=PlayChess(map,col,piece);
if(row==0)
{
printf("该列已经满了!\n");
}
else
{
count_piece++;
Winner=IsWin(map,row,col,piece);
if(Winner!=0)
{
}
else
{
if(piece==O)
{
piece=X;
}
else if(piece==X)
{
piece=O;
}
}
}
}
if(Winner!=0)
{
printf("%d号玩家获胜!\n",Winner);
}
else
{
printf("平局!\n");
}
return 0;
}
//打印地图
void PrintMap(int map[][COL],int row,int col)
{
/*
int i=1;
while(i<=row)
{
int j=1;
while(j<=col)
{
if(map[i][j]==O)
{
printf("O");
}
else if(map[i][j]==X)
{
printf("X");
}
else if(map[i][j]==WHITE)
{
printf(" ");
}
j++;
}
printf("\n");
i++;
}
*/
int number=1;
while(number<=2*COL-2)
{
if(number%2==0)
{
printf("%d",number/2);
}
else
{
printf(" ");
}
number++;
}
printf("\n");
int i=1;
while(i<=2*ROW-1)
{
int j=1;
while(j<=2*COL-1)
{
if(i%2==1)
{
printf("-");
}
else if(j%2==1)
{
printf(" ");
}
else
{
int h=i/2;
int z=j/2;
if(map[h][z]==O)
{
printf("O");
}
else if(map[h][z]==X)
{
printf("X");
}
else
{
printf(" ");
}
}
j++;
}
printf("\n");
i++;
}
}
//下子
int PlayChess(int map[][COL],int col,int piece)
{
int i=ROW-1;
while(i>=1)
{
if(map[i][col]==WHITE)
{
map[i][col]=piece;
return i;
}
i--;
}
return 0;
}
//是否已经赢了
int IsWin(int map[][COL],int row,int col,int piece)
{
int countH=1,countS=1,countP=1,countN=1;
int i;
/*计算countH*/
/*左边*/
i=col-1;
while(i>=1)
{
if(map[row][i]==piece)
{
countH++;
}
else
{
break;
}
i--;
}
/*右边*/
i=col+1;
while(i<=COL-1)
{
if(map[row][i]==piece)
{
countH++;
}
else
{
break;
}
i++;
}
/*计算countS*/
/*上边*/
i=row-1;
while(i>=1)
{
if(map[i][col]==piece)
{
countS++;
}
else
{
break;
}
i--;
}
/*下边*/
i=row+1;
while(i<=ROW-1)
{
if(map[i][col]==piece)
{
countS++;
}
else
{
break;
}
i++;
}
int j;
/*计算countN*/
/*左上*/
i=row-1;
j=col-1;
while(i>=1&&j>=1)
{
if(map[i][j]==piece)
{
countN++;
}
else
{
break;
}
i--;
j--;
}
/*右下*/
i=row+1;
j=col+1;
while(i<=ROW-1&&j<=COL-1)
{
if(map[i][j]==piece)
{
countN++;
}
else
{
break;
}
i++;
j++;
}
/*计算countP*/
/*右上*/
i=row-1;
j=col+1;
while(i>=1&&j<=COL-1)
{
if(map[i][j]==piece)
{
countP++;
}
else
{
break;
}
i--;
j++;
}
/*左下*/
i=row+1;
j=col-1;
while(i<=ROW-1&&j>=1)
{
if(map[i][j]==piece)
{
countP++;
}
else
{
break;
}
i++;
j--;
}
if(countH>=COUNT||countS>=COUNT||countP>=COUNT||countN>=COUNT)
{
return piece;
}
else
{
return 0;
}
}
评论0
最新资源