用c++写
时间: 2023-07-01 16:14:41 浏览: 38
好的,以下是一段基于 C++ 的贪吃蛇代码,你可以运行它来体验一下游戏:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <windows.h>
using namespace std;
// 定义游戏界面的大小
const int GAME_WIDTH = 30;
const int GAME_HEIGHT = 20;
// 定义蛇头和食物的符号
const char HEAD_SYMBOL = '@';
const char BODY_SYMBOL = '#';
const char FOOD_SYMBOL = '*';
// 定义颜色
const int WHITE_COLOR = 7;
const int RED_COLOR = 12;
// 定义蛇的初始位置和移动方向
int snake_head_x = GAME_WIDTH / 2;
int snake_head_y = GAME_HEIGHT / 2;
int snake_head_direction = 0; // 0:右,1:左,2:上,3:下
// 定义食物的初始位置
int food_x = 0;
int food_y = 0;
// 定义蛇的身体
int snake_body_x[GAME_WIDTH * GAME_HEIGHT];
int snake_body_y[GAME_WIDTH * GAME_HEIGHT];
int snake_length = 1;
// 定义游戏是否结束的标志
bool game_over = false;
// 定义函数:设置控制台光标的位置
void setCursorPosition(int x, int y) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD position = {x, y};
SetConsoleCursorPosition(handle, position);
}
// 定义函数:设置控制台文本颜色
void setTextColor(int color) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, color);
}
// 定义函数:初始化游戏界面
void initGame() {
// 隐藏控制台光标
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
// 初始化随机数种子
srand(time(NULL));
// 随机生成食物的位置
food_x = rand() % GAME_WIDTH;
food_y = rand() % GAME_HEIGHT;
// 将蛇的初始位置加入到身体数组中
snake_body_x[0] = snake_head_x;
snake_body_y[0] = snake_head_y;
}
// 定义函数:绘制游戏界面
void drawGame() {
// 清空控制台
system("cls");
// 绘制游戏界面
for (int i = 0; i < GAME_HEIGHT; i++) {
for (int j = 0; j < GAME_WIDTH; j++) {
if (i == 0 || i == GAME_HEIGHT - 1 || j == 0 || j == GAME_WIDTH - 1) {
setTextColor(RED_COLOR);
cout << '#';
} else if (i == snake_head_y && j == snake_head_x) {
setTextColor(WHITE_COLOR);
cout << HEAD_SYMBOL;
} else if (i == food_y && j == food_x) {
setTextColor(RED_COLOR);
cout << FOOD_SYMBOL;
} else {
bool is_body = false;
for (int k = 0; k < snake_length; k++) {
if (i == snake_body_y[k] && j == snake_body_x[k]) {
setTextColor(WHITE_COLOR);
cout << BODY_SYMBOL;
is_body = true;
break;
}
}
if (!is_body) {
cout << ' ';
}
}
}
cout << endl;
}
}
// 定义函数:处理游戏逻辑
void updateGame() {
// 处理键盘输入
if (_kbhit()) {
char key = _getch();
if (key == 'a' && snake_head_direction != 0) {
snake_head_direction = 1;
} else if (key == 'd' && snake_head_direction != 1) {
snake_head_direction = 0;
} else if (key == 'w' && snake_head_direction != 3) {
snake_head_direction = 2;
} else if (key == 's' && snake_head_direction != 2) {
snake_head_direction = 3;
}
}
// 根据移动方向更新蛇的位置
if (snake_head_direction == 0) {
snake_head_x++;
} else if (snake_head_direction == 1) {
snake_head_x--;
} else if (snake_head_direction == 2) {
snake_head_y--;
} else if (snake_head_direction == 3) {
snake_head_y++;
}
// 判断是否撞墙
if (snake_head_x == 0 || snake_head_x == GAME_WIDTH - 1 || snake_head_y == 0 || snake_head_y == GAME_HEIGHT - 1) {
game_over = true;
}
// 判断是否吃到了食物
if (snake_head_x == food_x && snake_head_y == food_y) {
// 生成新的食物
food_x = rand() % GAME_WIDTH;
food_y = rand() % GAME_HEIGHT;
// 增加蛇的长度
snake_length++;
// 将新的身体部位加入到身体数组中
snake_body_x[snake_length - 1] = snake_head_x;
snake_body_y[snake_length - 1] = snake_head_y;
}
// 更新蛇的身体
for (int i = snake_length - 1; i > 0; i--) {
snake_body_x[i] = snake_body_x[i - 1];
snake_body_y[i] = snake_body_y[i - 1];
}
snake_body_x[0] = snake_head_x;
snake_body_y[0] = snake_head_y;
// 判断是否撞到了自己的身体
for (int i = 1; i < snake_length; i++) {
if (snake_head_x == snake_body_x[i] && snake_head_y == snake_body_y[i]) {
game_over = true;
break;
}
}
}
// 定义函数:显示游戏结束信息
void showGameOver() {
setCursorPosition(GAME_WIDTH / 2 - 4, GAME_HEIGHT / 2);
setTextColor(RED_COLOR);
cout << "Game Over!" << endl;
}
int main() {
// 初始化游戏
initGame();
// 游戏循环
while (!game_over) {
// 绘制游戏界面
drawGame();
// 处理游戏逻辑
updateGame();
// 等待一段时间,控制游戏帧率
Sleep(100);
}
// 显示游戏结束信息
showGameOver();
return 0;
}
```
这段代码实现了一个基本的贪吃蛇游戏,你可以在其中尝试添加一些新的功能,比如计分、加速等,来让游戏更加丰富有趣。