一、游戏效果二、游戏规则❶ 输入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、菜单函数 void mnue() { printf("-------------------------------\n"); printf("-------------------------------\n"); printf("----1.play 0.exit--------\n"); printf("-------------------------------\n"); printf("-------------------------------\n"); } ———————— 2、初始化棋盘函数 //函数的初始化 //将棋盘所有元素都初始化为空格 //空格为不在屏幕上显示其字符的字符(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; } |
|