目录
一、游戏介绍
二、游戏实现
一、游戏介绍
在3x3网格中与电脑进行下棋。玩家先下电脑再下,首先完成三子一线的为游戏赢家:
二、游戏实现
游戏选择: int main()
{
int input = 0;
while (1)
{
meanu();
printf("请选择:>");
scanf("%d", &input);
if (input == 1)
{
printf("开始游戏;n");
//game();
break;
}
else if(input == 0)
{
printf("退出游戏n");
break;
}
else
{
printf("选择错误,请重新选择n");
}
}
} 游戏菜单: void meanu()
{
printf("***************************n");
printf("******** 三子棋 ********n");
printf("***** 1.开始游戏 *******n");
printf("***** 0.退出游戏 *******n");
printf("***************************n");
} 游戏初始化: void init_borad(char arr[ROW][COL],int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
arr[i][j] = ' ';
}
}
} display_borad(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ",arr[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");
}
}
} 玩家进行游戏: void player_move(char arr[ROW][COL], int row, int col)
{
while (1)
{
int x = 0;
int y = 0;
printf("请输入你下棋的坐标:>");
scanf("%d,%d", &x, &y);
if ((x >= 1 && x <= 3) && (y >= 1 && y <= 3))
{
if (arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '*';
break;
}
else
{
printf("该坐标已被占用,请重新输入n");
}
}
else
{
printf("输入不合法,请重新输入n");
}
}
} 电脑进行游戏: void computer_move(char arr[ROW][COL], int row, int col)
{
printf("电脑下;>n");
int x = rand() % 3;
int y = rand() % 3;
while (1)
{
if (arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '#';
break;
}
}
} 游戏输赢判断: int is_full(char arr[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (arr[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
char is_win(char arr[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
{
return arr[i][0];
}
}
for (int j = 0; j < col; j++)
{
if (arr[0][j] == arr[1][j] && arr[1][j] == arr[2][j] && arr[0][j] != ' ')
{
return arr[0][j];
}
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
{
return arr[1][1];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
{
return arr[1][1];
}
if (is_full(arr,ROW,COL) == 1)
{
return 'Q';
}
return 'C';
} 7.主函数
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void meanu()
{
printf("***************************n");
printf("******** 三子棋 ********n");
printf("***** 1.开始游戏 *******n");
printf("***** 0.退出游戏 *******n");
printf("***************************n");
}
void game()
{
char ret = 0;
//初始化棋盘
char arr[ROW][COL] = { 0 };
init_borad(arr,ROW, COL);
//打印棋盘
display_borad(arr, ROW, COL);
while (1)
{
//玩家下棋
player_move(arr, ROW, COL);
display_borad(arr, ROW, COL);
ret = is_win(arr, ROW, COL);
if (ret != 'C')
{
break;
}
//电脑下棋
computer_move(arr, ROW, COL);
display_borad(arr, ROW, COL);
//判断结果(以'C'表示继续,以'#'表示电脑赢,以'*'表示玩家赢,以'Q'表示和局)
ret = is_win(arr, ROW, COL);
if (ret != 'C')
{
break;
}
}
if (ret == '*')
{
printf("玩家赢n");
}
else if (ret == '#')
{
printf("电脑赢n");
}
else
{
printf("平局n");
}
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
while (1)
{
meanu();
printf("请选择:>");
scanf("%d", &input);
if (input == 1)
{
printf("开始游戏;n");
game();
break;
}
else if(input == 0)
{
printf("退出游戏n");
break;
}
else
{
printf("选择错误,请重新选择n");
}
}
return 0;
}
int main()
{
int input = 0;
while (1)
{
meanu();
printf("请选择:>");
scanf("%d", &input);
if (input == 1)
{
printf("开始游戏;n");
//game();
break;
}
else if(input == 0)
{
printf("退出游戏n");
break;
}
else
{
printf("选择错误,请重新选择n");
}
}
} 游戏菜单: void meanu()
{
printf("***************************n");
printf("******** 三子棋 ********n");
printf("***** 1.开始游戏 *******n");
printf("***** 0.退出游戏 *******n");
printf("***************************n");
} 游戏初始化: void init_borad(char arr[ROW][COL],int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
arr[i][j] = ' ';
}
}
} display_borad(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ",arr[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");
}
}
} 玩家进行游戏: void player_move(char arr[ROW][COL], int row, int col)
{
while (1)
{
int x = 0;
int y = 0;
printf("请输入你下棋的坐标:>");
scanf("%d,%d", &x, &y);
if ((x >= 1 && x <= 3) && (y >= 1 && y <= 3))
{
if (arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '*';
break;
}
else
{
printf("该坐标已被占用,请重新输入n");
}
}
else
{
printf("输入不合法,请重新输入n");
}
}
} 电脑进行游戏: void computer_move(char arr[ROW][COL], int row, int col)
{
printf("电脑下;>n");
int x = rand() % 3;
int y = rand() % 3;
while (1)
{
if (arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '#';
break;
}
}
} 游戏输赢判断: int is_full(char arr[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (arr[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
char is_win(char arr[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
{
return arr[i][0];
}
}
for (int j = 0; j < col; j++)
{
if (arr[0][j] == arr[1][j] && arr[1][j] == arr[2][j] && arr[0][j] != ' ')
{
return arr[0][j];
}
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
{
return arr[1][1];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
{
return arr[1][1];
}
if (is_full(arr,ROW,COL) == 1)
{
return 'Q';
}
return 'C';
} 7.主函数
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void meanu()
{
printf("***************************n");
printf("******** 三子棋 ********n");
printf("***** 1.开始游戏 *******n");
printf("***** 0.退出游戏 *******n");
printf("***************************n");
}
void game()
{
char ret = 0;
//初始化棋盘
char arr[ROW][COL] = { 0 };
init_borad(arr,ROW, COL);
//打印棋盘
display_borad(arr, ROW, COL);
while (1)
{
//玩家下棋
player_move(arr, ROW, COL);
display_borad(arr, ROW, COL);
ret = is_win(arr, ROW, COL);
if (ret != 'C')
{
break;
}
//电脑下棋
computer_move(arr, ROW, COL);
display_borad(arr, ROW, COL);
//判断结果(以'C'表示继续,以'#'表示电脑赢,以'*'表示玩家赢,以'Q'表示和局)
ret = is_win(arr, ROW, COL);
if (ret != 'C')
{
break;
}
}
if (ret == '*')
{
printf("玩家赢n");
}
else if (ret == '#')
{
printf("电脑赢n");
}
else
{
printf("平局n");
}
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
while (1)
{
meanu();
printf("请选择:>");
scanf("%d", &input);
if (input == 1)
{
printf("开始游戏;n");
game();
break;
}
else if(input == 0)
{
printf("退出游戏n");
break;
}
else
{
printf("选择错误,请重新选择n");
}
}
return 0;
}



