在学习编程的过程中,很多初学者都会对“小游戏”产生浓厚的兴趣。而C语言作为一门基础且强大的编程语言,非常适合用来开发一些简单但有趣的迷你游戏。今天,我们就来分享一些经典的C语言小游戏代码,帮助你更好地理解C语言的逻辑结构与图形处理能力。
一、猜数字游戏
这是一个非常基础的小游戏,适合初学者练习输入输出、条件判断和循环语句。
```c
include
include
include
int main() {
int number, guess;
srand(time(0));
number = rand() % 100 + 1;
printf("欢迎来到猜数字游戏!\n");
printf("请输入一个1到100之间的数字:\n");
do {
scanf("%d", &guess);
if (guess > number) {
printf("太大了,再试一次:\n");
} else if (guess < number) {
printf("太小了,再试一次:\n");
}
} while (guess != number);
printf("恭喜你,猜对了!\n");
return 0;
}
```
二、俄罗斯方块(简化版)
虽然C语言本身不支持图形界面,但可以通过控制台实现简单的“文字版”俄罗斯方块。使用`conio.h`或`ncurses`库可以增强效果。
```c
include
include
include
void gotoxy(int x, int y) {
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
int main() {
int x = 40, y = 12;
char ch;
while (1) {
if (_kbhit()) {
ch = _getch();
if (ch == 'a') x--;
if (ch == 'd') x++;
if (ch == 'w') y--;
if (ch == 's') y++;
}
system("cls");
gotoxy(x, y);
printf("★");
Sleep(50);
}
return 0;
}
```
> 注意:以上代码需在Windows环境下运行,并且需要包含`windows.h`头文件。
三、井字棋(Tic-Tac-Toe)
这是一个经典的两人对战游戏,适合练习数组和函数调用。
```c
include
char board[3][3] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
void printBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf(" %c ", board[i][j]);
if (j < 2) printf("|");
}
printf("\n");
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;
}
// 检查列
for (int j = 0; j < 3; j++) {
if (board[0][j] == player && board[1][j] == player && board[2][j] == 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() {
int move = 0, choice, row, col;
char currentPlayer = 'X';
while (move < 9) {
printBoard();
printf("玩家 %c,请选择位置(1-9): ", currentPlayer);
scanf("%d", &choice);
switch (choice) {
case 1: row = 0; col = 0; break;
case 2: row = 0; col = 1; break;
case 3: row = 0; col = 2; break;
case 4: row = 1; col = 0; break;
case 5: row = 1; col = 1; break;
case 6: row = 1; col = 2; break;
case 7: row = 2; col = 0; break;
case 8: row = 2; col = 1; break;
case 9: row = 2; col = 2; break;
default:
printf("无效输入!\n");
continue;
}
if (board[row][col] != 'X' && board[row][col] != 'O') {
board[row][col] = currentPlayer;
move++;
if (checkWin(currentPlayer)) {
system("cls");
printBoard();
printf("玩家 %c 获胜!\n", currentPlayer);
return 0;
}
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
} else {
printf("该位置已被占用!\n");
}
}
system("cls");
printBoard();
printf("平局!\n");
return 0;
}
```
四、贪吃蛇(控制台版)
这是一个稍微复杂一点的游戏,涉及到方向控制、碰撞检测和动态刷新屏幕。
由于篇幅限制,这里仅展示部分核心代码:
```c
include
include
include
define WIDTH 20
define HEIGHT 20
int gameOver;
int x, y, fruitX, fruitY, score;
int tailX[100], tailY[100];
int nTail;
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
enum eDirection dir;
void Setup() {
gameOver = 0;
x = WIDTH / 2;
y = HEIGHT / 2;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
score = 0;
}
void Draw() {
system("cls");
for (int i = 0; i < WIDTH + 2; i++)
printf("");
printf("\n");
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (j == 0)
printf("");
if (i == y && j == x)
printf("O");
else if (i == fruitY && j == fruitX)
printf("F");
else {
int printTail = 0;
for (int k = 0; k < nTail; k++) {
if (tailX[k] == j && tailY[k] == i) {
printf("o");
printTail = 1;
}
}
if (!printTail)
printf(" ");
}
if (j == WIDTH - 1)
printf("");
}
printf("\n");
}
for (int i = 0; i < WIDTH + 2; i++)
printf("");
printf("\n");
printf("Score: %d\n", score);
}
void Input() {
if (_kbhit()) {
switch (_getch()) {
case 'a': dir = LEFT; break;
case 'd': dir = RIGHT; break;
case 'w': dir = UP; break;
case 's': dir = DOWN; break;
case 'x': gameOver = 1; break;
}
}
}
void Logic() {
int prevX = x, prevY = y;
switch (dir) {
case LEFT: x--; break;
case RIGHT: x++; break;
case UP: y--; break;
case DOWN: y++; break;
default: break;
}
if (x >= WIDTH || x < 0 || y >= HEIGHT || y < 0)
gameOver = 1;
if (x == fruitX && y == fruitY) {
score += 10;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
nTail++;
}
for (int i = 0; i < nTail; i++) {
int tempX = tailX[i], tempY = tailY[i];
tailX[i] = prevX;
tailY[i] = prevY;
prevX = tempX;
prevY = tempY;
}
}
int main() {
Setup();
while (!gameOver) {
Draw();
Input();
Logic();
Sleep(100);
}
return 0;
}
```
总结
通过这些小游戏的代码实践,你可以更深入地理解C语言的语法结构、数据类型、控制流以及基本的图形操作。如果你对图形界面感兴趣,还可以尝试使用`graphics.h`(在Turbo C中)或第三方库如`SDL`、`SFML`等进行更复杂的开发。
希望这篇“C语言小游戏代码大全”能为你提供灵感和帮助,祝你在编程的路上越走越远!