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

📄 enermysystem.cpp

📁 空格: 发弹 TAB: 换武器 方向键: 移动
💻 CPP
字号:
#include "stdafx.h"

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

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

// 返回第一个敌机对象
Enermy* EnermySystem::GetFirstEnermy()
{
	EnermyIndex=-1;
	EnermyCount=EnermyList.size();
	if(EnermyCount==0)
		return NULL;

	pCurElement=EnermyList.end();
	return GetNextEnermy();
}

// 返回下一个敌机对象
Enermy* EnermySystem::GetNextEnermy()
{
	EnermyIndex++;
	pCurElement++;
	while( ( EnermyIndex < EnermyCount ) && ( *pCurElement )->Used==false )
	{
		delete *pCurElement;
		EnermyCount--;
		pCurElement=EnermyList.erase(pCurElement);
	}

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

// 创建新敌机
void EnermySystem::CreateEnermy(int x, int y)
{
	int i, n;
	Enermy::ENERMY_TYPE EnermyType = ( Enermy::ENERMY_TYPE ) ( rand() % Enermy::ENERMY_TYPE_COUNT );
	Enermy		*pEnermy;
	switch( EnermyType )
	{
	case Enermy::ENERMY_TOM:
		pEnermy = new Enermy_Tom( pGameWorld, x, y );
		EnermyList.push_back(pEnermy);
		break;
	case Enermy::ENERMY_MIMI:
		pEnermy = new Enermy_Mimi( pGameWorld, x, y );
		EnermyList.push_back(pEnermy);
		break;
	case Enermy::ENERMY_JACK:
		if( rand() % 3 > 0 ) break;
		n = rand() % 4 + 1;
		switch( rand() % 4 )
		{
		case 0:
			if( x + n * 50 > GameWorld::Width )
				x = GameWorld::Width - n * 50;
			for(i=0; i<n; i++)
			{
				pEnermy = new Enermy_Jack( pGameWorld, x + i * 50, y - i * 50 );
				EnermyList.push_back(pEnermy);
			}
			break;
		case 1:
			if( x < n * 50 )
				x = n * 50;
			for(i=0; i<n; i++)
			{
				pEnermy = new Enermy_Jack( pGameWorld, x - i * 50, y - i * 50 );
				EnermyList.push_back(pEnermy);
			}
			break;
		case 2:
			for(i=0; i<n; i++)
			{
				pEnermy = new Enermy_Jack( pGameWorld, x, y - i * 70 );
				EnermyList.push_back(pEnermy);
			}
			break;
		case 3:
			if( x + n * 50 > GameWorld::Width )
				x = GameWorld::Width - n * 50;
			for(i=0; i<n; i++)
			{
				pEnermy = new Enermy_Jack( pGameWorld, x + i * 70, y );
				EnermyList.push_back(pEnermy);
			}
		}
	}
}

void EnermySystem::Update()
{
	// 新增敌机
	if( rand() < Difficulty )
		CreateEnermy( rand()% pGameWorld->Width, -1 );

	// 刷新敌机
	Enermy *pEnermy=GetFirstEnermy();
	while(pEnermy)
	{
		pEnermy->Update();
		pEnermy=GetNextEnermy();
	}
}

// 增加难度
void EnermySystem::AddDifficulty()
{
	Difficulty = (int)(Difficulty * 1.2 );
}

// 重设难度
void EnermySystem::ResetDifficulty()
{
	Difficulty = 500;
}

⌨️ 快捷键说明

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