C++,帮我写一个贪吃蛇的游戏,要源代码
时间: 2024-04-30 13:18:01 浏览: 15
好的,以下是一个简单的贪吃蛇游戏的代码,希望对你有帮助。注意,这只是一个基本的版本,你可以根据需要进行修改和扩展。
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define MAX_X 20
#define MAX_Y 20
int score = 0; // 记录分数
int snake_length = 5; // 初始蛇长度
int snake_x[MAX_X * MAX_Y] = {0}; // 蛇身纵坐标
int snake_y[MAX_X * MAX_Y] = {0}; // 蛇身横坐标
int food_x = -1; // 食物纵坐标
int food_y = -1; // 食物横坐标
void init_game() {
// 初始化蛇头位置
snake_x[0] = MAX_X / 2;
snake_y[0] = MAX_Y / 2;
// 初始化蛇身位置
for (int i = 1; i < snake_length; i++) {
snake_x[i] = snake_x[i - 1] + 1;
snake_y[i] = snake_y[i - 1];
}
// 随机放置食物
srand((unsigned)time(NULL));
food_x = rand() % MAX_X;
food_y = rand() % MAX_Y;
}
void draw_map() {
system("cls"); // 清屏
// 画地图
for (int i = 0; i < MAX_X; i++) {
for (int j = 0; j < MAX_Y; j++) {
if (i == 0 || i == MAX_X - 1 || j == 0 || j == MAX_Y - 1) {
printf("#");
} else if (i == snake_x[0] && j == snake_y[0]) {
printf("@"); // 蛇头
} else if (i == food_x && j == food_y) {
printf("$"); // 食物
} else {
int flag = 0;
for (int k = 1; k < snake_length; k++) {
if (i == snake_x[k] && j == snake_y[k]) {
printf("*"); // 蛇身
flag = 1;
break;
}
}
if (!flag) {
printf(" ");
}
}
}
printf("\n");
}
// 显示分数
printf("score: %d\n", score);
}
void update_snake(int direction) {
// 更新蛇身位置
for (int i = snake_length - 1; i > 0; i--) {
snake_x[i] = snake_x[i - 1];
snake_y[i] = snake_y[i - 1];
}
// 更新蛇头位置
switch (direction) {
case 'w':
snake_x[0]--;
break;
case 's':
snake_x[0]++;
break;
case 'a':
snake_y[0]--;
break;
case 'd':
snake_y[0]++;
break;
}
}
void game_over() {
printf("Game over!\n");
printf("Your score is %d\n", score);
system("pause");
exit(0);
}
void check_collision() {
// 检查是否吃到食物
if (snake_x[0] == food_x && snake_y[0] == food_y) {
score += 10;
snake_length++;
food_x = rand() % MAX_X;
food_y = rand() % MAX_Y;
}
// 检查是否碰到墙壁
if (snake_x[0] == 0 || snake_x[0] == MAX_X - 1 || snake_y[0] == 0 || snake_y[0] == MAX_Y - 1) {
game_over();
}
// 检查是否碰到蛇身
for (int i = 1; i < snake_length; i++) {
if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i]) {
game_over();
}
}
}
int main() {
init_game();
while (1) {
draw_map();
if (_kbhit()) { // 检测是否有键盘输入
char ch = _getch(); // 获取键盘输入
if (ch == 'w' || ch == 's' || ch == 'a' || ch == 'd') {
update_snake(ch);
}
}
update_snake('w'); // 默认向上移动
check_collision();
Sleep(100); // 控制游戏速度
}
return 0;
}
```
希望这份代码对你有帮助!