写一个c++的贪吃蛇代码
时间: 2023-06-03 10:04:57 浏览: 180
C++ 贪吃蛇的代码
好的,我可以和您分享一个简单的 C 语言贪吃蛇代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDE 30 // 游戏场地宽度
#define HIGH 20 // 游戏场地高度
int snake_x, snake_y; // 蛇的坐标
int fruit_x, fruit_y; // 水果的坐标
int score; // 得分
int over; // 游戏结束标志
int direction; // 蛇前进的方向
char map[WIDE][HIGH]; // 场地地图
void draw_game_area() {
int i, j;
for (i = 0; i < HIGH; i++) {
for (j = 0; j < WIDE; j++) {
if (i == 0 || i == HIGH - 1 || j == 0 || j == WIDE - 1) { // 边界
map[j][i] = '#';
}
else {
map[j][i] = ' ';
}
}
}
}
void draw_snake() {
map[snake_x][snake_y] = 'O'; // 蛇头
map[snake_x - 1][snake_y] = 'o'; // 蛇身
}
void draw_fruit() {
map[fruit_x][fruit_y] = '@'; // 水果
}
void get_drop_position() {
do {
fruit_x = rand() % (WIDE - 2) + 1; // 生成 x 坐标
fruit_y = rand() % (HIGH - 2) + 1; // 生成 y 坐标
} while (map[fruit_x][fruit_y] != ' '); // 如果位置上已经有东西(蛇或者墙),则再次生成
}
void update_score() {
score += 10; // 得分加 10 分
}
void move_snake() {
// 记录原来的坐标,以便更新链表中各节点的坐标
int old_x = snake_x;
int old_y = snake_y;
// 移动蛇头位置
switch (direction) {
case 0:
snake_y--;
break;
case 1:
snake_x++;
break;
case 2:
snake_y++;
break;
case 3:
snake_x--;
break;
}
// 撞到墙,游戏结束
if (map[snake_x][snake_y] == '#') {
over = 1;
return;
}
// 撞到自己,游戏结束
if (map[snake_x][snake_y] == 'o') {
over = 1;
return;
}
// 吃到水果,更新得分并生成新的水果位置
if (map[snake_x][snake_y] == '@') {
update_score();
get_drop_position();
}
// 移动蛇身位置
int i, j;
for (i = 1; i < score / 10 + 1; i++) { // 因为初始化得分为 0,所以默认蛇身长度为 1
for (j = 0; j < WIDE * HIGH; j++) {
if (map[j % WIDE][j / WIDE] == 'o' && i == j / WIDE + 1) { // 更新第 i 节点的坐标
map[j % WIDE][j / WIDE] = ' ';
if (i == 1) {
map[old_x - 1][old_y] = 'o';
} else {
map[(j - WIDE) % WIDE][(j - WIDE) / WIDE] = 'o';
}
break;
}
}
}
}
void display_game() {
system("cls");
int i, j;
for (i = 0; i < HIGH; i++) {
for (j = 0; j < WIDE; j++) {
printf("%c", map[j][i]);
}
printf("\n");
}
printf("Score: %d\n", score);
}
void game_loop() {
while (!over) {
Sleep(100);
move_snake();
draw_game_area(); // 游戏绘图
draw_snake();
draw_fruit();
display_game(); // 游戏显示
}
}
int main() {
// 初始化
snake_x = WIDE / 2;
snake_y = HIGH / 2;
score = 0;
over = 0;
direction = 0; // 初始方向为向上(0 代表向上,1 代表向右,2 代表向下,3 代表向左)
// 绘制场地边界
draw_game_area();
// 初始化蛇头
draw_snake();
// 随机生成第一个水果
get_drop_position();
draw_fruit();
// 游戏主循环
game_loop();
printf("Game over! Press any key to exit.\n");
getch();
return 0;
}
```
上面的代码可能看起来比较长,但是是相对比较简单的贪吃蛇游戏代码。如果您有任何问题,欢迎随时向我提问!
阅读全文