c++飞机大战+备注(代码免费复制)

   

   今天我亲自运行了一下,没什么问题,大家可以看一下,按wasd移动,按k发射子弹

    代码如下:

    #include<windows.h>
    #include<iostream> 
    using namespace std;
    typedef struct Frame
    {
    	COORD position[2];          
    	//  COORD 是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。
    	// 其定义为:
    	// typedef struct _COORD {
    	//         SHORT X; 
    	//         SHORT Y;
        //       } COORD;
     
    	int flag;
     
    }Frame;
     
     
     
     
    class Game
     
    {
     
    public:
     
    	COORD position[10];
     
    	COORD bullet[10];
     
    	Frame enemy[8];
     
    	int score;
     
    	int rank;
     
    	int rankf;
     
    	string title;
     
    	int flag_rank;
     
     
    	// 构造函数
    	Game();        
     
     
     
    	//初始化所有
     
    	void initPlane();
     
    	void initBullet();
     
    	void initEnemy();
     
     
     
    	//初始化其中一个
     
    	//void initThisBullet( COORD );
     
    	//void initThisEnemy( Frame );
     
     
     
    	void planeMove(char);
     
    	void bulletMove();
     
    	void enemyMove();
     
     
     
    	//填充所有
     
    	void drawPlane();
     
    	void drawPlaneToNull();
     
    	void drawBullet();
     
    	void drawBulletToNull();
     
    	void drawEnemy();
     
    	void drawEnemyToNull();
     
     
     
    	//填充其中一个
     
    	void drawThisBulletToNull(COORD);
     
    	void drawThisEnemyToNull(Frame);
     
     
    	void Pause();
     
    	void Playing();
     
    	void judgePlane();
     
    	void judgeEnemy();
     
    	void Shoot();
     
    	void GameOver();
     
    	void printScore();
     
    };
     
     
     
     
    void SetPos(COORD a);
    void SetPos(int i, int j);
    void HideCursor();
    void drawRow(int y, int x1, int x2, char ch);
    void drawRow(COORD a, COORD b, char ch);
    void drawCol(int x, int y1, int y2, char ch);
    void drawCol(COORD a, COORD b, char ch);
    void drawFrame(COORD a, COORD  b, char row, char col);
    void drawFrame(int x1, int y1, int x2, int y2, char row, char col);
    void drawFrame(Frame frame, char row, char col);
    void drawPlaying();
    int random(int a, int b);
    COORD random(COORD a, COORD b);
    bool  judgeCoordInFrame(Frame frame, COORD spot);
    void printCoord(COORD a);
    void printFrameCoord(Frame a);
    int drawMenu();
     
     




    #include<string>
    #include<conio.h>
     
    using namespace std;
     
     
    // 定义构造函数
    // 构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。
    // 构造函数的工作是保证每个对象的数据成员具有合适的初始值。
    // 构造函数通常使用构造函数初始化列表来初始化其数据成员,
    // 当然,像此处一样,省略初始化列表,并在构造函数的函数体内对数据成员赋值是合法的。
    // 注意,构造函数的名字与类的名字相同,并且不能指定返回类型。像其他任何函数一样,
    // 它们可以没有形参,也可以定义多个形参。
    Game::Game()
     
    {
    	// 调用类成员函数来进行初始化
    	initPlane();
     
    	initBullet();
     
    	initEnemy();
    	
     
    	// 初始化四个int型数据成员,采用赋值的方式进行初始化
    	// string类型的数据成员title没有进行初始化,因为:
    	// string本身就是一个标准库类类型,它的类定义中设置了默认构造函数,
    	// 这些默认构造函数会将对象初始化为合理的默认状态,
    	//  string的默认构造函数会产生空字符串,相当于"" 。
    	score = 0;
     
    	rank = 25;
     
    	rankf = 0;
     
    	flag_rank = 0;
     
    }
     
     
    // 成员函数既可以定义在类的内部,也可以定义在类的外部。
    // 在类外部定义的成员函数必须指明它们是在类的作用域中,例如
    //  Game::initPlane的定义使用 作用域操作符 来指明这是 Game类中initPlane函数的定义。
    // 这是初始化战机位置的成员函数
    void Game::initPlane()
     
    {
     
    	COORD centren;
    	centren.X = 39;
    	centren.Y = 22;
     
    	position[0].X = position[5].X = position[7].X = position[9].X = centren.X;
     
    	position[1].X = centren.X - 2;
     
    	position[2].X = position[6].X = centren.X - 1;
     
    	position[3].X = position[8].X = centren.X + 1;
     
    	position[4].X = centren.X + 2;
     
    	for (int i = 0; i <= 4; i++)
     
    		position[i].Y = centren.Y;
     
    	for (int i = 6; i <= 8; i++)
     
    		position[i].Y = centren.Y + 1;
     
    	position[5].Y = centren.Y - 1;
     
    	position[9].Y = centren.Y - 2;
     
    	// 这个函数体类的代码其实就是为了初始化战机的十个部分的位置,战机的组成如下所示:   
    	//                   |
    	//				     |
    	//				   00000
    	//				    000
    	//   第一排5个0的坐标依次对应了position[1]position[2]position[0]position[3]position[4]
    	//   第二排三个0的坐标依次对应了position[6]position[7]position[8]
    	//   两排0上面的两|的坐标从上往下依次对应了position[5]position[9]
    }
     
     
     
    // 这是初始化战机外形的成员函数
    // 战机的形状组成如下所示:
    //                   |
    //				     |
    //				   00000
    //				    000
    // 在该函数中调用了SetPos()函数来设置光标的
    void Game::drawPlane()
    {
    	for (int i = 0; i<9; i++)
    	{
    		SetPos(position[i]);   
    		// 此处调用SetPos()函数将光标设置到了position[i]指定的位置
     
    		if (i != 5)
     
    			cout << "O";
     
    		else if (i == 5)
     
    			cout << "|";
    	}
    }
     
     
    // 这个成员函数通过将战机的每个坐标处输出" "来代替"0"和"|",
    // 来达到将战机消除的目的。
    void Game::drawPlaneToNull()
    {
    	for (int i = 0; i<9; i++)
    	{
    		SetPos(position[i]);
     
    		cout << " ";
    	}
    }
     
     
     
    // 该成员函数用来初始化子弹,
    // 即将每个子弹的Y坐标初始化为30(bullet[i].Y = 30)来表示子弹处于失效状态
    void Game::initBullet()
    {
    	for (int i = 0; i<10; i++)
     
    		bullet[i].Y =30;
    }
     
     
     
     
    // 该成员函数用来画出子弹
    // 首先检查每颗子弹的有效性,如果子弹有效,则定位到该子弹的坐标处,输出 "^",表示该子弹,
    // 如果子弹是无效的,则不绘制
    void Game::drawBullet()
     
    {
     
    	for (int i = 0; i<10; i++)
     
    	{
            
    		if (bullet[i].Y != 30)
     
    		{
     
    			SetPos(bullet[i]);
     
    			cout << "^"
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
以下是一个简单的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函数来检查它们是否相交。如果发生碰撞,则可以在处理逻辑中删除子弹或敌机,或者扣除飞机的生命值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

{∞}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值