飞机大战c++代码,可运行

本文分享了一款使用C++编程语言实现的飞机大战游戏的代码,详细讲解了代码结构和关键实现部分,适合C++初学者和游戏编程爱好者学习参考。
摘要由CSDN通过智能技术生成
    #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 << "^";
    		} 
     
    	}
     
    }
     
     
     
     
    void Game::draw
  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值