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

📄 bulletsystem.cpp

📁 单机射击游戏 单机射击游戏 给初学者用
💻 CPP
字号:
#include "stdafx.h"

// 构造函数
BulletSystem::BulletSystem(GameWorld *pgw)
{
	pGameWorld=pgw;
}

// 释构函数
BulletSystem::~BulletSystem()
{
	list<Bullet*>::iterator p, pend;;
	p=BulletList.begin();
	pend=BulletList.end();
	while(p!=pend)
	{
		delete *p;
		p++;
	}
}

// 新增子弹
void BulletSystem::FireHappened(Bullet::BULLET_TYPE BulletType, int x, int y, double sprite_vx, double sprite_vy)
{
	int i;
	Bullet *pNewBullet;

	switch(BulletType)
	{
	case Bullet::PLAYER_BULLET_FIRE:
		for(i=0; i<4; i++)
		{
			pNewBullet=new PlayerBullet_Fire(pGameWorld, x-12+8*i, y, sprite_vx, sprite_vy);
			BulletList.push_back(pNewBullet);
		}
		break;
	case Bullet::PLAYER_BULLET_MISSILE:
		for(i=0; i<6; i++)
		{
			pNewBullet=new PlayerBullet_Missile(pGameWorld, x-10+rand()%21, y-10+rand()%21, sprite_vx, sprite_vy, rand()%181);
			BulletList.push_back(pNewBullet);
		}
		break;
	case Bullet::PLAYER_BULLET_ROUND_BULLET:
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 20);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 50);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 70);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 80);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 90);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 100);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 110);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 130);
		BulletList.push_back(pNewBullet);
		pNewBullet=new PlayerBullet_RoundBullet(pGameWorld, x, y, sprite_vx, sprite_vy, 160);
		BulletList.push_back(pNewBullet);
		break;
	case Bullet::ENERMY_BULLET_1:
		for(i=0; i<5; i++)
		{
			pNewBullet=new EnermyBullet1(pGameWorld, x+8*(i-2), y, sprite_vx, sprite_vy, 270+20*(i-2));
			BulletList.push_back(pNewBullet);
		}
		break;
	case Bullet::ENERMY_BULLET_2:
		pNewBullet=new EnermyBullet2(pGameWorld, x-10, y, sprite_vx, sprite_vy, 0);
		BulletList.push_back(pNewBullet);
		pNewBullet=new EnermyBullet2(pGameWorld, x+10, y, sprite_vx, sprite_vy, 180);
		BulletList.push_back(pNewBullet);
		break;
	case Bullet::ENERMY_BULLET_3:
		pNewBullet=new EnermyBullet3(pGameWorld, x-5, y, sprite_vx, sprite_vy, 225);
		BulletList.push_back(pNewBullet);
		pNewBullet=new EnermyBullet3(pGameWorld, x+5, y, sprite_vx, sprite_vy, 315);
		BulletList.push_back(pNewBullet);
		break;

	}

}

// 返回第一个子弹对象
Bullet* BulletSystem::GetFirstBullet()
{
	BulletIndex=-1;
	BulletCount=BulletList.size();
	if(BulletCount==0)
		return NULL;

	pCurElement=BulletList.end();
	return GetNextBullet();
}

// 返回下一个子弹对象
Bullet* BulletSystem::GetNextBullet()
{
	BulletIndex++;
	pCurElement++;
	while( ( BulletIndex < BulletCount ) && ( ( *pCurElement )->Used == false ) )
	{
		delete *pCurElement;
		BulletCount--;
		pCurElement=BulletList.erase(pCurElement);
	}

	if(pCurElement==BulletList.end())
		return NULL;
	else
		return *pCurElement;
}

void BulletSystem::Update()
{
	Bullet *pBullet=GetFirstBullet();
	while(pBullet)
	{
		pBullet->Update();
		pBullet=GetNextBullet();
	}
}

⌨️ 快捷键说明

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