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

📄 roidscontainer.h

📁 rps game symbian os application development
💻 H
字号:
/*
* ============================================================================
*  Name     : CRoidsContainer from RoidsContainer.h
*  Part of  : roids
*  Created  : 05/12/2001 by Twm Davies
*  Description:
*     Declares container control for application.
*  Version  :
*  Copyright: Twm Davies
* ============================================================================
*/

#ifndef ROIDSCONTAINER_H
#define ROIDSCONTAINER_H

// INCLUDES
#include <coecntrl.h>
#include <coeccntx.h>

#include <eikappui.h>
#include <eikapp.h>
#include <eikdoc.h>
#include <e32std.h>
#include "MathUtils.h"
#include "WorldPoint.h"
#include "WorldObjects.h"
#include "polygon.h"
#include "CGfxTimer.h"
#include "CAsteroidPool.h"
#include <e32math.h>
   
// FORWARD DECLARATIONS
class CEikLabel;        // for example labels


// TYPEDEF 
// Hide the ugly templates
/*const TInt KMaxAsteroids = 30;
const TInt KMaxCapsules = 20;*/

typedef CObjectPool<TAsteroid,30> CAsteroidPool;
typedef TPoolIterator<TAsteroid, 30> TAsteroidIterator;
typedef CObjectPool<TCapsule,20> CCapsulePool;
typedef TPoolIterator<TCapsule, 20> TCapsuleIterator;
typedef CObjectPool<TProjectile,20> CProjectilePool;
typedef TPoolIterator<TProjectile, 20> TProjectileIterator;

/* CLASS DECLARATION
*  CRoidsContainer  container control class.
*  
*/
class CRoidsContainer : public CCoeControl , public MGfxTimerCallBack// public MMdaImageUtilObserver
	{
	enum TGameKey
		{
		EKeyRotateLeft,
		EKeyRotateRight,
		EKeyThrust,
		EKeyFireGun,
		EKeyMaxVirtualKey
		};

	enum TGameState{EPlaying, EGameOver, EIntro};
	TGameState iGameState;

public:
	void ConstructL(const TRect& aRect);
	~CRoidsContainer();

	// Game control
	void FocusChanged(TDrawNow aDrawNow);
	void SetPaused(TBool aState);
	void ResetGame();

// from CCoeControl
	void SizeChanged();
	TInt CountComponentControls() const;
	CCoeControl* ComponentControl(TInt aIndex) const;
	virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);

private:
	
	// Level and Game functions
	void ResetShip();
	void HandleNextLevel(TInt aLevel);
	void SetRoidsMaterial(TInt aLevel);
	void ResetRoids(TInt aNum);
	virtual void GfxTimerFiredL(TInt /*aId*/); // World timer fired

	// Drawing functions
private:
	void Draw(const TRect& aRect) const;
	void DrawShape(CGraphicsContext& aGc, const MPolygon& aPolygon, TRgb aColor=KRgbWhite) const;
	void DrawExplosionParticle(CGraphicsContext& aGc, const TExplosionFragment& aFragment) const;
	void DrawLivesAndScoreIndicator(CGraphicsContext& aGc) const;
	void DrawGameOver(CGraphicsContext& aGc) const;
	void DrawIntro(CGraphicsContext& aGc) const;
	void DrawLevelIndicator(CGraphicsContext& aGc) const;
	void DrawBackgroundStars(CWsBitmap& aBitmap) const;
	void DrawAsteroids(CBitmapContext& aGc) const;
	void DrawProjectiles(CBitmapContext& aGc) const;
	void DrawShip(CBitmapContext& aGc) const;
	void DrawFragments(CBitmapContext& aGc) const;
	void DrawStarBust() const;
	void DrawGame(CBitmapContext& aGc) const;
	void DrawCapsule(CBitmapContext& aGc) const;
	
	// Collision and world coord functions
	void ClipObject(TWorldObject &aObject);
	TBool CalculateProjectileCollisions(TAsteroid& aRoid, const TRect& aBoundingRect);
	void CalculateCollisions();
	void CalculateCapsuleCollisions(const TRect& aBoundingRect);
	
	void HandleShipHitAsteroid(TAsteroid& aAsteroid);
	void HandleShipHitCapsule(TCapsule& aCapsule);

	// Motion update functions
	void UpdateShip();
	void UpdateProjectiles();
	void UpdateAsteroids();
	void UpdateExplosionFragments();
	void UpdateShipExplosion();
	void UpdateCapsules();

	void SplitShip();
	void SplitRoid(TAsteroid& aRoid);

	// Projectiles 
	TBool FindFreeProjectile(TProjectile*& aProjectile);
	void LaunchProjectile();

	// Explosions Fragments
	TBool FindFreeFragment(TExplosionFragment*& aFragment);
	void CreateExplodeFragmentsFromObject(TWorldObject& aObject);

	// KeyBoard Handling
	void SetKeyDown(const TGameKey& aKey, const TKeyEvent& aKeyEvent);
	void ClearKeyDown(const TGameKey& aKey);
	TBool KeyDown(const TGameKey& aKey);
	void UpdateFromKeyStates();
	TBool IsKeyPressed();	

	// Misc
	void SonicBoom();
	CWsBitmap* LoadBitmapToFullScreenL(TRect aRect);
	
private:

	enum {EMaxStars=200};
	enum {KMaxAsteroids=100};
	enum {KMaxProjectiles=6};
	enum {KMaxExplosionFragments=100};

private:
// Drawing
	CWsBitmap*			iBackupBitmap;
	CFbsBitmapDevice* 	iBitmapDevice;
	CFbsBitGc*			iBitmapGc;
	CWsBitmap*			iNebula;	

// World objects 
	TShip						iShip;
	RPointerArray<TAsteroid>	iAsteroids;
	CCapsulePool*   			iCapsulePool;
	CAsteroidPool*				iAsteroidPool;
	CProjectilePool*			iProjectilePool;	
	TExplosionFragment 			iExplosionFragments[KMaxExplosionFragments];
	TFixedPolygon<3> 			iLivesShape;

	TReal iStarBurstRadius;
	TBool	iDrawStarbust;
	TPoint	iStars[EMaxStars];
	
// Timers and tickers
	CGfxTimer*	iGfxTimer;	
	TInt		iInvinsibleTicker;
	TInt		iDeadTicker;
	TInt		iNextLevelTicker;

// Key handling	
	TInt	iScanCodes[EKeyMaxVirtualKey];

	TInt		iLineWidth;
	TReal		iFps;
	TInt		iScore;
	TInt		iLives;
	TInt		iLevel;
	TBool		iShowBoundinBox;
	};

#endif

// End of File

⌨️ 快捷键说明

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