# 以c语言为基础实现的简易三子棋

## 2、主函数的实现

int mian()
{
return 0;
}

void menu()//菜单
{
printf("*********************\n");
printf("*****1、进入游戏*****\n");
printf("*****0、退出游戏*****\n");
printf("*********************\n");
}

int main()
{
int input = 0;
do
{
scanf("%d", &input);//输入菜单选择是否进入游戏
switch (input)
{
case 1:
game();//游戏进入
break;
case 0:
printf("游戏已退出\n");
break;
default:
printf("选择错误请重新输入\n");
break;
}
} while (input);
return 0;
}

## 3、游戏的实现

void InitBoard(char board[ROW][COL], int row, int col)//棋盘初始化
{
int i = 0;
for (i = 0; i < row; i++)//利用for循环把数组board初始化成空格符
{
int j = 0;
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}

void DisplayBoard(char board[ROW][COL], int row, int col)//打印棋盘
{
int i = 0;
for (i = 0; i < row; i++)//利用for循环把数组board打印出来
{
int j = 0;
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
}
printf("\n");        //每次行打印完进行一次换行
}
}

void DisplayBoard(char board[ROW][COL], int row, int col)//打印棋盘
{
int i = 0;
for (i = 0; i < row; i++)//利用for循环把数组board打印出来
{
int j = 0;
for (j = 0; j < col ; j++)
{
printf(" %c ", board[i][j]);
if (j < col  - 1)
{
printf("|");
}
}
printf("\n");        //每次行打印完进行一次换行
if (i < row- 1)
{
for (j = 0; j < col ; j++)
{
printf("---");
if (j < col  - 1)
{
printf("|");
}
}
}
printf("\n");
}
}

player_move(board, ROW, COL);//玩家下棋

DisplayBoard(board, ROW, COL);//打印棋盘

void player_move(char board[ROW][COL], int row, int col)//玩家下棋
{
int x = 0;
int y = 0;
printf("玩家下棋\n");
printf("请玩家输入坐标\n");
while(1)
{
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf("坐标被占用，请重新输入\n");
}
}
else
{
printf("坐标无用，请重新输入\n");
}
}
}

computer_move(board, ROW, COL);//电脑下棋

DisplayBoard(board, ROW, COL);//打印棋盘

void computer_move(char board[ROW][COL], int row, int col)//电脑下棋
{
int x = 0;
int y = 0;
printf("电脑下棋\n");
while (1)
{
x = rand() % 3;    //利用随机数让电脑进行下棋
y = rand() % 3;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}

srand((unsigned int)time(NULL));//srand是随机数rand的初始化，这里利用电脑时间进行初始化

static int if_full(char board[ROW][COL], int row, int col)//判断是否满了
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
{
return 0;//没满
}
}
}
return 1;//满了
}
char if_win(char board[ROW][COL], int row, int col)//判断谁赢
{
int i = 0;
for (i = 0; i < row; i++)//判断行
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
{
return board[i][1];
}
}
for (i = 0; i < col; i++)//判断列
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
{
return board[1][i];
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')//判断斜线
{
return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')//判断斜线
{
return board[1][1];
}
if (if_full(board, ROW, COL) == 1)//判断是否满了
{
return 'Q';
}
return 'C';
}

void game()//游戏进入
{
char board[ROW][COL];//定义一个二维数组
char ret = 0;
InitBoard(board,ROW,COL);//棋盘初始化
DisplayBoard(board,ROW ,COL);//打印棋盘
srand((unsigned int)time(NULL));//srand是随机数rand的初始化，这里利用电脑时间进行初始化
while (1)
{
player_move(board, ROW, COL);//玩家下棋
DisplayBoard(board, ROW, COL);//打印棋盘
ret=if_win(board, ROW, COL);//判断谁赢
if (ret != 'C')
{
break;
}
computer_move(board, ROW, COL);//电脑下棋
DisplayBoard(board, ROW, COL);//打印棋盘
ret = if_win(board, ROW, COL);//判断谁赢
if (ret != 'C')
{
break;
}
}
if (ret == '*')
{
printf("玩家赢了\n");
}
else if (ret == '#')
{
printf("电脑赢了\n");
}
else
{
printf("平局\n");
}
}
//'C'继续
//'*'玩家赢了
//'#'电脑赢了
//'Q'平局

|
29天前
|
C语言
c语言简单三子棋
c语言简单三子棋
21 0
|
1月前
|

【C语言实战项目】三子棋游戏
【C语言实战项目】三子棋游戏
37 1
|
1月前
|
C语言
C语言之三子棋小游戏
C语言之三子棋小游戏
22 0
|
1月前
|
C语言

13 0
|
1月前
|

C语言设计三子棋
C语言设计三子棋
34 0
|
7天前
|

【️C语言-游戏设置】---三子棋（N满）
【️C语言-游戏设置】---三子棋（N满）
5 0
|
22天前
|
C语言

25 1
|
22天前
|

25 1
|
23天前
|

C语言”三子棋“升级版（模式选择+”模拟智能“下棋）
C语言”三子棋“升级版（模式选择+”模拟智能“下棋）
23 0
|
24天前
|

C语言实现三子棋
C语言实现三子棋
22 0