一些练习 C 语言的小游戏
—
1. 猜数字游戏
描述:程序随机生成一个数字,玩家需要猜测这个数字,并根据提示(太高或太低)调整猜测,直到猜中为止。
功能点:
- 随机数生成 (
rand()
函数)。 - 循环和条件判断。
- 用户输入处理。
示例代码框架:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {int number, guess, attempts = 0;srand(time(0)); // 初始化随机数种子number = rand() % 100 + 1; // 生成 1 到 100 的随机数printf("猜数字游戏!我已经选好了一个 1 到 100 的数字。\n");do {printf("请输入你的猜测:");scanf("%d", &guess);attempts++;if (guess > number) {printf("太高了!\n");} else if (guess < number) {printf("太低了!\n");} else {printf("恭喜你,猜对了!你用了 %d 次。\n", attempts);}} while (guess != number);return 0;
}
2. 石头剪刀布
描述:玩家与计算机进行石头、剪刀、布的游戏,判断胜负。
功能点:
- 随机选择(计算机的选择)。
- 条件判断(胜负逻辑)。
- 用户输入处理。
示例代码框架:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {int player, computer;srand(time(0));printf("石头剪刀布游戏!\n");printf("请选择:1 - 石头, 2 - 剪刀, 3 - 布\n");scanf("%d", &player);computer = rand() % 3 + 1; // 计算机随机选择 1-3printf("你选择了:%d\n", player);printf("计算机选择了:%d\n", computer);if (player == computer) {printf("平局!\n");} else if ((player == 1 && computer == 2) || (player == 2 && computer == 3) || (player == 3 && computer == 1)) {printf("你赢了!\n");} else {printf("你输了!\n");}return 0;
}
3. 贪吃蛇(简化版)
描述:实现一个简单的贪吃蛇游戏,蛇在一个二维网格中移动,吃到食物后变长。
功能点:
- 二维数组表示游戏地图。
- 键盘输入控制方向。
- 游戏循环更新状态。
提示:
- 使用
#
表示墙壁,*
表示蛇,@
表示食物。 - 可以使用
ncurses
库(Linux)或conio.h
(Windows)处理键盘输入。
4. 井字棋(Tic-Tac-Toe)
描述:实现一个两人对战的井字棋游戏,玩家轮流在 3x3 的棋盘上放置标记(X 或 O),先连成一条线的玩家获胜。
功能点:
- 二维数组表示棋盘。
- 判断胜负逻辑。
- 用户输入验证。
示例代码框架:
#include <stdio.h>char board[3][3];
void initBoard() {for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {board[i][j] = ' ';}}
}void printBoard() {for (int i = 0; i < 3; i++) {printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);if (i < 2) printf("---+---+---\n");}
}int checkWin(char player) {// 检查行、列和对角线for (int i = 0; i < 3; i++) {if (board[i][0] == player && board[i][1] == player && board[i][2] == player) return 1;if (board[0][i] == player && board[1][i] == player && board[2][i] == player) return 1;}if (board[0][0] == player && board[1][1] == player && board[2][2] == player) return 1;if (board[0][2] == player && board[1][1] == player && board[2][0] == player) return 1;return 0;
}int main() {initBoard();char currentPlayer = 'X';int x, y, moves = 0;while (1) {printBoard();printf("玩家 %c,请输入坐标(x y):", currentPlayer);scanf("%d %d", &x, &y);if (board[x][y] != ' ') {printf("该位置已被占用,请重新输入。\n");continue;}board[x][y] = currentPlayer;moves++;if (checkWin(currentPlayer)) {printBoard();printf("玩家 %c 获胜!\n", currentPlayer);break;}if (moves == 9) {printBoard();printf("平局!\n");break;}currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';}return 0;
}
5. 扫雷游戏
描述:实现一个简单的扫雷游戏,玩家需要揭开格子并避免触雷。
功能点:
- 二维数组表示地雷分布。
- 地雷周围的数字计算。
- 游戏逻辑(揭开格子、标记地雷等)。
6. 迷宫游戏
描述:生成一个迷宫,玩家需要通过键盘输入控制角色走出迷宫。
功能点:
- 迷宫生成算法(如深度优先搜索)。
- 键盘输入控制角色移动。
- 碰撞检测。
总结
这些小游戏涵盖了 C 语言的基本语法(如循环、条件判断、数组等)以及一些进阶技巧(如二维数组操作、随机数生成、用户输入处理等)。