主页
搜索
最近更新
数据统计
申请密钥
系统公告
1
/
1
请查看完所有公告
植物大战僵尸代码
最后更新于 2025-07-31 10:42:20
作者
sunmingqian27
分类
个人记录
复制 Markdown
查看原文
删除文章
更新内容
#include <iostream> #include <vector> #include <cstdlib> #include <ctime> #include <conio.h> #include <windows.h> using namespace std; const int WIDTH = 20; const int HEIGHT = 5; class GameObject { protected: int x, y; int health; public: GameObject(int x, int y, int health) : x(x), y(y), health(health) {} virtual ~GameObject() {} virtual void update() = 0; virtual void draw() const = 0; int getX() const { return x; } int getY() const { return y; } int getHealth() const { return health; } void takeDamage(int damage) { health -= damage; } }; class Plant : public GameObject { public: Plant(int x, int y, int health) : GameObject(x, y, health) {} virtual void shoot() = 0; }; class Zombie : public GameObject { protected: int speed; public: Zombie(int x, int y, int health, int speed) : GameObject(x, y, health), speed(speed) {} void update() override { x -= speed; } }; class Peashooter : public Plant { public: Peashooter(int x, int y) : Plant(x, y, 50) {} void update() override {} void draw() const override { cout << "P"; } void shoot() override { // 射击逻辑 } }; class NormalZombie : public Zombie { public: NormalZombie(int x, int y) : Zombie(x, y, 100, 1) {} void draw() const override { cout << "Z"; } }; class Game { private: vector<Plant*> plants; vector<Zombie*> zombies; int sun; bool gameOver; void drawBorder() { system("cls"); for (int i = 0; i < WIDTH + 2; i++) cout << "#"; cout << endl; } void spawnZombie() { if (rand() % 100 < 5) { // 5% 概率生成僵尸 zombies.push_back(new NormalZombie(WIDTH - 1, rand() % HEIGHT)); } } public: Game() : sun(50), gameOver(false) { srand(time(0)); } ~Game() { for (auto p : plants) delete p; for (auto z : zombies) delete z; } void run() { while (!gameOver) { drawBorder(); // 绘制游戏区域 for (int y = 0; y < HEIGHT; y++) { cout << "#"; for (int x = 0; x < WIDTH; x++) { bool drawn = false; for (auto p : plants) { if (p->getX() == x && p->getY() == y) { p->draw(); drawn = true; break; } } for (auto z : zombies) { if (z->getX() == x && z->getY() == y) { z->draw(); drawn = true; break; } } if (!drawn) cout << " "; } cout << "#" << endl; } for (int i = 0; i < WIDTH + 2; i++) cout << "#"; cout << "\nSun: " << sun << endl; // 用户输入 if (_kbhit()) { char input = _getch(); if (input == 'p' && sun >= 50) { plants.push_back(new Peashooter(0, rand() % HEIGHT)); sun -= 50; } } // 更新游戏状态 spawnZombie(); for (auto z : zombies) z->update(); sun++; // 检查碰撞 for (auto z : zombies) { if (z->getX() <= 0) { gameOver = true; cout << "Zombies ate your brain!" << endl; } } Sleep(200); } } }; int main() { Game game; game.run(); return 0; }
正在渲染内容...
点赞
0
收藏
0