产生一个三子棋
代码如下:
玩家落子
void UsePlay()
{
while (1)
{
printf("请输入一个坐标");
int row;
int col;
scanf("%d %d", &row, &col);
if (row > ROW -1|| row<0 || col>COL-1 || col < 0 || g_chess_board[row][col] != ' ')
{
printf("输入有误,请重新输入\n");
}
else
{
g_chess_board[row][col] = 'x';
Print();
break;
}
}
}
电脑落子
void ComputerPlay()
{
srand(time(NULL));
while (1)
{
int row = rand() % 3;
int col = rand() % 3;
if (row < ROW && row >= 0 && col >= 0 && col<COL && g_chess_board[row][col] == ' ')
{
g_chess_board[row][col] = 'o';
Print();
break;
}
}
}
玩家胜利//电脑胜利类似
int UseWin()
{
int row;
int col;
for (row = 0; row <ROW; row++)
{
if (g_chess_board[row][1] == g_chess_board[row][2] && g_chess_board[row][0] == g_chess_board[row][2] && g_chess_board[row][0] == 'x')
return 1;
}
for (col = 0; col <COL; col++)
{
if (g_chess_board[1][col] == g_chess_board[2][col] && g_chess_board[0][col] == g_chess_board[1][col] && g_chess_board[1][col] == 'x ')
return 1;
}
if (g_chess_board[0][0] == g_chess_board[1][1] && g_chess_board[0][0] == g_chess_board[2][2] &&g_chess_board[0][0] == 'x')
{
return 1;
}
if (g_chess_board[0][2] == g_chess_board[1][1] && g_chess_board[0][2] == g_chess_board[2][0] && g_chess_board[0][2] == 'x')
{
return 1;
}
return 0;
}
和棋
int DrawChess()
{
int row;
int col;
for (row = 0; row < ROW; row++)
for (col = 0; col < COL; col++)
{
if (g_chess_board[row][col] == ' ')
{
return 0;
}
}
return 1;
}
//5.电脑落子,电脑落子用o表示
//产生两个随机数作为电脑落子的坐标
//判断电脑产生的坐标,如果该坐标比零小或者比三大或者坐标已被占用,
//电脑重新产生两个坐标,直到产生的坐标合理
//如果坐标合理,该坐标被赋值o,出循环
//打印
void ComputerPlay()
{
srand(time(NULL));
while (1)
{
int row = rand() % 3;
int col = rand() % 3;
if (row < ROW && row >= 0 && col >= 0 && col<COL && g_chess_board[row][col] == ' ')
{
g_chess_board[row][col] = 'o';
Print();
break;
}
}
}
完整代码如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
//三子棋
//1.定义一个3*3的全局变量二维数组,
char g_chess_board[ROW][COL];
//打印
void Print()
{
for (int row = 0; row < ROW; row++)
{
printf("%c|%c|%c \n", g_chess_board[row][0], g_chess_board[row][1], g_chess_board[row][2]);
if (row != 2)
{
printf("-|-|-\n");
}
}
}
//初始化
void Init()
{
for (int row = 0; row < ROW; row++)
for (int col = 0; col < COL; col++)
{
g_chess_board[row][col] = ' ';
}
Print();
}
//2.玩家落子,玩家的棋用x表示
//提示玩家落子
//判断玩家输入的坐标,如果坐标比三大或者比零小或者坐标位置已被占用,则提示玩家输入错误,
//玩家重新输入坐标,直到输入的坐标合理,
//如果输入的坐标合理,该坐标就被赋值x,跳出循环,
//打印
void UsePlay()
{
while (1)
{
printf("请输入一个坐标");
int row;
int col;
scanf("%d %d", &row, &col);
if (row > ROW -1|| row<0 || col>COL-1 || col < 0 || g_chess_board[row][col] != ' ')
{
printf("输入有误,请重新输入\n");
}
else
{
g_chess_board[row][col] = 'x';
Print();
break;
}
}
}
//3.判断玩家是否胜利
//如果有一行或者一列是x,或者对角线所在的位置是x,则玩家胜利,跳出循环
//否则继续执行下一条语句
int UseWin()
{
int row;
int col;
for (row = 0; row <ROW; row++)
{
if (g_chess_board[row][1] == g_chess_board[row][2] && g_chess_board[row][0] == g_chess_board[row][2] && g_chess_board[row][0] == 'x')
return 1;
}
for (col = 0; col <COL; col++)
{
if (g_chess_board[1][col] == g_chess_board[2][col] && g_chess_board[0][col] == g_chess_board[1][col] && g_chess_board[1][col] == 'x ')
return 1;
}
if (g_chess_board[0][0] == g_chess_board[1][1] && g_chess_board[0][0] == g_chess_board[2][2] &&g_chess_board[0][0] == 'x')
{
return 1;
}
if (g_chess_board[0][2] == g_chess_board[1][1] && g_chess_board[0][2] == g_chess_board[2][0] && g_chess_board[0][2] == 'x')
{
return 1;
}
return 0;
}
//4.和棋1
//如果棋盘是满的,那么那么最后一个落子的是玩家,所以在判断完玩家赢之前,就应该检查是否是和棋
//如果棋盘已满,则上方打成平局,和棋,跳出循环
int DrawChess()
{
int row;
int col;
for (row = 0; row < ROW; row++)
for (col = 0; col < COL; col++)
{
if (g_chess_board[row][col] == ' ')
{
return 0;
}
}
return 1;
}
//5.电脑落子,电脑落子用o表示
//产生两个随机数作为电脑落子的坐标
//判断电脑产生的坐标,如果该坐标比零小或者比三大或者坐标已被占用,
//电脑重新产生两个坐标,直到产生的坐标合理
//如果坐标合理,该坐标被赋值o,出循环
//打印
void ComputerPlay()
{
srand(time(NULL));
while (1)
{
int row = rand() % 3;
int col = rand() % 3;
if (row < ROW && row >= 0 && col >= 0 && col<COL && g_chess_board[row][col] == ' ')
{
g_chess_board[row][col] = 'o';
Print();
break;
}
}
}
//6.判断电脑是否胜利
//如果有一行或者一列是o,或者对角线所在的位置是o,则玩家胜利,跳出循环
//否则继续执行下一条语句
int ComputerWin()
{
int row;
int col;
for (row = 0; row <ROW; row++)
{
if (g_chess_board[row][1] == g_chess_board[row][2] && g_chess_board[row][0] == g_chess_board[row][2] && g_chess_board[row][0] == 'o')
return 1;
}
for (col = 0; col <COL; col++)
{
if (g_chess_board[1][col] == g_chess_board[2][col] && g_chess_board[0][col] == g_chess_board[1][col] && g_chess_board[1][col] == 'o ')
return 1;
}
if (g_chess_board[0][0] == g_chess_board[1][1] && g_chess_board[0][0] == g_chess_board[2][2] && g_chess_board[0][0] == 'o')
{
return 1;
}
if (g_chess_board[0][2] == g_chess_board[1][1] && g_chess_board[0][2] == g_chess_board[2][0] && g_chess_board[0][2] == 'o')
{
return 1;
}
return 0;
}
int main()
{
Init();
while (1)
{
UsePlay();
if (UseWin(g_chess_board))
{
printf("玩家胜利\n");
break;
}
if (DrawChess(g_chess_board))
{
printf("和棋\n");
break;
}
ComputerPlay();
if (ComputerWin(g_chess_board))
{
printf("电脑胜利\n");
break;
}
}
system("pause");
return 0;
}