一、游戏成果
二、游戏规则
❶ 输出1进入页游戏
❷ 输出0退出页游戏
❸ 玩家先走
❹ 玩家落子是抉择棋盘的坐标地位
❺ 电脑是随机落子
❻ 如果电脑连了三子则提醒电脑赢了,抉择要不要持续游戏
三、实现游戏的代码思路
✪ 先构架游戏整体思路
void game(){ char ret = 0; //数组寄存棋盘信息 char board[ROW][COL] = { 0 };//二维数组的初始化并没有这么简略 int row = ROW; int col = COL; //1.初始化棋盘 //肯定要初始化 InitBoard(board, ROW, COL); //2.打印棋盘 DisplayBoard(board, ROW, COL); //3.玩游戏,开始下棋了 while (1) { //玩家下棋 PlayerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); //判断玩家是否赢了 ret = Iswin(board, ROW, COL); //如果不是游戏持续,那么就间接跳出循环 if (ret != 'D') { break; } //电脑下棋 ComputerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); //判断电脑是否赢了 ret = Iswin(board, ROW, COL); //如果不是游戏持续,那么就间接跳出循环 if (ret != 'D') { break; } } if (ret == 'X') printf("玩家赢了\n"); else if (ret == 'O') printf("电脑赢了\n"); else printf("平局\n");}
✪ 再分步写出相应所需函数
1、菜单函数
//函数的初始化//将棋盘所有元素都初始化为空格//空格为不在屏幕上显示其字符的字符(0也是)void InitBoard(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++) { board[i][j] = ' '; } }}
3、打印棋盘函数
//打印棋盘void DisplayBoard(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++) { 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"); } }}
4、用来存储玩家下棋信息的函数
//玩家下棋void PlayerMove(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; printf("玩家走\n"); while (1) { printf("请输出要下的坐标:"); scanf("%d%d", &x, &y); if (x >= 1 && y >= 1 && x <= row && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'X'; break; } else printf("该坐标被占用,请从新输出\n"); } else printf("该坐标不存在,请从新输出\n"); }}
5、电脑随机下棋的函数
//电脑随机下棋void ComputerMove(char board[ROW][COL], int row, int col){ printf("电脑走\n");//三子棋中电脑只有下在空棋盘上即可 int x = 0; int y = 0; while (1) { x = rand() % row;//将电脑走的随机值管制在棋盘中 y = rand() % col; if (x >= 1 && y >= 1 && x <= row && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x - 1][y - 1] = 'O'; break; } } }}
6、判断棋盘是否满了的函数
//返回1,示意棋盘满了//返回0,示意棋盘还没满int IsFull(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;//满了}
7、判断输赢和页游戏是否持续的函数
//判断输赢和游戏是否持续//判断输赢//4种状态//1.玩家赢了---'X'//2.电脑赢了---'O'//3.平局----'C'//4.游戏持续---'D'char Iswin(char board[ROW][COL], int row, int col){ int i = 0; //横3行 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][0];//Iswin间接完结 } } //列3行 for (i = 0; i < col; i++) { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ') { return board[0][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 (1 == IsFull(board, ROW, COL)) return 'C'; //持续游戏 return 'D';}
8、主函数管制游戏的过程
int main(){ int input = 0; srand((unsigned int)time(NULL));//扩充电脑走的随机值范畴 do { mnue(); printf("请输出(0/1):"); scanf("%d", &input); switch (input) { case 1: printf("三子棋游戏开始\n"); game(); break; case 0: printf("退出游戏\n"); break; defout: printf("输出谬误,请从新输出\n"); break; } } while (input); return 0;}