贪吃蛇(wasd)
#include <iostream>
#include <deque>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <windows.h>
using namespace std;
// 游戏区域大小
const int WIDTH = 20;
const int HEIGHT = 20;
// 方向枚举
enum Direction { STOP = 0, LEFT, RIGHT, UP, DOWN };
// 蛇身节点结构
struct Point {
int x, y;
Point(int x = 0, int y = 0) : x(x), y(y) {}
};
class SnakeGame {
private:
deque<Point> snake; // 蛇身
Point food; // 食物位置
Direction dir; // 当前方向
bool gameOver; // 游戏结束标志
int score; // 分数
public:
SnakeGame() {
Reset();
}
void Reset() {
snake.clear();
snake.push_back(Point(WIDTH / 2, HEIGHT / 2)); // 初始蛇身在中心
PlaceFood();
dir = STOP;
gameOver = false;
score = 0;
}
void PlaceFood() {
srand(time(0));
do {
food.x = rand() % (WIDTH-4)+1;
food.y = HEIGHT/2+1;
} while (IsOnSnake(food.x, food.y));
}
bool IsOnSnake(int x, int y) {
for (const auto& p : snake) {
if (p.x == x && p.y == y)
return true;
}
return false;
}
void Input() {
if (_kbhit()) {
switch (_getch()) {
case 'a': if (dir != RIGHT) dir = LEFT; break;
case 'd': if (dir != LEFT) dir = RIGHT; break;
case 'w': if (dir != DOWN) dir = UP; break;
case 's': if (dir != UP) dir = DOWN; break;
case 'x': gameOver = true; break;
}
}
}
void Logic() {
if (dir == STOP) return;
Point head = snake.front();
Point newHead = head;
switch (dir) {
case LEFT: newHead.x--; break;
case RIGHT: newHead.x++; break;
case UP: newHead.y--; break;
case DOWN: newHead.y++; break;
}
// 检查边界碰撞
if (newHead.x < 0 || newHead.x >= WIDTH || newHead.y < 0 || newHead.y >= HEIGHT) {
gameOver = true;
return;
}
// 检查自身碰撞
if (IsOnSnake(newHead.x, newHead.y)) {
gameOver = true;
return;
}
snake.push_front(newHead);
// 检查是否吃到食物
if (newHead.x == food.x && newHead.y == food.y) {
score += 10;
PlaceFood();
} else {
snake.pop_back();
}
}
void Draw() {
system("cls"); // 清屏
// 绘制上边界
for (int i = 0; i < WIDTH + 2; i++)
cout << "#";
cout << endl;
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
if (x == 0)
cout << "墙"; // 左边界
if (x == food.x && y == food.y)
cout << "食"; // 物
else if (IsOnSnake(x, y))
cout << (x == snake.front().x && y == snake.front().y ? "头" : "蛇"); // 蛇头和蛇身
else
cout << "〇";
if (x == WIDTH - 1)
cout << "墙"; // 右边界
}
cout << endl;
}
// 绘制下边界
for (int i = 0; i < WIDTH + 2; i++)
cout << "墙";
cout << endl;
cout << "分数: " << score << endl;
}
void Run() {
while (!gameOver) {
Draw();
Input();
Logic();
Sleep(150); // 控制游戏速度
}
cout << "L! 你死了: " << score << endl;
}
};
int main() {
SnakeGame game;
game.Run();
return 0;
}
超级马里奥
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <windows.h>
#ifdef _WIN32
#define SET_COLOR(color) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color)
#define RESET_COLOR SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#else
#define SET_COLOR(color) std::cout << "\033[" << color << "m"
#define RESET_COLOR std::cout << "\033[0m"
#endif
using namespace std;
// 关卡数据结构
struct Level {
char map[20][40];
int mario_start_x;
int mario_start_y;
};
struct GlassState {
bool broken[20][40]; // 记录每个位置玻璃是否碎裂
};
// 全局变量
GlassState glassStates[10]; // 对应10个关卡
// 定义关卡
Level levels[10] = {
{ // 关卡1
{
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" c ",
" XXXXXXXXX XXX ",
" ",
" ",
"XXXXXXXXXXX XXXXXXXXXXXXXXXXXXX"
},
5, 15
},
{ // 关卡2
{
" ",
" ",
" ",
" ",
" ",
" ",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
" XXXXXXXXXXXXXXXX",
" XXXXXXXXXXXXX",
" c XXXXXXXXXXX",
" X XXXXXXXXXX",
" XXXX ",
" XXXXX ",
" XXXXXXXXX ",
" XXXXXXXXXXXX ",
" XXXXXXXXXXXXXXXX XXXXXXX",
" XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX"
},
5, 15
},
{ // 关卡3
{
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" c ",
" X X ",
" X X X ",
" X X X ",
" X X ",
"XXXXXXXXXXXXXXXXXX XXXXXX XXXXXX X"
},
},
{ // 关卡4
{
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" c ",
"XOOXXXXXXXXOOOOOOXXXXOXXXOXXOXXOXXXOXXO"
},
5, 15
},
{ // 关卡5
{
" X",
" ",
" ",
" ",
" OXX",
" X",
" XXXX X",
" X",
" X",
" XXXXX",
" X",
" X",
" XXXXX X",
" X",
" XXXXX",
" XX X",
" c O c X",
" XXXX O XXXX X",
" O X",
"OOOXXXXXXXXOOOOOOXXXOXXXOOOOOOXXXXXXOOX"
},
5, 15
},
{ // 关卡6
{
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
" X",
" X",
" cX X",
" X X",
" XXXXXXXXXXXXXXXXXXXXXX X X",
" X X X",
" X X X",
" X X X",
"XXXXXXXXXXOXXX X X X",
" O DDDXXXXXXXXXXX X X",
" O X X X",
" O X X X",
" OXXX X X X",
" XXXX X X X",
" X X X",
" XXXXXXXX X X X",
" X X X",
" X Xc ",
"XXXXXXXXXXXOOOOOOOOXXXXXXXXXXXXXXOOXOXX"
},
5, 15
},
{ // 关卡7
{
"XXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXX X",
"XXXX XXXXXXXXXXXXXXXXXXXXXXX X",
"XXXX XXXXX X",
"XXXX X XXXXXXXXXXXXXXXXXXXXXOX",
"XXXX X XXXXXXXXXXXXXXXXXXXXXXXXXOX",
"XXXXXXX X OX",
"XXXXXXX XXXXXX XXXXXXXX XXXXXXXX XXOX",
"XXXXXXX XXXXXX XXXXXXXX XXXXXXXX XXOX",
"XXXX XXXXXX XXXXXXXX XXXXXXXX XXcX",
" XXXXXXXXX XXOX",
" XXXXXXXXX XXOX",
"c XXXXXXXXXXXXOXXXXXXXXXXXXXOXXXOXXOX",
"XX XXXXXXXXXXXXOXXXXXXXXXXXXXO X",
"XX XXXXXXXXXXXXOXXXXXXXXXXXXXOXXDDDXXX",
"XX X XXXXXXXXXXcXXXXXXXXXXXXX ",
"XX XX XXXXXXXXXXOXXXXXXXXXXXXXc ",
"XX XX XXXXXXXXXXOXXXXXXXXXXXXXXXXXXXXXX",
"XX X",
"XXJXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
5, 15
},
{ // 关卡8
{
" X",
" c X",
"XX XXXXXXXXXXXXXXXXXXXX XX X",
" XX XOOOOOOOOOOOOX",
" XX XOOOOOOODOOOOX",
" c XX X XOOODOOOOODOOX",
"OOX XX XXXXX X X XOOOOOOOOOOOOX",
"OOX X X XOOOOOOODODODX",
"ODX XDXX XXX XXXXXX XOOOOOOOOOOOOX",
"OXX XXXX X X XOOOOOOODODOOX",
"O X XX XX XXXOOOOOOXOODOOOOODDOOX",
"O X XX XXXOOOOOOXOOOOOOOODOOOX",
"O O XOOXX XXXDODOODXOOOOOOODOOOOX",
"DXXJ XXX XOO cXXXDOOOOOXOOOODOOOOOOOX",
"X X XOO XXXOXOODODOXODOOODOOOODOX",
"X XXXX XXXDDD XXXOXODOODOXOOOOOOOOOOOOX",
"X c OXOODODOXDOOOODDODOOOX",
"X XOXXXXXXXXXXOXXOXOOOOOOXOOOOOOOOOOOOX",
"X c XXcX ",
"XXDXXXXXXXXXXXXXXDXXXXXXXXXXXXXXXXXXXXX"
},
5,15
},
{ // 关卡9
{
" cX",
"XXXXDD XXXOODDDDDDDDDDDDDXXXXXXXXX",
" D X X",
" X X X",
" XXOOXJJDDOOXXXXOOXXXX XDX X D",
" X X X X D",
"XXXXXXXXXXXXXXX DX X XOD",
" XO OXO XJ JJJX X D",
" X X O X X XXOD",
" O XOX X X O D X DOD",
" XOOXOOX O c XX X D D D XOD",
" XO D XX D X X X D",
" X X X D X X X D",
"XOXOOX DODO XXX D XX D X X D",
" X O X O OX D XOX",
" D c JX O X O XcD X X X D",
" X D OO X D OccD X XOX",
" XO D XD OcccD X X XOX",
" D DD XccccD X ",
"XXDXDXDXDXDXXXXXXXOXXXXXXXXXXXXXXXXXXXX"
},
5,15
},
{ // 关卡10
{
"XXXXXXXX XXXXXXXXXXXXXXXX",
"XXXXXXXX X X",
"XXXXXX X X",
"XXXXXX XXDDXXXDDXXXOOX X GGGX X",
" X X G X X",
"c X XG X X",
"DOXXXXOXXDXXXXOXXDXD X X X X",
"XO X XXXXOXXXXX X X G X X",
"XODX X X X X X X",
"XOXX X XDOXXXXXXXXXX X X X X X",
"XOXX X XXOXXXXXXXXXX X X X X",
"XOX cX XX X X X X",
"XOX XX XXXXXXXXXXXXXJX X GX X",
"XOX X XXXXXXXXXX X G X X",
"XOX X JXcXXOXXXXXXXXXX X G X X",
"XOX X XXGXXOXXXXXXXXXX G X ",
"XOX XGXXGXXOXXXXXXXXXX X ",
"XOX XGXXGXXOXXXXXXXXXXOXXXXXXXXXXXXXXXD",
"X XGXXGXX cX",
"XXXJXGXXGXXXXXXXXXXXXXXXXXXXXXXXXXXXXDX"
},
5, 15
}
};
/*
{ // 关卡N
{
" X",
" ",
" ",
" ",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
" X",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
5, 15
}
{ // 关卡N
{
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
5, 15
}
*/
// 当前关卡索引
int current_level = 0;
// 马里奥位置
int mario_x = 5;
int mario_y = 15;
int lives = 100; // 生命数
bool game_over=false;
// 跳跃相关变量
bool is_jumping = false;
int jump_height = 0;
int MAX_JUMP_HEIGHT = 5;
// 重力模拟
void applyGravity() {
if (!is_jumping && mario_y < 19) {
char below_char = levels[current_level].map[mario_y + 1][mario_x];
// 如果是已碎裂的玻璃,视为可下落
if (below_char == 'G' && glassStates[current_level].broken[mario_y + 1][mario_x]){
below_char = ' ';
}
if (below_char == ' ' || below_char == 'O' || below_char == 'c'){
mario_y++;
}
}
}
// 跳跃处理
void handleJump() {
if(levels[current_level].map[mario_y+1][mario_x] == 'J'){
MAX_JUMP_HEIGHT=8;
}
if (is_jumping) {
if (jump_height < MAX_JUMP_HEIGHT) {
// 检查上方是否有障碍物
if (mario_y > 0 && (levels[current_level].map[mario_y - 1][mario_x] == ' '||levels[current_level].map[mario_y-1][mario_x] =='c')) {
mario_y--;
jump_height++;
} else {
// 撞到天花板,立即下落
is_jumping = false;
}
} else {
is_jumping = false;
}
} else if (mario_y < 19) {
applyGravity();
}
}
/**
* 检查死亡条件
* 判断马里奥是否掉出地图底部
*/
bool checkDeath() {
// 如果马里奥掉到地图最底部之外,则判定死亡
return mario_y >= 19||levels[current_level].map[mario_y+1][mario_x] == 'D';
}
/**
* 处理死亡逻辑
* 减少生命值,重置位置或结束游戏
*/
// 加载关卡
void loadLevel(int level_index) {
if (level_index >= 0 && level_index < 10) {
current_level = level_index;
mario_x = levels[current_level].mario_start_x;
mario_y = levels[current_level].mario_start_y;
is_jumping = false;
jump_height = 0;
// 初始化玻璃状态
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 40; j++) {
glassStates[current_level].broken[i][j] = false;
}
}
}
}
void handleDeath() {
system("cls");
lives--; // 生命值减1
cout << "\n啊哦!马里奥失去了一点生命值!剩余生命:" << lives << endl;
if (lives <= 0) {
// 生命耗尽,游戏结束
game_over = true;
cout << "游戏结束!按任意键退出..." << endl;
} else {
// 还有生命,重新开始当前关卡
cout << "按任意键重新开始关卡..." << endl;
_getch();
system("cls");
loadLevel(current_level); // 重新加载当前关卡
}
}
// 检查是否完成关卡
bool checkLevelComplete() {
// 简单的完成条件:到达屏幕右侧
return mario_x >= 38;
}
char last_frame[20][40]; // 保存上一帧的画面
//玻璃状态
int glassBreakTimer = 0;
const int GLASS_BREAK_DELAY = 8; // 10帧延迟,约1.25秒
void checkGlassCollision() {
// 每帧增加计时器
glassBreakTimer++;
// 只有当计时器达到延迟值时才检测碰撞
if (glassBreakTimer >= GLASS_BREAK_DELAY) {
glassBreakTimer = 0; // 重置计时器
// 检查脚下是否踩到玻璃
if (mario_y < 19 && levels[current_level].map[mario_y + 1][mario_x] == 'G') {
if (!glassStates[current_level].broken[mario_y + 1][mario_x]) {
glassStates[current_level].broken[mario_y + 1][mario_x] = true;
}
}
}
}
// 修改游戏循环中的绘制部分
void renderMap() {
// 先清除上一帧的马里奥位置
if (last_frame[mario_y][mario_x] == 'M') {
// 如果上一帧这个位置是马里奥,恢复为地图字符
COORD coord = {mario_x, mario_y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
// 绘制地图字符(使用正确的颜色)
char map_char = levels[current_level].map[mario_y][mario_x];
// 如果是已碎裂的玻璃,显示为空格
if (map_char == 'G' && glassStates[current_level].broken[mario_y][mario_x]) {
map_char = ' ';
}
if(map_char == 'c') SET_COLOR(14);
else if(map_char == 'X') SET_COLOR(7);
else if(map_char == 'O') SET_COLOR(11);
else if(map_char == 'D') SET_COLOR(12);
else if(map_char == 'J') SET_COLOR(10);
else if(map_char == 'G') SET_COLOR(15);
cout << map_char;
RESET_COLOR;
// 更新缓存为地图字符
last_frame[mario_y][mario_x] = map_char;
}
// 绘制当前帧
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 40; j++) {
char map_char = levels[current_level].map[i][j];
// 如果是玻璃且已碎裂,显示为空格
if (map_char == 'G' && glassStates[current_level].broken[i][j]) {
map_char = ' ';
}
char current_char = (i == mario_y && j == mario_x) ? 'M' : map_char;
// 只绘制有变化的位置
if (last_frame[i][j] != current_char) {
COORD coord = {j, i};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
// 绘制当前字符
if (i == mario_y && j == mario_x) {
SET_COLOR(6);
cout << 'M';
} else {
// 使用处理后的map_char
if(map_char == 'c') SET_COLOR(14);
else if(map_char == 'X') SET_COLOR(7);
else if(map_char == 'O') SET_COLOR(11);
else if(map_char == 'D') SET_COLOR(4);
else if(map_char == 'J') SET_COLOR(10);
else if(map_char == 'G') SET_COLOR(15);
cout << map_char;
}
RESET_COLOR;
// 更新缓存
last_frame[i][j] = current_char;
}
}
}
}
// 游戏主循环
void gameLoop() {
memset(last_frame, ' ', sizeof(last_frame));
while (true) {
// 1. 清除屏幕顶部信息区域
COORD info_coord = {0, 0};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), info_coord);
// 显示关卡信息
cout <<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"<<"关卡 " << (current_level + 1) << "/10 剩余生命" << lives << endl;
cout << "----------------------" << endl;
// 2. 使用双缓冲渲染地图
renderMap();
if (game_over) {
_getch();
return;
}
// 3. 检查死亡条件
if (checkDeath()) {
handleDeath();
// 死亡后需要重置上一帧缓存
memset(last_frame, ' ', sizeof(last_frame));
continue;
}
// 4. 检查关卡完成
if (checkLevelComplete()) {
// 清除信息区域显示完成信息
info_coord = {0, 0};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), info_coord);
cout << "恭喜完成关卡 " << (current_level + 1) << "!" << endl;
if (current_level < 9) {
system("cls");
cout << "按任意键进入下一关..." << endl;
_getch();
loadLevel(current_level + 1);
// 重置上一帧缓存
memset(last_frame, ' ', sizeof(last_frame));
} else {
system("cls");
cout << "恭喜通关所有关卡!按任意键退出..." << endl;
_getch();
return;
}
continue;
}
// 5. 处理跳跃和重力
handleJump();
// 6. 重置属性
if (levels[current_level].map[mario_y + 1][mario_x] == 'X') {
MAX_JUMP_HEIGHT = 5;
}
if (levels[current_level].map[mario_y][mario_x] == 'c') {
// 移除金币
levels[current_level].map[mario_y][mario_x] = ' ';
}
// 加玻璃碰撞检测
checkGlassCollision();
// 7. 处理输入
if (_kbhit()) {
char key = _getch();
switch (key) {
case 'a': // 左移
if (mario_x > 0 && (levels[current_level].map[mario_y][mario_x - 1] == ' ' || levels[current_level].map[mario_y][mario_x - 1] == 'c')) {
mario_x--;
}
break;
case 'd': // 右移
if (mario_x < 39 && (levels[current_level].map[mario_y][mario_x + 1] == ' ' || levels[current_level].map[mario_y][mario_x + 1] == 'c')) {
mario_x++;
}
break;
case 'w': // 跳跃
if (!is_jumping && mario_y < 19) {
if (levels[current_level].map[mario_y + 1][mario_x] != ' ') {
is_jumping = true;
jump_height = 0;
}
}
break;
case 'r': // 重新开始当前关卡
loadLevel(current_level);
memset(last_frame, ' ', sizeof(last_frame));
break;
case 'q': // 退出
return;
}
}
Sleep(125); // 适当调整帧率
}
}
int main() {
cout << "超级马里奥关卡游戏" << endl;
cout << "操作说明: W-跳跃, A-左移, D-右移, R-重新开始, Q-退出" << endl;
cout << "全体方块: X-平台, O-空气墙, D-岩浆, J-跳跃加强, G-玻璃" << endl;
cout << "全体物品: c-金币" << endl;
cout << "目标:到达每个关卡的右侧完成关卡" << endl;
cout << "按任意键开始游戏..." << endl;
_getch();
system("cls");
// ============= 新增:难度选择环节 =============
int difficulty = 0;
while (difficulty < 1 || difficulty > 5) {
system("cls");
cout << "========== 请选择游戏难度 ==========" << endl;
cout << "1. 简单模式 - 无限生命 (999)" << endl;
cout << "2. 普通模式 - 50 条命" << endl;
cout << "3. 中等模式 - 30 条命" << endl;
cout << "4. 困难模式 - 10 条命" << endl;
cout << "5. 地狱模式 - 1 条命" << endl;
cout << "===================================" << endl;
cout << "请输入数字 (1-5): ";
// 获取用户输入,并处理非数字输入
if (cin >> difficulty) {
if (difficulty!=1&&difficulty!=2&&difficulty!=3&&difficulty!=4&&difficulty!=5&&difficulty!=0) {
cout << "输入无效,请输入1到5之间的数字。按任意键继续..." << endl;
_getch();
difficulty = 0; // 重置以继续循环
}
}
}
// 根据难度设置初始生命值
switch (difficulty) {
case 1: // 简单
lives = 999;
break;
case 2: // 普通
lives = 50;
break;
case 3: // 中等
lives = 30;
break;
case 4: // 困难
lives = 10;
break;
case 5: // 地狱
lives = 1;
break;
}
// ============= 难度选择环节结束 =============
system("cls"); // 清除难度选择菜单
gameLoop(); // 进入主游戏循环
return 0;
}