C++实现飞机大战

本文实例为大家分享了C++实现飞机大战的具体代码,供大家参考,具体内容如下

开发工具

vs2019(vs系列都可以),easyx图形库

效果展示

源代码

一些头文件

myhelp.h文件

#pragma once
#include<easyx.h>
#include<conio.h>
#include<list>
#include<vector>
#include<iostream>
using namespace std;
struct node
{
 int x, y;
 node(int x, int y) :x(x), y(y) {}
 node() { x = 0; y = 0; }
};

airplan.h文件

#pragma once
#include"myhelp.h"
class airplan
{
 node Plan; //自己的飞机
 int px;  //飞机大小
 list<node> enemyPlan; //敌机
public:
 airplan();
 airplan(int x, int y);
 list<node>& getEnemyPlan()
 {
 return enemyPlan;
 }
 node& getPlan()
 {
 return Plan;
 }
 bool planeColide(node& v1, node& v2, int px); //飞机碰撞
 void destoryEnemy(int height);
};

airplan.cpp文件

#include "airplan.h"
airplan::airplan(int x, int y) :Plan(x, y)
{
 px = 40;
}
airplan::airplan(){}
bool airplan::planeColide(node& v1, node& v2, int px)
{
 int x = abs(v1.x - v2.x);
 int y = abs(v1.y - v2.y);
 return y < px&& x < px;
}
void airplan::destoryEnemy(int height)
{
 for (auto it = enemyPlan.begin(); it != enemyPlan.end(); it++)
 {
 if (it->y > height)
 {
 enemyPlan.erase(it);//删除it当前位置的数据
 break;
 }
 }
}

bullet.h文件

#pragma once
#include"myhelp.h"
#include"airplan.h"
class Bullet
{
 list<node> bullet; //子弹节点
public:
 list<node>& getBullet()
 {
 return bullet;
 }
 void spwnBullet(node& plan); //发射子弹
 void dextoryBullet(); //销毁子弹
};

bullet.cpp文件

#include "bullet.h"

void Bullet::spwnBullet(node& plan) //发射子弹
{
 bullet.push_back(node(plan.x, plan.y + 10));
}
void Bullet::dextoryBullet() //销毁子弹
{
 for (auto it = bullet.begin(); it != bullet.end(); it++)
 {
 if (it->y < 0)
 {
  bullet.erase(it);
  break;
 }
 }
}

game.h文件

#pragma once
#include"airplan.h"
#include"bullet.h"
class game
{
 int wid;
 int height;
 int grade;
 int px;  //图片大小
 TCHAR tc[30]; //输入文字提示
 vector<IMAGE> ving; //图片
 airplan plan;
 Bullet bullet;
public:
 game(int wid, int height);
 ~game();
 //初始化
 void init();
 //生成敌机
 void spawnEnemy();
 //移动
 void control();
 //飞机撞子弹
 bool bulletCollide(airplan& plan, int px);
 //游戏是否结束
 bool isGameOver();
 void draw();
 //刷新
 void updata(airplan& plan, Bullet& bullet);
 //开始游戏
 void start();
};

game.cpp文件

#include "game.h"
game::game(int wid, int height) :wid(wid), height(height)
{
 initgraph(wid, height);
 px = 40;
 ving.resize(3);
 loadimage(&ving[0], _T("res/1.jpg"), px, px);
 loadimage(&ving[1], _T("res/2.jpg"), px, px);
 loadimage(&ving[2], _T("res/3.jpg"), px, px);
 grade = 0;
 plan = { wid / 2, height - px * 2 };  //飞机在中间
}
game::~game()
{
 closegraph();
}
void game::init()
{
 grade = 0;
 plan = { wid / 2, height - px * 2 };  //飞机在中间
 bullet.getBullet().clear();
 plan.getEnemyPlan().clear();
}
//生成敌机
void game::spawnEnemy()
{
 static int x = 0; // 敌机的数量
 if (x >= 20)
 {
 if (plan.getEnemyPlan().size() < 5)
 {
  plan.getEnemyPlan().push_back(node(rand() % (wid - px) + px / 2, 0));
 }
 x = 0;
 }
 x++;
}
//移动
void game::control()
{
 int speed = 4;
 if (GetAsyncKeyState(VK_UP) || GetAsyncKeyState('w'))
 {
 if (plan.getPlan().y > px / 2)
  plan.getPlan().y -= speed;
 }
 if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState('d'))
 {
 if (plan.getPlan().x < wid - px)
  plan.getPlan().x += speed;
 }
 if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState('a'))
 {
 if (plan.getPlan().x > 0)
  plan.getPlan().x -= speed;
 }
 if (GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState('s'))
 {
 if (plan.getPlan().y < height - px)
  plan.getPlan().y += speed;
 }
 if (_kbhit())
 {
 if (_getch() == (VK_SPACE))
 {
  bullet.spwnBullet(plan.getPlan());
 }
 }
}
//飞机撞子弹
bool game::bulletCollide(airplan& plan, int px)
{
 for (auto p = bullet.getBullet().begin(); p != bullet.getBullet().end(); p++)
 {
 for (auto en = plan.getEnemyPlan().begin(); en != plan.getEnemyPlan().end(); en++)
 {
  if (plan.planeColide(*p, *en, px))
  {
  bullet.getBullet().erase(p);
  plan.getEnemyPlan().erase(en);
  return true;
  }
 }
 }
 return false;
}
//游戏是否结束
bool game::isGameOver()
{
 for (auto p : plan.getEnemyPlan())
 {
 if (plan.planeColide(plan.getPlan(), p, px))
 {
  return true;
 }
 }
 return false;
}
void game::draw()
{
 BeginBatchDraw();
 cleardevice();
 for (auto p : plan.getEnemyPlan())
 {
 putimage(p.x, p.y, &ving[0]);
 }
 for (auto p : bullet.getBullet())
 {
 putimage(p.x, p.y, &ving[2]);
 }
 putimage(plan.getPlan().x, plan.getPlan().y, &ving[1]);
 wsprintf(tc, _T("score:%d"), grade);
 outtextxy(wid / 2, px, tc);
 EndBatchDraw();
}
//刷新
void game::updata(airplan& plan, Bullet& bullet)
{
 for (auto& p : plan.getEnemyPlan())
 {
 p.y += 2;
 }
 for (auto& p : bullet.getBullet())
 {
 p.y -= 8;
 }
 if (bulletCollide(plan, px))
 grade++;
 plan.destoryEnemy(height);
 bullet.dextoryBullet();
 spawnEnemy();
}
//开始游戏
void game::start()
{
 while (true)
 {
 updata(plan, bullet);
 control();
 draw();
 if (isGameOver())
 {
  if (MessageBox(GetForegroundWindow(), _T("是否开始新的游戏"), _T("游戏结束"), MB_YESNO) == IDYES)
  {
  init();
  }
  else
  break;
 }
 Sleep(20);
 }
}

main.cpp文件

#include<iostream>
#include"game.h"
using namespace std;
int main()
{
 game play(360, 630);
 play.start();
 system("pause");
 return 0;
}

素材

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++编写简易的飞机大战

    初学C/C++的小伙伴可以用做这个小游戏来熟悉一下编程的乐趣. #include<windows.h> #include"resource.h" #include<stdlib.h> #include<time.h> #include<stdio.h> #define TIMER_DIREN 101 //定义定时器 #define TIMER_DIRENMOVE 102 #define TIMER_ZIDAN 103 #define TI

  • C++实现彩色飞机大战

    本文实例为大家分享了C++实现彩色飞机大战的具体代码,供大家参考,具体内容如下 1.基本的能够实现键盘按上下左右进行控制飞机,击杀敌人飞机,记录得分,(缺点:死亡后不能从新玩,需要重新启动程序,),缺点将在2中解决 /*隐藏光标的代码 #include <stdio.h> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO Cur

  • 用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动

    目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有这项技能的同学只能和我一样从网上下载相应的素材了. 网上可以找到相应的这样的图片,注意,所有的元件图片要是png类型的图片,那样可以有透明的背景,否则会有白色的边框露出来. 找到素材以后我们就要开始搭建我们的飞机大战了. 微信上的飞机大战是由手指控制的,在电脑上,我们就先用鼠标代替了. 按照之前我们在天空上移动云的那个程序,我们可以知道该怎么做

  • JavaScript原生编写《飞机大战坦克》游戏完整实例

    先来看看开始的界面图 实现思路: 1.打开页面,背景开始走动: 2.点击开始,飞机开始不断发射子弹,敌人随机出现在上方: 3.当敌人碰到子弹,敌人消失: 4.当敌人和飞机相遇,飞机死亡,结束游戏: html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>飞机大战</title> <link r

  • python pygame模块编写飞机大战

    本文实例为大家分享了python pygame模块编写飞机大战的具体代码,供大家参考,具体内容如下 该程序没有使用精灵组,而是用列表存储对象来替代精灵组的动画效果.用矩形对象的重叠来判断相撞事件.该程序可以流畅运行,注释较为详细,希望可以帮助大家. import pygame from pygame.locals import * from sys import exit import time import random # 创建子弹类,把子弹的图片转化为图像对象,设定固定的移动速度 clas

  • python实现飞机大战微信小游戏

    0.前言 我学一种语言,可以说学任何东西都喜欢自己动手实践,总感觉自己动手一遍,就可以理解的更透彻,学python也一样,自己动手写代码,但更喜欢做点小东西出来,一边玩一边学.下面我就展示一下我最近做的一个小游戏. 1.素材准备 首先我们先来预览一下游戏的最终运行界面 根据游戏界面,我们可以清楚的知道必须要先准备游戏背景图片,飞机图片,子弹图片等等.这些素材我已经放到网上, 点我下载 ,里面包括了我的代码和图片素材. 2.代码部分 库依赖: pygame 本游戏主要有两个py文件,主文件plan

  • python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工具类plane_sprites.py import random import pygame # 屏幕大小的常量 SCREEN_RECT = pygame.Rect(0, 0, 480, 700) # 刷新的帧率 FRAME_PER_SEC = 60 # 创建敌机的定时器常量 CREATE_ENEM

  • pygame实现简易飞机大战

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import * from pygame.font import * import time import random class Hero(object): #玩家 英雄类 def __init__(self, screen_temp): self.x = 210 self.y = 700 self.life

  • python实现飞机大战

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 实现的效果如下: 主程序代码如下: import pygame from plane_sprites import * class PlaneGame(object): """飞机大战主游戏""" def __init__(self): print("游戏初始化") # 1,绘制屏幕窗口 self.screen = pygame.display.

  • python版飞机大战代码分享

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import * from pygame.font import * import time import random class Hero(object): #玩家 英雄类 def __init__(self, screen_temp): self.x = 210 self.y = 700 self.life

  • 500行代码使用python写个微信小游戏飞机大战游戏

    这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右手有节奏有韵律的朝着同一个方向来回移动起来! 这是史诗级的发明,是浓墨重彩的一笔,是-- 在一阵抽搐后,我结束了游戏,瞬时觉得一切都索然无味,正在我进入贤者模式时,突然想到,如果我可以让更多人已不同的方式体会到这种美轮美奂的感觉岂不美哉? 所以我打开电脑,创建了一个 plan_game.py-- 先

  • python实现飞机大战小游戏

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 初学Python,写了一个简单的Python小游戏. 师出bilibili某前辈 pycharm自带了第三方库pygame,安装一下就好了,很方便. 虽然很多大佬已经给出了步骤,我这里还是啰嗦一下,也为了自己巩固一下. 上图: 这里再给出代码的逻辑架构 plane_main.py import pygame from plane_sprites import * class PlaneGame(object): "

随机推荐