⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bullet.cpp

📁 vc++ 飞机游戏1,是一种好玩的游戏,初学程序设计,这是个好开始!
💻 CPP
字号:
#include "stdafx.h"

// 子弹基类Bullet的实现

Bullet::Bullet(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy)
:Sprite(pgw, x_value, y_value)//构造函数的初始化
{
	dx=sprite_vx;
	dy=sprite_vy;
	ExplosionFrameCount = 32;// 爆炸动画帧数设计为32
	ExplosionFrameIndex = -1;// 爆炸动画当前帧设计为-1
};

int Bullet::GetFireInterval(BULLET_TYPE BulletType)// 返回给定类型的子弹的发射时间间隔

{
	switch(BulletType)
	{
	case PLAYER_BULLET_FIRE:
		return 150;
	case PLAYER_BULLET_MISSILE:
		return 300;
	case PLAYER_BULLET_ROUND_BULLET:
		return 200;
	case PLAYER_BULLET_BIG_BULLET:
		return 600;
	case ENERMY_BULLET_1:          
		return 2000;
	case ENERMY_BULLET_2:        
		return 700;
	case ENERMY_BULLET_3:
		return 1000;
	}
	return 0;
}

void Bullet::SetMovement(double speed, int angle)// 根据速率和角度,计算分速度
{
	double a = GameWorld::PI * angle / 180;
	dx += speed * cos( a );// 计算速度分量dx
	dy += - speed * sin( a );// 计算速度分量dy
}

void Bullet::Update()
{
	if(OutOfSight())//超出看见范围则标记丢失
		Used=false;	
	else if(Life<=0)
	{
		if(++ExplosionFrameIndex==0)//子弹的爆炸
		{
			sx = 0;
			sy = 83;
			w = 32;
			h = 32;
			dx = 0;
			dy = 0;
		}
		else if(ExplosionFrameIndex>=ExplosionFrameCount)//当爆破当前帧>=ExplosionFrameCount的时候对sx的设计
			Used = false;
		else
		{
			sx = 32 * ( ExplosionFrameIndex / 4 );
		}
	}
	Sprite::Update();// 刷新, 刷新位置和输出画面
}
// BIG的实现
PlayerBullet_Big::PlayerBullet_Big(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy)
:Bullet(pgw, x_value, y_value, sprite_vx, sprite_vy)
{
	Bullet::dx=0;
	Bullet::dy=-10;

	Sprite::sx=118;
	Sprite::sy=0;
	Sprite::w=120;
	Sprite::h=28;
// 碰撞检测用矩形
	cx=2;
	cy=0;
	cw=5;
	ch=9;
	Atackness = 8;
	Life=3;

	AdjustPosition();// 已左上角作为中心点调整位置,即在相应设计位图的位置中要取素材
};
// Fire的实现
PlayerBullet_Fire::PlayerBullet_Fire(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy)
:Bullet(pgw, x_value, y_value, sprite_vx, sprite_vy)
{
	Bullet::dx=0;
	Bullet::dy=-15;

	Sprite::sx=29;
	Sprite::sy=0;
	Sprite::w=3;
	Sprite::h=13;
// 碰撞检测用矩形
	cx=0;
	cy=0;
	cw=3;
	ch=9;

	AdjustPosition();// 已左上角作为中心点调整位置,即在相应设计位图的位置中要取素材
};

// Missile的实现
PlayerBullet_Missile::PlayerBullet_Missile(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy, int angle)
:Bullet(pgw, x_value, y_value, sprite_vx, sprite_vy)
{
	Angle=angle;

	dAngle=3;

	Sprite::sx=32;
	Sprite::sy=0;
	Sprite::w=4;
	Sprite::h=8;
// 碰撞检测用矩形
	cx=1;
	cy=0;
	cw=2;
	ch=6;

	x0=x_value;//获取出弹位置
	Range=5;//设计出弹速度//

	AdjustPosition();
};

void PlayerBullet_Missile::Update()//玩家死后的从新来
{
	if(Life>0)
	{
		x=x0;//出弹的位置
		dx=Range*cos(Angle*GameWorld::PI/180);//出弹速度的设计(含角度)
		dy=-10;//上升速度
		Angle+=dAngle;//角度的变化
		Range+=2;// 规律
	}
	Bullet::Update();
}


// RoundBullet的实现
PlayerBullet_RoundBullet::PlayerBullet_RoundBullet(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy, int angle)
:Bullet(pgw, x_value, y_value, 0, 0)
{
	Sprite::sx=36;
	Sprite::sy=0;
	Sprite::w=5;
	Sprite::h=5;
// 碰撞检测用矩形
	cx=1;
	cy=1;
	cw=3;
	ch=3;

	Atackness = 3;

	AdjustPosition();
	SetMovement(10, angle);//调用函数来设计子弹的速度的角度
};

// EnermyBullet1的实现
EnermyBullet1::EnermyBullet1(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy, int angle)
:Bullet(pgw, x_value, y_value, sprite_vx, sprite_vy)
{
	Sprite::sx=30;
	Sprite::sy=25;
	Sprite::w=8;
	Sprite::h=8;
// 碰撞检测用矩形
	cx=2;
	cy=2;
	cw=4;
	ch=4;

	AdjustPosition();
	SetMovement(2, angle);//调用函数来设计子弹的速度的角度
};

// EnermyBullet2的实现
EnermyBullet2::EnermyBullet2(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy, int angle)
:Bullet(pgw, x_value, y_value, sprite_vx, sprite_vy)
{
	Sprite::sx=29;
	Sprite::sy=13;
	Sprite::w=7;
	Sprite::h=7;
// 碰撞检测用矩形
	cx=1;
	cy=1;
	cw=5;
	ch=5;

	AdjustPosition();
	SetMovement(6, angle);//调用函数来设计子弹的速度的角度
};

// EnermyBullet3的实现
EnermyBullet3::EnermyBullet3(GameWorld *pgw, int x_value, int y_value, double sprite_vx, double sprite_vy, int angle)
:Bullet(pgw, x_value, y_value, sprite_vx, sprite_vy)
{
	Sprite::sx=29;
	Sprite::sy=20;
	Sprite::w=5;
	Sprite::h=5;
// 碰撞检测用矩形
	cx=1;
	cy=1;
	cw=3;
	ch=3;

	AdjustPosition();
	SetMovement(4, angle);//调用函数来设计子弹的速度的角度
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -