一些练习 C 语言的小游戏
---
1. 猜数字游戏
描述:程序随机生成一个数字,玩家需要猜测这个数字,并根据提示(太高或太低)调整猜测,直到猜中为止。
功能点:
- 随机数生成 (
rand()
函数)。 - 循环和条件判断。
- 用户输入处理。
示例代码框架:
c
#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. 石头剪刀布
描述:玩家与计算机进行石头、剪刀、布的游戏,判断胜负。
功能点:
- 随机选择(计算机的选择)。
- 条件判断(胜负逻辑)。
- 用户输入处理。
示例代码框架:
c
#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-3
printf("你选择了:%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),先连成一条线的玩家获胜。
功能点:
- 二维数组表示棋盘。
- 判断胜负逻辑。
- 用户输入验证。
示例代码框架:
c
#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 语言的基本语法(如循环、条件判断、数组等)以及一些进阶技巧(如二维数组操作、随机数生成、用户输入处理等)。