游戏人数:双人对奕
游戏组件:棋盘------九宫格
棋子-----共九颗棋子,五颗“X”四颗“O”
游戏规则:1每个选手选择一种属于自己的棋子,“X”或“O”
2每人每次出一颗棋子,“X”棋子先走,两种棋子交替着出棋
3一个正方形里只能放一颗棋子
游戏目标:看谁先用自己的三颗棋子连成一条线(包括横线、竖线、对角线)
具体代码如下:
#include<stdio.h>
#include<Windows.h>
#include<time.h>
void init(char (*a)[3],int row,int col)
{
for (int i = 0; i < row;++i)
for (int j = 0; j < col; ++j)
a[i][j] = ' ';
}
void face(char (*a)[3],int row,int col)
{
system("cls");
printf(" | 0 | 1 | 2 |\n");
for (int i = 0; i < row; ++i)
{
printf("----------------\n");
printf(" %d | %c | %c | %c |\n",i,a[i][0],a[i][1],a[i][2]);
}
printf("----------------\n");
}
void player(char (*a)[3],int row,int col,int* count)
{
while (1)
{
printf("请输入你想走的坐标:");
int x, y;
scanf("%d %d",&x,&y);
if (x<0 || x>2||y<0||y>2)
{
printf("您输入的坐标不正确,请重新输入!\n");
continue;
}
if (a[x][y] != ' ')
{
printf("您输入的位置已被占用,请重新输入!\n");
continue;
}
a[x][y] = 'X';
(*count)--;
break;
}
}
void computer(char(*a)[3], int row, int col, int* count)
{
int x = rand() % 3;
int y = rand() % 3;
while (1)
{
if (a[x][y] == ' ')
{
a[x][y] = 'O';
(*count)--;
}
break;
}
}
char result(char(*a)[3], int row, int col)
{
for (int i = 0; i < row; ++i)
{
if (a[i][0] == a[i][1] && a[i][1] == a[i][2])
return a[i][0];
}
for (int j = 0; j < col; ++j)
{
if (a[0][j] == a[1][j] && a[1][j] == a[2][j])
return a[1][j];
}
if (a[0][0] == a[1][1] && a[1][1] == a[2][2])
return a[0][0];
if (a[0][col-1] == a[1][1] && a[1][1] == a[row-1][0])
return a[1][1];
return 'N';
}
int IsWin(char(*a)[3], int row, int col,int* count)
{
char ret = result(a, row, col);
switch (ret)
{
case 'X':
printf("恭喜你,你赢了!\n");
break;
case 'O':
printf("你输了。\n");
break;
case 'N':
if (*count==0)
printf("打成了平手!\n");
break;
default:
return 1;
break;
}
return 0;
}
int main()
{
srand(time(NULL));
int count = 9;
char ar[3][3];
init(ar,3,3);
face(ar,3,3);
while (count >= 0)
{
player(ar, 3, 3, &count);
face(ar, 3, 3);
Sleep(1000);
if(IsWin(ar, 3, 3, &count)==0)
break;
computer(ar, 3, 3, &count);
face(ar, 3, 3);
if (IsWin(ar, 3, 3, &count) == 0)
break;
}
}
运行结果示例: