玩家通过键盘输入坐标 与 人工智障进行三子棋对战
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "unistd.h"
#define ROW 3
#define COL 3
//数组初始化函数
void initarr(char arr[ROW][COL], int row, int col)
{
for(int i=0; i<row; i++)
{
for(int j=0; j<col; j++)
{
arr[i][j] = ' ';
}
}
}
//显示函数
void display(char arr[ROW][COL], int row, int col)
{
for(int j=0; j<col; j++)
{
for(int i=0; i<row; i++)
{
printf(" %c ",arr[j][i]);
if(i < row-1)
printf("|");
}
printf("\n");
if(j < col-1)
{
for(int i=0; i<row; i++)
{
printf("---");
if(i < row-1)
printf("|");
}
}
printf("\n");
}
}
//玩家落子函数
void player(char arr[ROW][COL], int row, int col)
{
int x,y;
while(1)
{
printf("请输入X和Y坐标:\n");
scanf("%d%d", &x, &y);
//判断坐标是否超出数组大小
if(x>row || y>col)
printf("输入错误,请重新输入\n");
//判断坐标位置是否为空,为空则落子
else if(arr[x-1][y-1] == ' ')
{
arr[x-1][y-1] = 'X';
break;
}
//否则
else
printf("输入错误,请重新输入\n");
}
}
//电脑落子函数
void compute(char arr[ROW][COL], int row, int col)
{
int x,y;
while(1)
{
//随机创建X和Y坐标
x=rand() % row;
sleep(1);
y=rand() % col;
//判断坐标是否为空,为空则落子
if(arr[x][y] == ' ')
{
arr[x][y] = 'O';
break;
}
}
}
//胜利判断函数
char win(char arr[ROW][COL], int row, int col)
{
//行3连 且不为空
for(int i=0; i<ROW; i++)
{
if(arr[i][0]==arr[i][1] && arr[i][1]==arr[i][2] && arr[i][1]!=' ')
return arr[i][1];
}
//列3连 且不为空
for(int i=0; i<COL; i++)
{
if(arr[0][i]==arr[1][i] && arr[1][i]==arr[2][i] && arr[1][i]!=' ')
return arr[1][i];
}
//左上斜往右下3连 且不为空
if(arr[0][0]==arr[1][1] && arr[1][1]==arr[2][2] && arr[1][1]!=' ')
return arr[1][1];
//左下斜往右上3连 且不为空
if(arr[2][0]==arr[1][1] && arr[1][1]==arr[0][2] && arr[1][1]!=' ')
return arr[1][1];
//否则判断是否为平局
else
{
//遍历棋盘,还有空则不平局
for(int i=0; i<row; i++)
{
for(int j=0; j<col; j++)
{
//判断是否还有空
if(arr[i][j] == ' ')
return 'N';
}
}
//没有空 则为平局
return 'P';
}
}
void game()
{
//创建数组
char arr[ROW][COL] = {0};
char ret;
//数组初始化
initarr(arr, ROW, COL);
//清屏
system("clear");
//显示棋盘
display(arr, ROW, COL);
while(1)
{
//玩家落子
player(arr, ROW, COL);
system("clear");
display(arr, ROW, COL);
//判断棋局
ret = win(arr, ROW, COL);
if(ret == 'X')
{
printf("玩家胜利!!!\n");
break;
}
if(ret == 'P')
{
printf("平局!!!\n");
break;
}
//电脑落子
compute(arr, ROW, COL);
system("clear");
display(arr, ROW, COL);
//判断棋局
ret = win(arr, ROW, COL);
if(ret == 'O')
{
printf("电脑胜利!!!\n");
break;
}
if(ret == 'P')
{
printf("平局!!!\n");
break;
}
}
}
//主函数
int main()
{
int n;
srand((unsigned int)time(NULL));
do
{
printf("请输入 1 或者 0\n");
printf("***1.开始 0.退出***\n");
scanf("%d", &n);
switch(n)
{
case 0: printf("退出游戏\n");
break;
case 1: printf("游戏开始\n");
game();
break;
default: break;
}
}while(n);
return 0;
}
Linux下测试
情况一:玩家胜利
情况二:人工智障胜利
情况三:平局