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

📄 bullet.cpp

📁 空格: 发弹 TAB: 换武器 方向键: 移动
💻 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;
	ExplosionFrameIndex = -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 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 );
	dy += - speed * sin( a );
}

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)
			Used = false;
		else
		{
			sx = 32 * ( ExplosionFrameIndex / 4 );
		}
	}
	Sprite::Update();
}
// 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 = 1;

	AdjustPosition();
	SetMovement(15, 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 + -