#include
#include <conio.h>
#include <windows.h>
#include
#include
// 定义游戏窗口的大小
const int WIDTH = 80;
const int HEIGHT = 20;
// 玩家的位置
int playerX = WIDTH / 2;
int playerY = HEIGHT - 1;
// 子弹的位置
int bulletX = -1;
int bulletY = -1;
// 游戏是否结束
bool gameOver = false;
// 敌人结构体
struct Enemy {
int x;
int y;
int moveSpeed; // 敌人的移动速度
int health; // 敌人的生命值
};
// 存储所有敌人
std::vector enemies;
// 当前关卡
int currentLevel = 1;
// 玩家等级和经验值
int playerLevel = 1;
int playerExp = 0;
const int expToNextLevel = 10; // 每级所需经验值
// 清屏函数
void clearScreen() {
HANDLE hOut;
COORD Position;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
Position.X = 0;
Position.Y = 0;
SetConsoleCursorPosition(hOut, Position);
}
// 绘制游戏界面
void draw() {
clearScreen();
std::cout << "Level: " << currentLevel << " | Player Level: " << playerLevel << " | Exp: " << playerExp << “/” << expToNextLevel << std::endl;
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
bool isDrawn = false;
if (x == playerX && y == playerY) {
std::cout << “A”; // 玩家
isDrawn = true;
}
for (const auto&enemy : enemies) {
if (x == enemy.x && y == enemy.y) {
std::cout << “E”; // 敌人
isDrawn = true;
break;
}
}
if (x == bulletX && y == bulletY) {
std::cout << “*”; // 子弹
isDrawn = true;
}
if (!isDrawn) {
std::cout << " ";
}
}
std::cout << std::endl;
}
}
// 处理输入
void input() {
if (_kbhit()) {
char ch = _getch();
switch (ch) {
case ‘a’:
if (playerX > 0) playerX–;
break;
case ‘d’:
if (playerX < WIDTH - 1) playerX++;
break;
case ’ ':
if (bulletY == -1) {
bulletX = playerX;
bulletY = playerY - 1;
}
break;
case ‘x’:
gameOver = true;
break;
}
}
}
// 初始化关卡
void initLevel() {
enemies.clear();
int enemyCount = currentLevel * 2; // 每个关卡敌人数量递增
for (int i = 0; i < enemyCount; ++i) {
Enemy newEnemy;
newEnemy.x = rand() % WIDTH;
newEnemy.y = 1;
newEnemy.moveSpeed = 1 + currentLevel / 2; // 关卡越高,移动速度越快
newEnemy.health = 1 + currentLevel / 3; // 关卡越高,生命值越高
enemies.push_back(newEnemy);
}
}
// 升级动画效果
void levelUpAnimation() {
const int animationFrames = 5;
const int frameDelay = 200; // 每帧之间的延迟(毫秒)
for (int i = 0; i < animationFrames; ++i) {
clearScreen();
if (i % 2 == 0) {
std::cout << "Level up! You are now level " << playerLevel << std::endl;
} else {
std::cout << " " << std::endl;
}
Sleep(frameDelay);
}
}
// 玩家升级处理
void checkLevelUp() {
while (playerExp >= expToNextLevel) {
playerExp -= expToNextLevel;
playerLevel++;
levelUpAnimation();
}
}
// 更新游戏逻辑
void update() {
// 子弹移动
if (bulletY != -1) {
bulletY–;
int enemiesHit = 0;
for (auto it = enemies.begin(); it != enemies.end(); ) {
if (bulletY == it->y && bulletX == it->x) {
// 击中敌人
it->health–;
if (it->health <= 0) {
it = enemies.erase(it);
playerExp++; // 消灭敌人获得经验值
checkLevelUp();
} else {
++it;
}
enemiesHit++;
if (enemiesHit >= playerLevel) { // 根据玩家等级决定子弹穿透数量
bulletX = -1;
bulletY = -1;
break;
}
} else {
++it;
}
}
if (bulletY < 0) {
bulletX = -1;
bulletY = -1;
}
}
// 敌人移动
for (auto& enemy : enemies) {
enemy.y++;
if (enemy.y == playerY && enemy.x == playerX) {
gameOver = true;
}
if (enemy.y >= HEIGHT) {
enemy.x = rand() % WIDTH;
enemy.y = 1;
}
}
// 检查是否通关
if (enemies.empty()) {
currentLevel++;
initLevel();
}
}
int main() {
srand(time(NULL));
initLevel();
while (!gameOver) {
draw();
input();
update();
Sleep(100); // 控制游戏速度
}
std::cout << "Game Over! You reached level " << currentLevel << " with player level " << playerLevel << std::endl;
return 0;