用c++面向对象的方法编程一个飞机大战游戏,要求分文件,用类来定义并标明注释
时间: 2024-04-21 14:28:02 浏览: 79
好的,下面是一个使用C++面向对象的方法编程的飞机大战游戏示例,包含多个文件和类的定义,每个类都有注释解释:
**main.cpp:**
```c++
#include "Game.h"
int main() {
Game game;
game.run();
return 0;
}
```
**Game.h:**
```c++
#pragma once
#include "Player.h"
#include "Enemy.h"
#include "Bullet.h"
class Game {
public:
Game();
~Game();
void run();
private:
void init();
void draw();
void input();
void update();
void checkCollision();
void gameOver();
Player player;
Enemy enemy;
Bullet bullet;
int score;
bool isOver;
};
```
**Game.cpp:**
```c++
#include "Game.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
const int width = 50; // 游戏画面宽度
const int height = 25; // 游戏画面高度
// 构造函数
Game::Game() : player(width / 2, height - 2), enemy(rand() % (width - 2) + 1, 1), bullet(player.getX(), player.getY() - 1), score(0), isOver(false) {}
// 析构函数
Game::~Game() {}
// 初始化游戏
void Game::init() {
player.reset(width / 2, height - 2);
enemy.reset(rand() % (width - 2) + 1, 1);
bullet.reset(player.getX(), player.getY() - 1);
score = 0;
isOver = false;
}
// 绘制游戏画面
void Game::draw() {
system("cls");
for (int i = 0; i < width + 2; i++) {
cout << ".";
}
cout << endl;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (j == 0 || j == width - 1) {
cout << "|";
} else if (i == player.getY() && j == player.getX()) {
cout << "^";
} else if (i == enemy.getY() && j == enemy.getX()) {
cout << "V";
} else if (i == bullet.getY() && j == bullet.getX()) {
cout << "*";
} else {
cout << " ";
}
}
cout << endl;
}
for (int i = 0; i < width + 2; i++) {
cout << ".";
}
cout << endl;
cout << "Score: " << score << endl;
}
// 处理用户输入
void Game::input() {
if (_kbhit()) {
switch (_getch()) {
case 'a':
player.moveLeft();
bullet.setX(player.getX());
break;
case 'd':
player.moveRight();
bullet.setX(player.getX());
break;
case 'w':
bullet.shoot();
break;
case 'x':
isOver = true;
break;
}
}
}
// 更新游戏状态
void Game::update() {
enemy.moveDown();
bullet.moveUp();
checkCollision();
// 敌机飞出屏幕
if (enemy.getY() >= height - 1) {
enemy.reset(rand() % (width - 2) + 1, 1);
}
// 游戏结束
if (player.isDead()) {
isOver = true;
}
}
// 检测碰撞
void Game::checkCollision() {
// 子弹击中敌机
if (bullet.getX() == enemy.getX() && bullet.getY() == enemy.getY()) {
enemy.reset(rand() % (width - 2) + 1, 1);
bullet.reset(player.getX(), player.getY() - 1);
score++;
}
}
// 游戏结束
void Game::gameOver() {
system("cls");
cout << "Game Over!" << endl;
cout << "Your score is: " << score << endl;
cout << "Press any key to continue..." << endl;
_getch();
}
// 运行游戏
void Game::run() {
while (!isOver) {
draw();
input();
update();
Sleep(50);
}
gameOver();
}
```
**Player.h:**
```c++
#pragma once
class Player {
public:
Player(int x, int y);
~Player();
int getX();
int getY();
void moveLeft();
void moveRight();
bool isDead();
void reset(int x, int y);
private:
int x;
int y;
int health;
};
```
**Player.cpp:**
```c++
#include "Player.h"
// 构造函数
Player::Player(int x, int y) : x(x), y(y), health(1) {}
// 析构函数
Player::~Player() {}
// 获取X坐标
int Player::getX() {
return x;
}
// 获取Y坐标
int Player::getY() {
return y;
}
// 左移
void Player::moveLeft() {
if (x > 1) {
x--;
}
}
// 右移
void Player::moveRight() {
if (x < 48) {
x++;
}
}
// 是否死亡
bool Player::isDead() {
return health <= 0;
}
// 重置位置
void Player::reset(int x, int y) {
this->x = x;
this->y = y;
health = 1;
}
```
**Enemy.h:**
```c++
#pragma once
class Enemy {
public:
Enemy(int x, int y);
~Enemy();
int getX();
int getY();
void moveDown();
void reset(int x, int y);
private:
int x;
int y;
};
```
**Enemy.cpp:**
```c++
#include "Enemy.h"
// 构造函数
Enemy::Enemy(int x, int y) : x(x), y(y) {}
// 析构函数
Enemy::~Enemy() {}
// 获取X坐标
int Enemy::getX() {
return x;
}
// 获取Y坐标
int Enemy::getY() {
return y;
}
// 下落
void Enemy::moveDown() {
y++;
}
// 重置位置
void Enemy::reset(int x, int y) {
this->x = x;
this->y = y;
}
```
**Bullet.h:**
```c++
#pragma once
class Bullet {
public:
Bullet(int x, int y);
~Bullet();
int getX();
int getY();
void setX(int x);
void moveUp();
void shoot();
void reset(int x, int y);
private:
int x;
int y;
bool isShoot;
};
```
**Bullet.cpp:**
```c++
#include "Bullet.h"
// 构造函数
Bullet::Bullet(int x, int y) : x(x), y(y), isShoot(false) {}
// 析构函数
Bullet::~Bullet() {}
// 获取X坐标
int Bullet::getX() {
return x;
}
// 获取Y坐标
int Bullet::getY() {
return y;
}
// 设置X坐标
void Bullet::setX(int x) {
this->x = x;
}
// 上升
void Bullet::moveUp() {
if (isShoot) {
y--;
}
}
// 射击
void Bullet::shoot() {
isShoot = true;
}
// 重置位置
void Bullet::reset(int x, int y) {
this->x = x;
this->y = y;
isShoot = false;
}
```
这个示例中,将游戏分为了四个类,分别是 `Game`、`Player`、`Enemy` 和 `Bullet`。其中 `Game` 类负责游戏的管理和主循环,其他三个类分别对应游戏中的玩家、敌机和子弹。每个类都包含了它们自己的状态和方法,并且使用头文件和源文件分离的方式进行了组织。
阅读全文