c语言实现井字棋

发布于:2022-11-28 ⋅ 阅读:(260) ⋅ 点赞:(0)
  1. 前言
  2. 今天我们会用C语言实现三子棋。所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜。话不多说,我们开始吧。\n\n\n2. 准备工作\n我们可以在一个项目中创建三个文件,分别是:\n\ntest.c,测试游戏的逻辑。\ngame.c,游戏的实现。\ngame.h,函数声明,符号的定义。\n测试这个游戏时,我们玩一把肯定不过瘾,所以需要使用do while循环,每次可以选择继续玩或者退出游戏。先把大致的框架搭出来。\n\n#include \u003Cstdio.h>\n\nvoid menu()\n{\n\tprintf(“\n");\n\tprintf("******** 1. play \n");\n\tprintf("** 0. exit \n");\n\tprintf("\n");\n}\n\nint main()\n{\n\tint input = 0;\n\tdo\n\t{\n\t\tmenu();\n\t\tprintf(“请选择(1/0):>”);\n\t\tscanf("%d", &input);\n\t\tswitch (input)\n\t\t{\n\t\tcase 1:\n\t\t\tprintf(“三子棋\n”);\n\t\t\tbreak;\n\t\tcase 0:\n\t\t\tprintf(“退出游戏\n”);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tprintf(“选择错误\n”);\n\t\t\tbreak;\n\t\t}\n\t} while (input);\n\n\treturn 0;\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n\n\n当然,我们的游戏不可能只是打印“三子棋”这三个字这么简单,具体的实现我们会封装成一个函数,暂且取名为game。\n\n3. 使用二维数组存储下棋的数据\n当我们下三子棋的时候,需要把下棋的数据存起来。由于三子棋的棋盘是3×3的,我们就需要一个三行三列的数组来存储下棋的数据。char board[3][3] = { 0 };\n\n4. 初始化棋盘为全空格\n当我们还没开始下棋时,棋盘上应该啥都没有,但是真的是啥都没有吗?事实上,如果我们打印棋盘时,能打印出“没有棋子”的效果,数组里应该是全空格。所以,我们需要写一个函数,初始化棋盘为全空格。InitBoard(board, 3, 3);这个函数的声明,我们会放在game.h里。具体的实现,我们会放在game.c里。以下的函数同理。该函数的声明:void InitBoard(char board[3][3], int row, int col);(以下的函数均省略声明)。该函数的实现,只需遍历这个二维数组,全部赋值为空格。\n\nvoid InitBoard(char board[3][3], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\tint j = 0;\n\t\tfor (; j \u003C col; ++j)\n\t\t{\n\t\t\tboard[i][j] = ’ ';\n\t\t}\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n有没有发现,这个程序中,到处都要用到数组“三行三列”这个特点。如果我们想要改变这一点,比如改成五行五列,就需要改很多地方,非常麻烦。怎么解决这个问题呢?我们可以在game.h里定义两个常量ROW和COL,这样每次只需要改变#define后的值就行了。\n\n#define ROW 3\n#define COL 3\n1\n2\n这样以上出现的所有3都可以用ROW和COL替代了(此处省略)。注意:如果想使用game.h里的符号,我们需要在game.c和test.c里引用这个头文件。引用自己写的头文件要用双引号。#include “game.h"而对于其他头文件如stdio.h,我们不需要在game.c和test.c里包含两次,只需在game.h里包含就行了。\n\n5. 打印棋盘\n我们初始化棋盘后,会想要看一看棋盘长啥样,所以接下来写一个打印棋盘的函数DisplayBoard(board, ROW, COL);\n如果你认为打印出数组的数据就行了,从而这样写:\n\nvoid DisplayBoard(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\tint j = 0;\n\t\tfor (; j \u003C col; ++j)\n\t\t{\n\t\t\tprintf(”%c", board[i][j]);\n\t\t}\n\t\tprintf("\n");\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n实际运行时,你会发现,打印了,但没完全打印。\n\n事实上,此时打印的是一堆空格,非常难看。如果我们想打印得好看点,可以考虑加上一些横向和竖向的分割。比如我设想了这样一种打印的效果:\n\n | | \n—|---|—\n | | \n—|---|—\n | | \n1\n2\n3\n4\n5\n假设把\n\n | | \n—|---|—\n1\n2\n当成一组,总共需要打印3组,为什么呢?因为有3行。\n每一组里面,又分为数据行和分割行。我们需要先打印数据行,再打印分割行。\n\n | | // 数据行\n—|---|— // 分割行\n1\n2\n所以一个简单的想法是这么写:\n\nvoid DisplayBoard(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\t// 打印数据\n\t\tprintf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);\n\t\t// 打印分割的行\n\t\tprintf("—|---|—\n");\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n效果如下:\n\n我们发现多打印了一行分割行,所以打印分割行时要加一条判断,不是最后一行才打印分割行。\n\nif (i \u003C row - 1)\n\tprintf("—|---|—\n");\n1\n2\n这样子打印就好看多了。\n\n\n\n但是这么写的话,就相当于,一行一定要打印3列,后面就没有改变的可能了。比如我把ROW和COL都改成5,效果如下:\n\n所以这种写法还是不够好。最好的写法是,再用一层循环控制列的打印。比如对于数据行:\n\n | | \n1\n我们可以把\n\n | \n1\n当成一组数据,打印三组,最后一组就不用加上|了(同上一种写法用一个if语句来控制)。\n对于分割行\n\n—|---|—\n1\n我们可以把\n\n—|\n1\n当成一组数据,打印三组,最后一组就不用加上|了(还是用if语句来控制)。\n实现如下:\n\nvoid DisplayBoard(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\t// 打印数据\n\t\tint j = 0;\n\t\tfor (; j \u003C col; ++j)\n\t\t{\n\t\t\tprintf(" %c “, board[i][j]);\n\t\t\tif (j \u003C col - 1)\n\t\t\t\tprintf(”|");\n\t\t}\n\t\tprintf("\n");\n\t\t// 打印分割的行\n\t\tif (i \u003C row - 1)\n\t\t{\n\t\t\tfor (j = 0; j \u003C col; ++j)\n\t\t\t{\n\t\t\t\tprintf("—");\n\t\t\t\tif (j \u003C col - 1)\n\t\t\t\t\tprintf("|");\n\t\t\t}\n\t\t\tprintf("\n");\n\t\t}\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n效果也没问题:\n\n若把ROW和COL改成10,打印出来的效果如下:\n\n这样写出来的代码就比较通用,具有比较强的可维护性。\n\n6. 玩家下棋\n接下来写玩家下棋的函数。player_move(board, ROW, COL);\n先让玩家输入坐标,若x和y都在1到3之间,则输入的坐标合法,在数组对应的位置是board[x-1][y-1],若该位置仍然是空格,则这个位置没有被下过,就把数组的这个元素改成。由于若玩家输入的坐标非法或者被占用时,需要重新输入,故需要一个循环。\n\nvoid player_move(char board[ROW][COL], int row, int col)\n{\n\tint x = 0;\n\tint y = 0;\n\tprintf(“玩家下棋\n”);\n\twhile (1)\n\t{\n\t\tprintf(“请输入坐标:>”);\n\t\tscanf("%d %d", &x, &y);\n\t\tif (x >= 1 && x \u003C= row && y >= 1 && y \u003C= col)\n\t\t{\n\t\t\t// 下棋\n\t\t\tif (board[x - 1][y - 1] == ’ ')\n\t\t\t{\n\t\t\t\tboard[x - 1][y - 1] = '’;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tprintf(“该坐标被占用,请重新输入\n”);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tprintf(“坐标非法,请重新输入\n”);\n\t\t}\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n玩家下棋后再把棋盘打印一下DisplayBoard(board, ROW, COL);效果如下:\n\n\n7. 电脑下棋\n玩家下完棋后就轮到电脑下棋computer_move(board, ROW, COL);\n我们让电脑随机下棋,只需生成两个随机的坐标x和y,若该位置是空格,就下在这个位置,如果是空格,那就再次产生随机坐标,可见,这也需要一个循环来实现。\n\nvoid computer_move(char board[ROW][COL], int row, int col)\n{\n\tint x = 0;\n\tint y = 0;\n\n\tprintf(“电脑下棋\n”);\n\twhile (1)\n\t{\n\t\tx = rand() % row; // 0~2\n\t\ty = rand() % col; // 0~2\n\t\tif (board[x][y] == ’ ')\n\t\t{\n\t\t\tboard[x][y] = ‘#’;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n使用rand函数前需要使用srand函数来设置随机数生成器的起点。我们需要给srand函数传一个时间戳,这就要用到time函数。srand((unsigned int)time(NULL));使用rand和srand都需要引用头文件stdlib.h,使用time函数需要引用头文件time.h。\n我们用一个循环,就能实现玩家和电脑轮流下棋的效果。\n\nwhile (1)\n{\n\t// 玩家下棋\n\tplayer_move(board, ROW, COL);\n\tDisplayBoard(board, ROW, COL);\n\n\t// 电脑下棋\n\tcomputer_move(board, ROW, COL); // 随机下棋\n\tDisplayBoard(board, ROW, COL);\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n8. 判断输赢\n什么时候游戏就结束了呢?如果玩家赢了,或者电脑赢了,或者平局,游戏就结束了,否则游戏继续。\n我们来设计一个is_win函数来判断棋局是上面四种状态的哪一种。我们这么设计is_win函数的返回值:\n\n玩家赢 - ‘’\n电脑赢 - ‘#’\n平局 - ‘Q’\n继续 - ‘C’\n当棋局状态不是C时说明游戏结束了,就跳出循环,接着根据不同情况打印不同的结果。\n\nchar ret = 0;\nwhile (1)\n{\n\t// 玩家下棋\n\tplayer_move(board, ROW, COL);\n\tDisplayBoard(board, ROW, COL);\n\t// 判断输赢\n\tret = is_win(board, ROW, COL);\n\tif (ret != ‘C’)\n\t{\n\t\tbreak;\n\t}\n\t// 电脑下棋\n\tcomputer_move(board, ROW, COL); // 随机下棋\n\tDisplayBoard(board, ROW, COL);\n\tret = is_win(board, ROW, COL);\n\tif (ret != ‘C’)\n\t{\n\t\tbreak;\n\t}\n}\nif (ret == '’)\n{\n\tprintf(“玩家赢\n”);\n}\nelse if (ret == ‘#’)\n{\n\tprintf(“电脑赢\n”);\n}\nelse\n{\n\tprintf(“平局\n”);\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n如何实现is_win函数呢?只需判断每行,每列,每条对角线是否有三个同样的棋子就行了。\n先判断行(由于玩家赢和电脑赢都是返回对应的棋子——和#,所以直接把对应的数组元素返回就行了。):\n\nint i = 0;\nfor (; i \u003C row; ++i)\n{\n\tif (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ’ ')\n\t{\n\t\treturn board[i][1];\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n8\n判断列同理:\n\nfor (i = 0; i \u003C col; ++i)\n{\n\tif (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ’ ')\n\t{\n\t\treturn board[1][i];\n\t}\n}\n1\n2\n3\n4\n5\n6\n7\n最后判断对角线:\n\nif (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ’ ')\n{\n\treturn board[1][1];\n}\nif (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ’ ')\n{\n\treturn board[1][1];\n}\n1\n2\n3\n4\n5\n6\n7\n8\n如果有人赢了,在前面的代码中就会返回。如果没人赢,再来判断是否平局。如果棋盘没有空格了,那就是平局。我们可以写一个is_full函数来判断棋盘是否满了。如果满了就返回1,没满就返回0。\n\nif (is_full(board, row, col) == 1)\n{\n\treturn ‘Q’;\n}\n1\n2\n3\n4\n由于is_full函数只是写给is_win函数的,只需要在game.c这个文件内使用,所以加上static。具体的实现,只需要遍历数组,若发现空格,说明棋盘没满,就返回0,否则返回1。\n\nstatic int is_full(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\tint j = 0;\n\t\tfor (; j \u003C col; ++j)\n\t\t{\n\t\t\tif (board[i][j] == ’ ')\n\t\t\t{\n\t\t\t\treturn 0; // 没有满\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 1; // 满了\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n而如果没人赢,也不是平局,则游戏继续,return ‘C’;即可。\n\n9. 效果展示\n写到这,我们就把三子棋程序写完啦。接下来看看效果:\n玩家赢:\n\n电脑赢:\n\n平局:\n\n\n10. 完整代码\n下面是完整的代码:\ngame.h\n\n#pragma once\n\n#include \u003Cstdio.h>\n#include \u003Cstdlib.h>\n#include \u003Ctime.h>\n\n#define ROW 3\n#define COL 3\n\n// 初始化棋盘\nvoid InitBoard(char board[ROW][COL], int row, int col);\n\n// 打印棋盘\nvoid DisplayBoard(char board[ROW][COL], int row, int col);\n\n// 玩家下棋\nvoid player_move(char board[ROW][COL], int row, int col);\n\n// 电脑下棋\nvoid computer_move(char board[ROW][COL], int row, int col);\n\n// 判断输赢\nchar is_win(char board[ROW][COL], int row, int col);\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\ngame.c\n\n#define _CRT_SECURE_NO_WARNINGS 1\n\n#include “game.h”\n\nvoid InitBoard(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\tint j = 0;\n\t\tfor (; j \u003C col; ++j)\n\t\t{\n\t\t\tboard[i][j] = ’ ';\n\t\t}\n\t}\n}\n\n//void DisplayBoard(char board[ROW][COL], int row, int col)\n//{\n//\tint i = 0;\n//\tfor (; i \u003C row; ++i)\n//\t{\n//\t\tint j = 0;\n//\t\tfor (; j \u003C col; ++j)\n//\t\t{\n//\t\t\tprintf("%c", board[i][j]);\n//\t\t}\n//\t\tprintf("\n");\n//\t}\n//}\n\n//void DisplayBoard(char board[ROW][COL], int row, int col)\n//{\n//\tint i = 0;\n//\tfor (; i \u003C row; ++i)\n//\t{\n//\t\t// 打印数据\n//\t\tprintf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);\n//\t\t// 打印分割的行\n//\t\tif (i \u003C row - 1)\n//\t\t\tprintf("—|---|—\n");\n//\t}\n//}\n\nvoid DisplayBoard(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\t// 打印数据\n\t\tint j = 0;\n\t\tfor (; j \u003C col; ++j)\n\t\t{\n\t\t\tprintf(" %c “, board[i][j]);\n\t\t\tif (j \u003C col - 1)\n\t\t\t\tprintf(”|");\n\t\t}\n\t\tprintf("\n");\n\t\t// 打印分割的行\n\t\tif (i \u003C row - 1)\n\t\t{\n\t\t\tfor (j = 0; j \u003C col; ++j)\n\t\t\t{\n\t\t\t\tprintf("—");\n\t\t\t\tif (j \u003C col - 1)\n\t\t\t\t\tprintf("|");\n\t\t\t}\n\t\t\tprintf("\n");\n\t\t}\n\t}\n}\n\nvoid player_move(char board[ROW][COL], int row, int col)\n{\n\tint x = 0;\n\tint y = 0;\n\tprintf(“玩家下棋\n”);\n\twhile (1)\n\t{\n\t\tprintf(“请输入坐标:>”);\n\t\tscanf("%d %d", &x, &y);\n\t\tif (x >= 1 && x \u003C= row && y >= 1 && y \u003C= col)\n\t\t{\n\t\t\t// 下棋\n\t\t\tif (board[x - 1][y - 1] == ’ ')\n\t\t\t{\n\t\t\t\tboard[x - 1][y - 1] = '’;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tprintf(“该坐标被占用,请重新输入\n”);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tprintf(“坐标非法,请重新输入\n”);\n\t\t}\n\t}\n}\n\nvoid computer_move(char board[ROW][COL], int row, int col)\n{\n\tint x = 0;\n\tint y = 0;\n\n\tprintf(“电脑下棋\n”);\n\twhile (1)\n\t{\n\t\tx = rand() % row; // 0~2\n\t\ty = rand() % col; // 0~2\n\t\tif (board[x][y] == ’ ')\n\t\t{\n\t\t\tboard[x][y] = ‘#’;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nstatic int is_full(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\tfor (; i \u003C row; ++i)\n\t{\n\t\tint j = 0;\n\t\tfor (; j \u003C col; ++j)\n\t\t{\n\t\t\tif (board[i][j] == ’ ')\n\t\t\t{\n\t\t\t\treturn 0; // 没有满\n\t\t\t}\n\t\t}\n\t}\n\treturn 1; // 满了\n}\n\nchar is_win(char board[ROW][COL], int row, int col)\n{\n\tint i = 0;\n\t// 判断行\n\tfor (; i \u003C row; ++i)\n\t{\n\t\tif (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ’ ')\n\t\t{\n\t\t\treturn board[i][1];\n\t\t}\n\t}\n\t// 判断列\n\tfor (i = 0; i \u003C col; ++i)\n\t{\n\t\tif (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ’ ')\n\t\t{\n\t\t\treturn board[1][i];\n\t\t}\n\t}\n\t// 对角线\n\tif (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ’ ')\n\t{\n\t\treturn board[1][1];\n\t}\n\tif (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ’ ')\n\t{\n\t\treturn board[1][1];\n\t}\n\n\t// 判断平局\n\tif (is_full(board, row, col) == 1)\n\t{\n\t\treturn ‘Q’;\n\t}\n\n\t// 继续\n\treturn ‘C’;\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\ntest.c\n\n#define _CRT_SECURE_NO_WARNINGS 1\n\n#include “game.h”\n\nvoid menu()\n{\n\tprintf("**\n");\n\tprintf("******** 1. play \n");\n\tprintf("** 0. exit \n");\n\tprintf("\n");\n}\n\nvoid game()\n{\n\tchar ret = 0;\n\t// 存放下棋的数据\n\tchar board[ROW][COL] = { 0 };\n\t// 初始化棋盘为全空格\n\tInitBoard(board, ROW, COL);\n\t// 打印棋盘\n\tDisplayBoard(board, ROW, COL);\n\n\twhile (1)\n\t{\n\t\t// 玩家下棋\n\t\tplayer_move(board, ROW, COL);\n\t\tDisplayBoard(board, ROW, COL);\n\t\t// 判断输赢\n\t\tret = is_win(board, ROW, COL);\n\t\tif (ret != ‘C’)\n\t\t{\n\t\t\tbreak;\n\t\t}\n\t\t// 电脑下棋\n\t\tcomputer_move(board, ROW, COL); // 随机下棋\n\t\tDisplayBoard(board, ROW, COL);\n\t\tret = is_win(board, ROW, COL);\n\t\tif (ret != ‘C’)\n\t\t{\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (ret == '’)\n\t{\n\t\tprintf(“玩家赢\n”);\n\t}\n\telse if (ret == ‘#’)\n\t{\n\t\tprintf(“电脑赢\n”);\n\t}\n\telse\n\t{\n\t\tprintf(“平局\n”);\n\t}\n\t//DisplayBoard(board, ROW, COL);\n}\n\n//\n// 什么时候,游戏就结束了\n// 玩家赢 - '’\n// 电脑赢 - ‘#’\n// 平局 - ‘Q’\n// 继续 - ‘C’\n//\nint main()\n{\n\tint input = 0;\n\tsrand((unsigned int)time(NULL));\n\tdo\n\t{\n\t\tmenu();\n\t\tprintf(“请选择(1/0):>”);\n\t\tscanf(”%d", &input);\n\t\tswitch (input)\n\t\t{\n\t\tcase 1:\n\t\t\tgame();\n\t\t\tbreak;\n\t\tcase 0:\n\t\t\tprintf(“退出游戏\n”);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tprintf(“选择错误\n”);\n\t\t\tbreak;\n\t\t}\n\t} while (input);\n\n\treturn 0;\n}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到