c++飞机大战碰撞检测代码
时间: 2023-08-13 11:46:03 浏览: 155
C++实现飞机大战
以下是一个简单的C++飞机大战游戏碰撞检测的示例代码:
```c++
struct Rect {
float x, y, width, height;
};
bool checkCollision(Rect rect1, Rect rect2) {
// 计算两个矩形的四条边的位置
float left1 = rect1.x;
float right1 = rect1.x + rect1.width;
float top1 = rect1.y;
float bottom1 = rect1.y + rect1.height;
float left2 = rect2.x;
float right2 = rect2.x + rect2.width;
float top2 = rect2.y;
float bottom2 = rect2.y + rect2.height;
// 矩形重叠的条件是两个矩形的四条边都有交集
if (left1 < right2 && right1 > left2 && top1 < bottom2 && bottom1 > top2) {
return true;
} else {
return false;
}
}
// 飞机类
class Plane {
public:
Rect rect; // 飞机所在的矩形
void update() {
// 更新飞机位置
}
void shoot() {
// 发射子弹
}
};
// 子弹类
class Bullet {
public:
Rect rect; // 子弹所在的矩形
void update() {
// 更新子弹位置
}
};
// 敌机类
class Enemy {
public:
Rect rect; // 敌机所在的矩形
void update() {
// 更新敌机位置
}
};
// 游戏循环中的碰撞检测
void checkCollisions(Plane& plane, std::vector<Bullet>& bullets, std::vector<Enemy>& enemies) {
// 检测飞机和敌机的碰撞
for (auto& enemy : enemies) {
if (checkCollision(plane.rect, enemy.rect)) {
// 碰撞发生,处理逻辑
}
}
// 检测子弹和敌机的碰撞
for (auto& bullet : bullets) {
for (auto& enemy : enemies) {
if (checkCollision(bullet.rect, enemy.rect)) {
// 碰撞发生,处理逻辑
}
}
}
}
```
在这个例子中,我们定义了一个Rect结构体来表示一个矩形的位置和大小,并定义了一个checkCollision函数来检查两个矩形是否相交。然后,我们定义了一个Plane类、一个Bullet类和一个Enemy类来表示游戏中的飞机、子弹和敌机。每个类都有一个rect成员变量来表示它所在的矩形。
在游戏循环中,我们调用checkCollisions函数来检测飞机、子弹和敌机之间的碰撞。我们使用嵌套的循环来遍历所有子弹和敌机的组合,并调用checkCollision函数来检查它们是否相交。如果发生碰撞,则可以在处理逻辑中删除子弹或敌机,或者扣除飞机的生命值。
阅读全文