funCode課程實訓(C++ )

funcode是一個簡單的游戲制作引擎,適合c++初學者操作,可以幫助初學者更好的了解c++環境,以及各種函數的實現,本學期我們用funcode作為C++最后的課程設計,所以我就使用funcode制作一個打地鼠的小游戲。以下是對這個小程序的描述。




游戲比較簡單,共有2個頭文件,兩個cpp文件

CommonClass.h這是系統自帶的頭文件

/
//
//
//
//
/
#ifndef _COMMON_CLASS_H_
#define _COMMON_CLASS_H_
//
#include <windows.h>
/
//
// 全局變量、宏定義
#define		MAX_NAME_LEN		128	// 名字長度
/
//
// Sprite精靈與世界邊界碰撞響應定義( 碰撞之后API OnSpriteColWorldLimit 將被調用 )
enum EWorldLimit
{WORLD_LIMIT_OFF,			// 關閉與世界邊界的碰撞WORLD_LIMIT_NULL,			// 碰撞之后引擎不做任何處理,由各游戲自己處理響應WORLD_LIMIT_RIGID,			// 剛性物理碰撞反應WORLD_LIMIT_BOUNCE,			// 反彈模式WORLD_LIMIT_CLAMP,			// 小幅反彈,逐漸停止模式(比如籃球落地)WORLD_LIMIT_STICKY,			// 碰撞之后靜止WORLD_LIMIT_KILL,			// 碰撞之后精靈將被刪除WORLD_LIMIT_INVALID,		//	無效值
};
/
//
/// 精靈與精靈之間、精靈與地圖中其它精靈之間的碰撞響應( 碰撞之后API OnSpriteColSprite 將被調用 )
enum ECollisionResponse
{COL_RESPONSE_OFF,			//	關閉碰撞響應(不調用OnSpriteColSprite)COL_RESPONSE_RIGID,			//	剛性物理碰撞響應COL_RESPONSE_BOUNCE,		//	反彈模式COL_RESPONSE_CLAMP,			//	小幅反彈,逐漸停止模式(比如籃球落地)COL_RESPONSE_STICKY,		//	碰撞之后靜止COL_RESPONSE_KILL,			//	碰撞之后精靈將被刪除COL_RESPONSE_CUSTOM,		//	碰撞之后引擎不做任何處理,由各游戲自己處理響應COL_RESPONSE_INVALID,		//	無效值
};
//================================================================================
//
// 鼠標按鍵值定義
enum MouseTypes 
{MOUSE_LEFT		=	0,		// 左鍵MOUSE_RIGHT		=	1,		// 右鍵MOUSE_MIDDLE	=	2		// 中鍵
};
/
//
// 鍵盤KEY值定義
enum KeyCodes 
{KEY_NULL          = 0x000,     ///< Invalid KeyCodeKEY_BACKSPACE     = 0x001,KEY_TAB           = 0x002,KEY_ENTER         = 0x003,KEY_CONTROL       = 0x004,KEY_ALT           = 0x005,KEY_SHIFT         = 0x006,KEY_PAUSE         = 0x007,KEY_CAPSLOCK      = 0x008,KEY_ESCAPE        = 0x009,KEY_SPACE         = 0x00a,KEY_PAGE_DOWN     = 0x00b,KEY_PAGE_UP       = 0x00c,KEY_END           = 0x00d,KEY_HOME          = 0x00e,KEY_LEFT          = 0x00f,KEY_UP            = 0x010,KEY_RIGHT         = 0x011,KEY_DOWN          = 0x012,KEY_PRINT         = 0x013,KEY_INSERT        = 0x014,KEY_DELETE        = 0x015,KEY_HELP          = 0x016,KEY_0             = 0x017,KEY_1             = 0x018,KEY_2             = 0x019,KEY_3             = 0x01a,KEY_4             = 0x01b,KEY_5             = 0x01c,KEY_6             = 0x01d,KEY_7             = 0x01e,KEY_8             = 0x01f,KEY_9             = 0x020,KEY_A             = 0x021,KEY_B             = 0x022,KEY_C             = 0x023,KEY_D             = 0x024,KEY_E             = 0x025,KEY_F             = 0x026,KEY_G             = 0x027,KEY_H             = 0x028,KEY_I             = 0x029,KEY_J             = 0x02a,KEY_K             = 0x02b,KEY_L             = 0x02c,KEY_M             = 0x02d,KEY_N             = 0x02e,KEY_O             = 0x02f,KEY_P             = 0x030,KEY_Q             = 0x031,KEY_R             = 0x032,KEY_S             = 0x033,KEY_T             = 0x034,KEY_U             = 0x035,KEY_V             = 0x036,KEY_W             = 0x037,KEY_X             = 0x038,KEY_Y             = 0x039,KEY_Z             = 0x03a,KEY_TILDE         = 0x03b,KEY_MINUS         = 0x03c,KEY_EQUALS        = 0x03d,KEY_LBRACKET      = 0x03e,KEY_RBRACKET      = 0x03f,KEY_BACKSLASH     = 0x040,KEY_SEMICOLON     = 0x041,KEY_APOSTROPHE    = 0x042,KEY_COMMA         = 0x043,KEY_PERIOD        = 0x044,KEY_SLASH         = 0x045,KEY_NUMPAD0       = 0x046,KEY_NUMPAD1       = 0x047,KEY_NUMPAD2       = 0x048,KEY_NUMPAD3       = 0x049,KEY_NUMPAD4       = 0x04a,KEY_NUMPAD5       = 0x04b,KEY_NUMPAD6       = 0x04c,KEY_NUMPAD7       = 0x04d,KEY_NUMPAD8       = 0x04e,KEY_NUMPAD9       = 0x04f,KEY_MULTIPLY      = 0x050,KEY_ADD           = 0x051,KEY_SEPARATOR     = 0x052,KEY_SUBTRACT      = 0x053,KEY_DECIMAL       = 0x054,KEY_DIVIDE        = 0x055,KEY_NUMPADENTER   = 0x056,KEY_F1            = 0x057,KEY_F2            = 0x058,KEY_F3            = 0x059,KEY_F4            = 0x05a,KEY_F5            = 0x05b,KEY_F6            = 0x05c,KEY_F7            = 0x05d,KEY_F8            = 0x05e,KEY_F9            = 0x05f,KEY_F10           = 0x060,KEY_F11           = 0x061,KEY_F12           = 0x062,KEY_F13           = 0x063,KEY_F14           = 0x064,KEY_F15           = 0x065,KEY_F16           = 0x066,KEY_F17           = 0x067,KEY_F18           = 0x068,KEY_F19           = 0x069,KEY_F20           = 0x06a,KEY_F21           = 0x06b,KEY_F22           = 0x06c,KEY_F23           = 0x06d,KEY_F24           = 0x06e,KEY_NUMLOCK       = 0x06f,KEY_SCROLLLOCK    = 0x070,KEY_LCONTROL      = 0x071,KEY_RCONTROL      = 0x072,KEY_LALT          = 0x073,KEY_RALT          = 0x074,KEY_LSHIFT        = 0x075,KEY_RSHIFT        = 0x076,KEY_WIN_LWINDOW   = 0x077,KEY_WIN_RWINDOW   = 0x078,KEY_WIN_APPS      = 0x079,KEY_OEM_102       = 0x080,KEY_MAC_OPT       = 0x090,KEY_MAC_LOPT      = 0x091,KEY_MAC_ROPT      = 0x092,KEY_BUTTON0       = 0x0100,KEY_BUTTON1       = 0x0101,KEY_BUTTON2       = 0x0102,KEY_BUTTON3       = 0x0103,KEY_BUTTON4       = 0x0104,KEY_BUTTON5       = 0x0105,KEY_BUTTON6       = 0x0106,KEY_BUTTON7       = 0x0107,KEY_BUTTON8       = 0x0108,KEY_BUTTON9       = 0x0109,KEY_BUTTON10      = 0x010A,KEY_BUTTON11      = 0x010B,KEY_BUTTON12      = 0x010C,KEY_BUTTON13      = 0x010D,KEY_BUTTON14      = 0x010E,KEY_BUTTON15      = 0x010F,KEY_BUTTON16      = 0x0110,KEY_BUTTON17      = 0x0111,KEY_BUTTON18      = 0x0112,KEY_BUTTON19      = 0x0113,KEY_BUTTON20      = 0x0114,KEY_BUTTON21      = 0x0115,KEY_BUTTON22      = 0x0116,KEY_BUTTON23      = 0x0117,KEY_BUTTON24      = 0x0118,KEY_BUTTON25      = 0x0119,KEY_BUTTON26      = 0x011A,KEY_BUTTON27      = 0x011B,KEY_BUTTON28      = 0x011C,KEY_BUTTON29      = 0x011D,KEY_BUTTON30      = 0x011E,KEY_BUTTON31      = 0x011F,KEY_ANYKEY         = 0xfffe
};
//
//
// 類:CSprite
// 所有精靈的基類。包括下面的靜態精靈,動態精靈,文字,特效等均由此類繼承下去
// 一般的圖片精靈從本類繼承下去即可。只有特殊的精靈,比如帶動畫的精靈,才需要從動態精靈繼承下去
//
class CSprite
{
private:char		m_szName[MAX_NAME_LEN];		// 精靈名字public:// 構造函數,需要傳入一個非空的精靈名字字符串。如果傳入的是地圖里擺放好的精靈名字,則此類即與地圖里的精靈綁定// 如果傳入的是一個新的精靈名字,則需要調用成員函數 CloneSprite,復制一份精靈對象實例,才與實際的地圖精靈關聯起來// szCloneName : 預先存在于場景中,需要克隆的精靈名字CSprite( const char *szName );CSprite( const char *szName, const char *szCloneName );virtual ~CSprite();// GetName// 返回值:返回精靈名字const char *GetName();// CloneSprite:復制(創建)一個精靈。精靈的創建方式:先在地圖中擺放一個精靈做為模板,設置好各項參數,然后在代碼里使用此函數克隆一個實例// 返回值:true表示克隆成功,false克隆失敗。失敗的原因可能是在地圖中未找到對應名字的精靈// 參數 szSrcName:地圖中用做模板的精靈名字//bool		CloneSprite( const char *szSrcName );// DeleteSprite:在地圖中刪除與本對象實例關聯的精靈//void		DeleteSprite();// SetSpriteVisible:設置精靈隱藏或者顯示(可見不可見)// 參數 bVisible:true 可見 false不可見//void		SetSpriteVisible( const bool bVisible );// IsSpriteVisible:獲取該精靈當前是否可見//bool		IsSpriteVisible();// SetSpriteEnable:禁止或者啟用該精靈。被禁止的精靈將不參與任何響應,包括不移動,沒有碰撞等,僅僅是在地圖中顯示// 參數 bEnable:true啟用 false禁止//void		SetSpriteEnable( const bool bEnable );// SetSpriteScale:設置精靈的縮放值// 參數 fScale:縮放值。大于0的值//void		SetSpriteScale( const float fScale );// IsPointInSprite:判斷某個坐標點是否位于精靈內部// 參數 fPosX:X坐標點// 參數 fPosY:Y坐標點//bool 		IsPointInSprite( const float fPosX, const float fPosY );// SetSpritePosition:設置精靈位置// 參數 fPosX:X坐標// 參數 fPosY:Y坐標//void		SetSpritePosition( const float fPosX, const float fPosY );// SetSpritePositionX:只設置精靈X坐標// 參數 fPosX:X坐標//void		SetSpritePositionX( const float fPosX );// SetSpritePositionY:只設置精靈Y坐標// 參數 fPosY:Y坐標//void		SetSpritePositionY( const float fPosY );// GetSpritePositionX:獲取精靈X坐標// 返回值:精靈的X坐標//float		GetSpritePositionX();// GetSpritePositionY:獲取精靈Y坐標// 返回值:精靈的Y坐標//float		GetSpritePositionY();// GetSpriteLinkPointPosX:獲取精靈鏈接點X坐標。鏈接點是依附于精靈的一個坐標點,可以在編輯器里增加或者刪除// 參數 iId:鏈接點序號,第一個為1,后面依次遞加//float		GetSpriteLinkPointPosX( const int iId );// GetSpriteLinkPointPosY:獲取精靈鏈接點Y坐標。鏈接點是依附于精靈的一個坐標點,可以在編輯器里增加或者刪除// 參數 iId:鏈接點序號,第一個為1,后面依次遞加//float		GetSpriteLinkPointPosY( const int iId );// SetSpriteRotation:設置精靈的旋轉角度// 參數 fRot:旋轉角度,范圍0 - 360//void		SetSpriteRotation( const float fRot );// GetSpriteRotation:獲取精靈的旋轉角度// 返回值:精靈的旋轉角度//float		GetSpriteRotation();// SetSpriteAutoRot:設置精靈按照指定速度自動旋轉// 參數 fRotSpeed:旋轉速度//void 		SetSpriteAutoRot( const float fRotSpeed );// SetSpriteWidth:設置精靈外形寬度// 參數 fWidth:寬度值,大于0//void		SetSpriteWidth( const float fWidth );// GetSpriteWidth:獲取精靈外形寬度// 返回值:精靈寬度值//float		GetSpriteWidth();// SetSpriteHeight:設置精靈外形高度// 參數 fHeight:精靈高度值//void		SetSpriteHeight( const float fHeight );// GetSpriteHeight:獲取精靈外形高度// 返回值:精靈高度值//float		GetSpriteHeight();// SetSpriteFlipX:設置精靈圖片X方向翻轉顯示// 參數 bFlipX:true 翻轉 false不翻轉(恢復原來朝向)//void		SetSpriteFlipX( const bool bFlipX );// GetSpriteFlipX:獲取當前精靈圖片X方向是否是翻轉顯示// 返回值:true 翻轉 false不翻轉//bool		GetSpriteFlipX();// SetSpriteFlipY:設置精靈圖片Y方向翻轉顯示// 參數 bFlipY:true 翻轉 false不翻轉(恢復原來朝向)//void		SetSpriteFlipY( const bool bFlipY );// GetSpriteFlipY:獲取當前精靈圖片Y方向是否是翻轉顯示// 返回值:true 翻轉 false不翻轉//bool		GetSpriteFlipY();// SetSpriteFlip:同時設置精靈翻轉X及Y方向// 參數 bFlipX:true 翻轉 false不翻轉(恢復原來朝向)// 參數 bFlipY:true 翻轉 false不翻轉(恢復原來朝向)//void		SetSpriteFlip( const bool bFlipX, const bool bFlipY );// SetSpriteLifeTime:設置精靈的生命時長,時間到了之后將自動被刪除// 參數 fLifeTime:生命時長,單位 秒//void		SetSpriteLifeTime( const float fLifeTime );// GetSpriteLifeTime:獲取精靈生命時長// 返回值:生命時長,單位 秒//float		GetSpriteLifeTime();	// SpriteMoveTo:讓精靈按照給定速度移動到給定坐標點// 參數 fPosX:移動的目標X坐標值// 參數 fPosY:移動的目標Y坐標值// 參數 fSpeed:移動速度// 參數 bAutoStop:移動到終點之后是否自動停止//void		SpriteMoveTo( const float fPosX, const float fPosY, const float fSpeed, const bool bAutoStop );// SpriteRotateTo:讓精靈按照給定速度旋轉到給定的角度// 參數 fRotation:給定的目標旋轉值// 參數 fRotSpeed:旋轉速度// 參數 bAutoStop:旋轉到終點之后是否自動停止//void		SpriteRotateTo( const float fRotation, const float fRotSpeed, const bool bAutoStop );// SetSpriteWorldLimit:設置精靈的世界邊界坐標限制及碰撞模式// 參數 Limit:碰撞到世界邊界之后的響應模式,如果為OFF,則是關閉世界邊界碰撞。其它值見 EWorldLimit// 參數 fLeft:邊界的左邊X坐標// 參數 fTop:邊界的上邊Y坐標// 參數 fRight:邊界的右邊X坐標// 參數 fBottom:邊界的下邊Y坐標//void		SetSpriteWorldLimit( const EWorldLimit Limit, const float fLeft, const float fTop, const float fRight, const float fBottom );// SetSpriteWorldLimitMode:設置精靈的世界邊界碰撞模式// 參數 Limit:碰撞到世界邊界之后的響應模式,如果為OFF,則是關閉世界邊界碰撞。其它值見 EWorldLimit//void		SetSpriteWorldLimitMode( const EWorldLimit Limit );// SetSpriteWorldLimitMin:設置精靈的世界邊界上邊及左邊坐標限制// 參數 fLeft:邊界的左邊X坐標// 參數 fTop:邊界的上邊Y坐標//void		SetSpriteWorldLimitMin( const float fLeft, const float fTop );// SetSpriteWorldLimitMax:設置精靈的世界邊界下邊及右邊坐標限制// 參數 fRight:邊界的右邊X坐標// 參數 fBottom:邊界的下邊Y坐標//void		SetSpriteWorldLimitMax( const float fRight, const float fBottom );// GetSpriteWorldLimitLeft:獲取精靈世界邊界左邊界限制//float		GetSpriteWorldLimitLeft();// GetSpriteWorldLimitTop:獲取精靈世界邊界上邊界限制//float		GetSpriteWorldLimitTop();// GetSpriteWorldLimitRight:獲取精靈世界邊界右邊界限制//float		GetSpriteWorldLimitRight();// GetSpriteWorldLimitBottom:獲取精靈世界邊界下邊界限制//float		GetSpriteWorldLimitBottom();// SetSpriteCollisionSend:設置精靈是否可以發送(產生)碰撞// 精靈的碰撞方式為:當A移動中碰上B時,如果A是可以產生碰撞的,B是可以接受碰撞的,則這2個物體會產生碰撞,精靈碰撞的API將被調用。否則無碰撞發生// 參數 bSend:true 可以產生 false 不產生//void 		SetSpriteCollisionSend( const bool bSend );// SetSpriteCollisionReceive:設置精靈是否可以接受碰撞// 精靈的碰撞方式為:當A移動中碰上B時,如果A是可以產生碰撞的,B是可以接受碰撞的,則這2個物體會產生碰撞,精靈碰撞的API將被調用。否則無碰撞發生// 參數 bReceive:true 可以接受 false 不接受//void 		SetSpriteCollisionReceive( const bool bReceive );// SetSpriteCollisionActive:同時設置精靈是否可以產生及接受碰撞// 精靈的碰撞方式為:當A移動中碰上B時,如果A是可以產生碰撞的,B是可以接受碰撞的,則這2個物體會產生碰撞,精靈碰撞的API將被調用。否則無碰撞發生// 參數 bSend:true 可以產生 false 不產生// 參數 bReceive:true 可以接受 false 不接受//void 		SetSpriteCollisionActive( const bool bSend, const bool bReceive );// SetSpriteCollisionPhysicsSend:設置精靈是否可以發送(產生)物理碰撞// 參數 bSend:true 可以產生 false 不產生//void 		SetSpriteCollisionPhysicsSend( const bool bSend );// SetSpriteCollisionPhysicsReceive:設置精靈是否可以接受物理碰撞// 參數 bReceive:true 可以接受 false 不接受//void 		SetSpriteCollisionPhysicsReceive( const bool bReceive );// GetSpriteCollisionSend:獲取精靈當前是否是可以產生碰撞// 返回值:true 可以產生 false 不產生//bool 		GetSpriteCollisionSend();// GetSpriteCollisionReceive:獲取精靈當前是否是可以接受碰撞// 返回值:true 可以接受 false 不接受//bool 		GetSpriteCollisionReceive();// SetSpriteCollisionResponse:設置精靈與精靈的碰撞響應模式// 參數 Response:響應模式,如果為OFF,則為關閉碰撞響應,碰撞API將不會被調用。其它值見 ECollisionResponse//void		SetSpriteCollisionResponse( const ECollisionResponse Response );// SetSpriteCollisionMaxIterations:設置精靈碰撞之后的最大反彈次數// 參數 iTimes:反彈次數//void		SetSpriteCollisionMaxIterations( const int iTimes );// SetSpriteForwardMovementOnly:設置精靈是否只能朝前移動// 參數 bForward:true 只能朝前移動 false 可以朝其他方向移動//void		SetSpriteForwardMovementOnly( const bool bForward );// GetSpriteForwardMovementOnly:獲取精靈當前是否只能朝前移動// 返回值:true 只能朝前移動 false 可以朝其它方向移動//bool		GetSpriteForwardMovementOnly();// SetSpriteForwardSpeed:設置精靈向前的速度// 參數 fSpeed:速度//void		SetSpriteForwardSpeed( const float fSpeed );// SetSpriteImpulseForce:設置精靈瞬間推力// 參數 fForceX:X方向推力大小// 參數 fForceY:Y方向推力大小// 參數 bGravitic:是否計算重力//void 		SetSpriteImpulseForce( const float fForceX, const float fForceY, const bool bGravitic );// SetSpriteImpulseForcePolar:按角度朝向設置精靈瞬間推力// 參數 fPolar:角度朝向// 參數 fForce:推力大小// 參數 bGravitic:是否計算重力//void 		SetSpriteImpulseForcePolar( const float fPolar, const float fForce, const bool bGravitic );// SetSpriteConstantForceX:設置精靈X方向常量推力// 參數 fForceX:X方向推力大小//void 		SetSpriteConstantForceX( const float fForceX );// SetSpriteConstantForceY:設置精靈Y方向常量推力// 參數 fForceY:Y方向推力大小//void 		SetSpriteConstantForceY( const float fForceY );// SetSpriteConstantForceGravitic:精靈在計算常量推力的時候,是否計算重力// 參數 bGravitic:是否計算重力//void 		SetSpriteConstantForceGravitic( const bool bGravitic );// SetSpriteConstantForce:設置精靈常量推力// 參數 fForceX:X方向推力大小// 參數 fForceY:Y方向推力大小// 參數 bGravitic:是否計算重力//void 		SetSpriteConstantForce( const float fForceX, const float fForceY, const bool bGravitic );// SetSpriteConstantForcePolar:按角度朝向設置精靈常量推力// 參數 fPolar:角度朝向// 參數 fForce:推力大小// 參數 bGravitic:是否計算重力//void 		SetSpriteConstantForcePolar( const float fPolar, const float fForce, const bool bGravitic );// StopSpriteConstantForce:停止精靈常量推力//void 		StopSpriteConstantForce();// SetSpriteForceScale:按倍數縮放精靈當前受的推力// 參數 fScale:縮放值//void 		SetSpriteForceScale( const float fScale );// SetSpriteAtRest:暫停/繼續精靈的各種受力計算// 參數 bRest:true 暫停 false 繼續//void 		SetSpriteAtRest( const bool bRest );// GetSpriteAtRest:獲取精靈當前是否在暫停中// 返回值:true 暫停中 false 正常//bool 		GetSpriteAtRest( );// SetSpriteFriction:設置精靈摩擦力// 參數 fFriction:摩擦力大小//void 		SetSpriteFriction( const float fFriction );// SetSpriteRestitution:設置精靈彈力// 參數 fRestitution:彈力值大小//void 		SetSpriteRestitution( const float fRestitution );// SetSpriteMass:設置精靈質量// 參數 fMass:質量大小//void 		SetSpriteMass( const float fMass );// GetSpriteMass:獲取精靈質量// 返回值 :質量大小//float 		GetSpriteMass();// SetSpriteAutoMassInertia:開啟或者關閉精靈慣性// 參數 bStatus:true 開啟 false 關閉//void 		SetSpriteAutoMassInertia( const bool bStatus );// SetSpriteInertialMoment:設置精靈慣性大小// 參數 fInert:慣性大小//void 		SetSpriteInertialMoment( const float fInert );// SetSpriteDamping:設置精靈衰減值// 參數 fDamp:衰減值大小//void 		SetSpriteDamping( const float fDamp );// SetSpriteImmovable:設置精靈是否不可移動// 參數 bImmovable:true 不可以移動 false 可以移動//void 		SetSpriteImmovable( const bool bImmovable );// GetSpriteImmovable:獲取精靈當前是否不可以移動// 返回值:true 不可以移動 false 可以移動//bool 		GetSpriteImmovable();// SetSpriteLinearVelocity:設置精靈移動速度// 參數 fVelX:X方向速度// 參數 fVelY:Y方向速度//void 		SetSpriteLinearVelocity( const float fVelX, const float fVelY );// SetSpriteLinearVelocityX:設置精靈X方向移動速度// 參數 fVelX:X方向速度//void 		SetSpriteLinearVelocityX( const float fVelX );// SetSpriteLinearVelocityY:設置精靈Y方向移動速度// 參數 fVelY:Y方向速度//void 		SetSpriteLinearVelocityY( const float fVelY );// SetSpriteLinearVelocityPolar:按角度朝向設置精靈移動速度// 參數 fSpeed:移動速度// 參數 fPolar:角度朝向//void 		SetSpriteLinearVelocityPolar( const float fSpeed, const float fPolar );// SetSpriteAngularVelocity:設置精靈角度旋轉速度// 參數 fAngular:角度旋轉速度//void 		SetSpriteAngularVelocity( const float fAngular );// SetSpriteMinLinearVelocity:設置精靈最小速度// 參數 fMin:最小速度值//void 		SetSpriteMinLinearVelocity( const float fMin );// SetSpriteMaxLinearVelocity:設置精靈最大速度// 參數 fMax:最大速度值//void 		SetSpriteMaxLinearVelocity( const float fMax );// SetSpriteMinAngularVelocity:設置精靈最小角速度// 參數 fMin:最小角速度//void 		SetSpriteMinAngularVelocity( const float fMin );// SetSpriteMaxAngularVelocity:設置精靈最大角速度// 參數 fMax:最大角速度//void 		SetSpriteMaxAngularVelocity( const float fMax );// GetSpriteLinearVelocityX:獲取精靈X方向速度// 返回值:X方向速度//float 		GetSpriteLinearVelocityX();// GetSpriteLinearVelocityY:獲取精靈Y方向速度// 返回值:Y方向速度//float 		GetSpriteLinearVelocityY();// SpriteMountToSprite:將一個精靈綁定到另一個精靈上,暫時的成為另一個精靈的一部分,跟隨其運動等// 參數 szDstName:承載綁定的母體精靈名字// 參數 fOffSetX:綁定偏移X// 參數 fOffsetY:綁定偏移Y// 返回值:返回一個綁定ID//int			SpriteMountToSprite( const char *szDstName, const float fOffSetX, const float fOffsetY );// SpriteMountToSpriteLinkPoint:將一個精靈綁定到另一個精靈上,綁定位置為指定的鏈接點,暫時的成為另一個精靈的一部分,跟隨其運動等// 參數 szDstName:承載綁定的母體精靈名字// 參數 iPointId:鏈接點序號// 返回值:返回一個綁定ID//int			SpriteMountToSpriteLinkPoint( const char *szDstName, const int iPointId );// SetSpriteMountRotation:設置精靈的綁定朝向,即相對于母體的朝向// 參數 fRot:角度朝向,0 - 360//void		SetSpriteMountRotation( const float fRot );// GetSpriteMountRotation:獲取精靈的綁定朝向,即相對于母體的朝向// 返回值:角度朝向//float		GetSpriteMountRotation();// SetSpriteAutoMountRotation:設置精靈綁定之后自動旋轉// 參數 fRot:旋轉速度//void		SetSpriteAutoMountRotation( const float fRot );// GetSpriteAutoMountRotation:獲取精靈綁定之后的自動旋轉值// 返回值:旋轉速度//float		GetSpriteAutoMountRotation();// SetSpriteMountForce:綁定至另一個精靈時,附加的作用力// 參數 fFroce:作用力//void		SetSpriteMountForce( const float fForce );// SetSpriteMountTrackRotation:綁定的精靈是否跟隨母體旋轉// 參數 bTrackRotation:true 跟隨 false 不跟隨//void		SetSpriteMountTrackRotation( const bool bTrackRotation );// SetSpriteMountOwned:母體被刪除的時候,綁定的精靈是否也跟著被刪除// 參數 bMountOwned:true 跟著 false 不跟著//void		SetSpriteMountOwned( const bool bMountOwned );// SetSpriteMountInheritAttributes:綁定的時候,是否繼承母體的屬性// 參數 bInherAttr:true 繼承 false 不繼承//void		SetSpriteMountInheritAttributes( const bool bInherAttr );// SpriteDismount:將已經綁定的精靈進行解綁//void		SpriteDismount();// GetSpriteIsMounted:判斷精靈是否綁定在另一個精靈上// 返回值:true 綁定 false 不綁定//bool		GetSpriteIsMounted();// GetSpriteMountedParent:獲取綁定的母體精靈的名字// 返回值:母體精靈名字,如果未綁定,則返回空字符串//const char*	GetSpriteMountedParent();// SetSpriteColorRed:更改精靈顯示顏色中的紅色。默認精靈的紅綠藍三顏色的值均為255,修改其中一項將可以改變其顏色// 參數 iCol:顏色范圍 0 - 255//void		SetSpriteColorRed( const int iCol );// SetSpriteColorGreen:更改精靈顯示顏色中的綠色。默認精靈的紅綠藍三顏色的值均為255,修改其中一項將可以改變其顏色// 參數 iCol:顏色范圍 0 - 255//void		SetSpriteColorGreen( const int iCol );// SetSpriteColorBlue:更改精靈顯示顏色中的藍色。默認精靈的紅綠藍三顏色的值均為255,修改其中一項將可以改變其顏色// 參數 iCol:顏色范圍 0 - 255//void		SetSpriteColorBlue( const int iCol );// SetSpriteColorAlpha:設置精靈透明度// 參數 iCol:透明度,值0 - 255,從完全透明至完全不透明//void		SetSpriteColorAlpha( const int iCol );// GetSpriteColorRed:獲取精靈顯示顏色中的紅色值// 返回值:顏色值//int			GetSpriteColorRed();// GetSpriteColorGreen:獲取精靈顯示顏色中的綠色值// 返回值:顏色值//int			GetSpriteColorGreen();// GetSpriteColorBlue:獲取精靈顯示顏色中的藍色值// 返回值:顏色值//int			GetSpriteColorBlue();// GetSpriteColorAlpha:獲取精靈透明度// 返回值:透明度//int			GetSpriteColorAlpha();
};
//
//
// 類:CStaticSprite
// 靜態精靈(靜態圖片顯示),從CSprite精靈基類繼承下來,比基類多了幾個控制精靈圖片顯示的函數
// 
class CStaticSprite : public CSprite
{
public:CStaticSprite( const char *szName );CStaticSprite( const char *szName, const char *szCloneName );~CStaticSprite();// SetStaticSpriteImage:設置/更改靜態精靈的顯示圖片// 參數 szImageName:圖片名字// 參數 iFrame:該圖片的顯示幀數。為編輯器預覽圖里顯示的1/N,范圍為 0 到 N - 1//void		SetStaticSpriteImage( const char *szImageName, const int iFrame );// SetStaticSpriteFrame:設置靜態精靈當前圖片的顯示幀數// 參數 iFrame:該圖片的顯示幀數。為編輯器預覽圖里顯示的1/N,范圍為 0 到 N - 1//void		SetStaticSpriteFrame( const int iFrame );//// GetStaticSpriteImage:獲取精靈當前顯示的圖片名字// 返回值:圖片名字//const char* GetStaticSpriteImage();// GetStaticSpriteFrame:獲取精靈當前顯示的圖片幀數// 返回值:幀數//int			GetStaticSpriteFrame();
};
//
//
// 類:CAnimateSprite
// 動態精靈(帶圖片動畫),從CSprite精靈基類繼承下來,比基類多了幾個控制圖片動畫的函數
//
class CAnimateSprite : public CSprite
{
public:CAnimateSprite( const char *szName );CAnimateSprite( const char *szName, const char *szCloneName );~CAnimateSprite();// SetAnimateSpriteFrame:設置動態精靈的動畫幀數// 參數 iFrame:動畫幀數//void		SetAnimateSpriteFrame( const int iFrame );// GetAnimateSpriteAnimationName:獲取動態精靈當前動畫名字// 返回值:動畫名字//const char* GetAnimateSpriteAnimationName();// GetAnimateSpriteAnimationTime:獲取動畫精靈當前動畫時間長度// 返回值:長度,單位秒//float		GetAnimateSpriteAnimationTime();// IsAnimateSpriteAnimationFinished:判斷動態精靈當前動畫是否播放完畢,只針對非循環動畫而言// 返回值:true 完畢 false 未完畢//bool		IsAnimateSpriteAnimationFinished();// AnimateSpritePlayAnimation:動畫精靈播放動畫// 參數 szAnim:動畫名字// 參數 bRestore:播放完畢后是否恢復當前動畫// 返回值:是否播放成功//bool		AnimateSpritePlayAnimation( const char *szAnim, const bool bRestore );
};
//
//
// 類:CTextSprite
// 文字精靈,亦屬于精靈中的一種。基本用法:在地圖里擺放一個“文字”物體,起個名字
// 然后在代碼里定義一個文字精靈的對象實例,將此名字做為構造函數的參數,然后調用對應的成員函數更新文字顯示即可
//
class CTextSprite : public CSprite
{
public:CTextSprite( const char *szName );CTextSprite( const char *szName, const char *szCloneName );~CTextSprite();// SetTextValue:文字精靈顯示某個數值// 參數 iValue:要顯示的數值//void		SetTextValue( int iValue );// SetTextValueFloat:文字精靈顯示某個浮點數值// 參數 fValue:要顯示的數值//void		SetTextValueFloat( float fValue );// SetTextString:文字精靈顯示某個字符串文字// 參數 szStr:要顯示的字符串//void		SetTextString( const char *szStr );// SetTextChar:文字精靈顯示某個字符// 參數 szChar:要顯示的字符//void		SetTextChar( char szChar );
};
/
//
// 類:CEffect
// 特效精靈,屬于精靈中的一種。用法和文字精靈一樣,先在地圖里擺放一個特效做為模板,并命名
// 然后在代碼里定義一個特效精靈的對象實例即可使用
class CEffect : public CSprite
{char		m_szCloneName[MAX_NAME_LEN];		// 在地圖中預先擺放好的用做克隆的特效名字float		m_fTime;							// 非循環特效:生命時長;循環特效:循環時長
public:// 構造函數 // 參數 szCloneName:地圖里擺放好的特效名字// 參數 szMyName:新的特效名字。注意:如果是循環特效,那么必須一個循環特效就定義一個對象實例,用不同的名字//                否則如果一個同名的循環特效被播放多次,在刪除的時候會出問題。非循環特效則可以用一個實例多次播放// 參數 fTime:非循環特效:生命時長;循環特效:循環時長//CEffect( const char *szCloneName, const char *szMyName, const float fTime );~CEffect();// GetCloneName:獲取用做克隆的特效名字// const char*	GetCloneName();// GetTime:返回特效循環時長或者生命時長//float		GetTime();// PlayEffect:播放一個不循環的特效,播放完畢之后該特效自動刪除// 播放非循環特效的時候,可以使用一個CEffect的對象實例,播放多個特效// 參數 fPosX:播放的X坐標// 參數 fPosY:播放的Y坐標// 參數 fRotation:播放的角度朝向//void		PlayEffect( const float fPosX, const float fPosY, const float fRotation);// PlayLoopEffect:播放一個循環特效,不需要該特效的時候,需要自己調用API進行刪除// 參數 fPosX:播放的X坐標// 參數 fPosY:播放的Y坐標// 參數 fRotation:播放的角度朝向//void		PlayLoopEffect( const float fPosX, const float fPosY, const float fRotation);// DeleteEffect:刪除一個正在播放的特效,只有循環特效才需要手動刪除//void		DeleteEffect(); 
};
/
//
// 類:CSound
// 播放聲音的類,定義一個對象實例,調用播放函數即可實現聲音的播放
// 
class CSound
{
private:char		m_szName[MAX_NAME_LEN];	// 聲音名int			m_iSoundId;				// 引擎播放聲音的時候,返回的IDbool		m_bLoop;				// bLoop : 是否循環播放。如果為循環音效,則在CSound實例析構的時候,自動調用StopSound停止此聲音的播放float		m_fVolume;				// 音量大小,0-1。1為聲音文件的原聲大小public:// 構造函數// 參數 szName:聲音的路徑及名稱,具體值請在編輯器的資源 -> 添加聲音那里查看本項目里的聲音資源,完整按照那個路徑值填寫即可// 參數 bLoop:是否循環播放。如果是循環播放的聲音,需要手動調用API停止播放// 參數 fVolume:音量大小,0-1。1為聲音文件的原聲大小//CSound( const char *szName, const bool bLoop, const float fVolume );~CSound();// GetName:獲取聲音名字//const char*	GetName();// PlaySound:播放該聲音//void		PlaySound();// StopSound:停止該聲音的播放// 非循環的播放完之后將自動停止,所以一般不需要調用此函數。只有循環的聲音才需要調用。對于循環音效,在析構函數里也會自動調用此函數//void		StopSound();// StopAllSound:停止播放所有聲音// 靜態函數,可以以此種方式調用:CSound::StopAllSound,以停止游戲中所有正在播放的聲音//static void	StopAllSound();
};//
// 類:CSystem
// 系統相關功能的類. 函數調用方法 CSystem::函數名();
//
class CSystem
{
public:CSystem();~CSystem();// OnMouseMove:鼠標移動后將被調用的函數,可在此函數體里(Main.cpp)增加自己的響應代碼// 參數 fMouseX, fMouseY:為鼠標當前坐標//static void		OnMouseMove( const float fMouseX, const float fMouseY );// OnMouseClick:鼠標按下后將被調用的函數,可在此函數體里(Main.cpp)增加自己的響應代碼// 參數 iMouseType:鼠標按鍵值,見 enum MouseTypes 定義// 參數 fMouseX, fMouseY:為鼠標當前坐標//static void		OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY );// OnMouseUp:鼠標按下后將被調用的函數,可在此函數體里(Main.cpp)增加自己的響應代碼// 參數 iMouseType:鼠標按鍵值,見 enum MouseTypes 定義// 參數 fMouseX, fMouseY:為鼠標當前坐標//static void		OnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY );// OnKeyDown:鍵盤被按下后將被調用的函數,可在此函數體里(Main.cpp)增加自己的響應代碼// 參數 iKey:被按下的鍵,值見 enum KeyCodes 宏定義// 參數 bAltPress, bShiftPress,bCtrlPress:鍵盤上的功能鍵Alt,Ctrl,Shift當前是否也處于按下狀態//static void		OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress );// OnKeyUp:鍵盤按鍵彈起后將被調用的函數,可在此函數體里(Main.cpp)增加自己的響應代碼// 參數 iKey:彈起的鍵,值見 enum KeyCodes 宏定義//static void		OnKeyUp( const int iKey );// OnSpriteColSprite:精靈與精靈碰撞后將被調用的函數,可在此函數體里(Main.cpp)增加自己的響應代碼// 精靈之間要產生碰撞,必須在編輯器或者代碼里設置精靈發送及接受碰撞// 參數 szSrcName:發起碰撞的精靈名字// 參數 szTarName:被碰撞的精靈名字//static void		OnSpriteColSprite( const char *szSrcName, const char *szTarName );// OnSpriteColWorldLimit:精靈與世界邊界碰撞后將被調用的函數,可在此函數體里(Main.cpp)增加自己的響應代碼// 精靈之間要產生碰撞,必須在編輯器或者代碼里設置精靈的世界邊界限制// 參數 szName:碰撞到邊界的精靈名字// 參數 iColSide:碰撞到的邊界 0 左邊,1 右邊,2 上邊,3 下邊//static void		OnSpriteColWorldLimit( const char *szName, const int iColSide );// MakeSpriteName: 將前面的字符串與后面的數字整合成一個字符串。// 參數 szPrev:一個非空字符串,最長不能超過20個英文字符。名字前面的字符。// 參數 iId:一個數字// 返回值:返回一個字符串,比如傳入("xxx", 2),則返回"xxx2"//static char* MakeSpriteName(const char *szPrev, const int iId);// CursorOff:關閉鼠標不顯示。此API隱藏的是整個Windows的鼠標,除非調用開啟鼠標的API dCursorOn,否則鼠標將一直不顯示//static void		CursorOff();// CursorOn:開啟鼠標顯示。將API dCursorOff關閉的鼠標重新開啟顯示//static void		CursorOn();// IsCursorOn:當前鼠標是開啟還是關閉。對應的是用API dCursorOff和dCursorOn開啟或者關閉的操作// 返回值:true為開啟狀態,false為關閉狀態//static bool		IsCursorOn();// ShowCursor:隱藏/顯示鼠標。此API只是隱藏本程序窗口內的鼠標,移動到窗口外的時候,鼠標還是會顯示// 參數 bShow:true 為顯示,false 為隱藏//static void		ShowCursor( const bool bShow );// IsShowCursor:當前鼠標是顯示還是隱藏。對應的是用API ShowCursor隱藏或者顯示的操作// 返回值:true為開啟狀態,false為關閉狀態//static bool		IsShowCursor();// SetWindowTitle:設置窗口名字/標題// 參數 szTitle:非空字符串//static void		SetWindowTitle( const char *szTitle );// ResizeWindow:更改窗口大小// 參數 iWidth:寬度,大于0小于等于1920// 參數 iHeight:高度,大于0小于等于1080//static void		ResizeWindow(int iWidth, int iHeight);// GetHwnd:獲取窗口句柄// 返回值:窗口句柄//static void		*GetHwnd();// Random:獲取一個大于等于0的隨機數// 返回值:int,范圍0 - 2147483648//static int		Random();// RandomRange:獲取一個位于參數1到參數2之間的隨機數// 返回值:int,范圍iMin - iMax// 參數 iMin:小于iMax的整數// 參數 iMax:大于iMin的整數//static int		RandomRange( const int iMin, const int iMax );// CalLineRotation:計算兩點連線的直線的旋轉角度// 返回值:角度,范圍0 - 360// 參數 fStartX:起始坐標X// 參數 fStartY:起始坐標Y// 參數 fEndX:終點坐標X// 參數 fEndY:終點坐標Y//static float	CalLineRotation( const float fStartX, const float fStartY, const float fEndX, const float fEndY );// RotationToVectorX:計算某個角度對應的直線向量的X方向// 參數 fRotation:角度,范圍0 - 360// 返回值 :該直線向量的X值//static float	RotationToVectorX( const float fRotation );// RotationToVectorY:計算某個角度對應的直線向量的Y方向// 參數 fRotation:角度,范圍0 - 360// 返回值 :該直線向量的Y值//static float	RotationToVectorY( const float fRotation );// DrawLine:在兩點之間畫一條線// 參數 fStartX:起始坐標X// 參數 fStartY:起始坐標Y// 參數 fEndX:終點坐標X// 參數 fEndY:終點坐標Y// 參數 fLineWidth:線的粗細,大于等于1// 參數 iLayer:改線所在的層,與編輯器里設置的精靈的層級是同一個概念。范圍0 - 31。// 參數 iRed, iGreen, iBlue : 紅綠藍三原色的顏色值,范圍 0 - 255// 參數 iAlpha:線的透明度,范圍0-255. 0為全透明,255為不透明//static void		DrawLine( const float fStartX, const float fStartY, const float fEndX, const float fEndY, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );// DrawTriangle:畫一個三角形// 參數 fX1,fX2,fX3:三角形上三個點的X坐標// 參數 fY1,fY2,fY3:三角形上三個點的Y坐標// 參數 fLineWidth:線的粗細,大于等于1// 參數 iLayer:該三角形所在的層,與編輯器里設置的精靈的層級是同一個概念。范圍0 - 31。// 參數 iRed, iGreen, iBlue : 紅綠藍三原色的顏色值,范圍 0 - 255// 參數 iAlpha:三角形的透明度,范圍0-255. 0為全透明,255為不透明//static void		DrawTriangle( const float fX1, const float fY1, const float fX2, const float fY2, const float fX3, const float fY3, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );// DrawRect:畫一個矩形// 參數 fUpperX:左上角坐標X// 參數 fUpperY:左上角坐標Y// 參數 fLowerX:右下角坐標X// 參數 fLowerY:右下角坐標Y// 參數 fLineWidth:線的粗細,大于等于1// 參數 iLayer:該矩形所在的層,與編輯器里設置的精靈的層級是同一個概念。范圍0 - 31。// 參數 iRed, iGreen, iBlue : 紅綠藍三原色的顏色值,范圍 0 - 255// 參數 iAlpha:矩形的透明度,范圍0-255. 0為全透明,255為不透明//static void		DrawRect( const float fUpperX, const float fUpperY, const float fLowerX, const float fLowerY, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );// DrawCircle:畫一個圓// 參數 fCenterX:圓心坐標X// 參數 fCenterY:圓心坐標Y// 參數 fRadius:圓的半徑// 參數 iSegment:圓弧段數,范圍4-72. 比如傳入6,將得到一個6邊形,段數越大越圓滑,但是畫圖效率越低// 參數 fLineWidth:線的粗細,大于等于1// 參數 iLayer:該圓所在的層,與編輯器里設置的精靈的層級是同一個概念。范圍0 - 31。// 參數 iRed, iGreen, iBlue : 紅綠藍三原色的顏色值,范圍 0 - 255// 參數 iAlpha:圓的透明度,范圍0-255. 0為全透明,255為不透明//static void		DrawCircle( const float fCenterX, const float fCenterY, const float fRadius, const int iSegment, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );// GetScreenLeft:獲取世界邊界之左邊X坐標// 返回值:左邊界X坐標//static float	GetScreenLeft();// GetScreenTop:獲取世界邊界之上邊Y坐標// 返回值:上邊界Y坐標//static float	GetScreenTop();// GetScreenRight:獲取世界邊界之右邊X坐標// 返回值:右邊界X坐標//static float	GetScreenRight();// GetScreenBottom:獲取世界邊界之下邊Y坐標// 返回值:下邊界Y坐標//static float	GetScreenBottom();// LoadMap:載入新場景。注意,載入新場景的時候,舊場景的所有精靈都將被引擎刪除掉,所以所有在程序中創建、復制出來的精靈都必須在調用本API之前先刪除掉// 參數 szName:場景名字。即新建場景保存的時候取的名字,必須帶小寫的后綴 -- xxx.t2d。不用帶路徑//static void		LoadMap( const char *szName );////// 以下API為系統API,請勿自己調用////// GetTimeDelta:獲取兩次調用本函數之間的時間差// 返回值:float,單位 秒//static float	GetTimeDelta();// EngineMainLoop:引擎主循環函數。請勿自己調用//static bool		EngineMainLoop();// InitGameEngine:初始化引擎,請勿自己調用//static bool		InitGameEngine( HINSTANCE hInstance, LPSTR lpCmdLine );// ShutdownGameEngine:關閉引擎,請勿自己調用//static void		ShutdownGameEngine();
};//
#endif // _COMMON_API_H_


LessonX.h

/
//
//
//
//
/
#ifndef _LESSON_X_H_
#define _LESSON_X_H_
//
#include <Windows.h>
#include <stdio.h>
#include <vector>
#include <iostream>
using namespace std;
//using std::vector;//表明使用的是std標準庫里面的vecto.h文件/
//
// 游戲總管類。負責處理游戲主循環、游戲初始化、結束等工作
class	CGameMain
{
private:int				m_iGameState;				// 游戲狀態,0:結束或者等待開始;1:初始化;2:游戲進行中CSprite*        m_pChuizi;//錘子精靈CSprite*        m_pKaishi;//開始游戲CSprite*        m_pFengmian;//開始封面CSprite*        m_pShuoming;float           m_fGameTime;CTextSprite*	m_pTime;//時間文字CTextSprite*	m_pScore;//分數CTextSprite*    m_pDefen;//CTextSprite*	m_pfirst;CTextSprite*	m_pSecond;CTextSprite*	m_pthird;CTextSprite*	m_pDengji;//游戲等級float			m_fChuiX;	//錘子精靈的x坐標float			m_fChuiY;	//錘子精靈的y坐標int			    m_iGameScore	;			// 本局游戲當前積分值float           m_fRotateTime   ;// 錘子拍下后距離復位還差多少時間float           m_fOldRotation  ;// 錘子的初始角度CSprite*        m_pDishu; //地鼠精靈//vector<CSprite>		m_vdishu; //地鼠數組float	    m_fBaseTime	;       // 第一架飛碟出現后,距離第二架飛碟出現還剩多少時間int         m_iCount		;			// 游戲中飛碟出現的架數float		m_fScreenLeft		;// 屏幕上下左右4個邊界值float		m_fScreenRight		;float		m_fScreenTop		;float		m_fScreenBottom		;CSprite*    m_ptexiao;int sum;int defen;float  jibie;int a[4]={0,0,0,0};
public:CGameMain();            //構造函數~CGameMain();           //析構函數// Get方法int				GetGameState()											{ return m_iGameState; }// Set方法void			SetGameState( const int iState )				{ m_iGameState	=	iState; }// 游戲主循環等void			GameMainLoop( float	fDeltaTime );void			GameInit();void			GameRun( float fDeltaTime ,float jibie);void			GameEnd();void            OnKeyDown( const int iKey, const int bAltPress, const int bShiftPress, const int bCtrlPress);  //空格開始控制函數void            OnMouseMove(const float fMouseX,const float fMouseY);void            OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY);void            Dishu(const char* szName);void            Dengji(const int DengjiKey,float jibie);//設置游戲級別
};/
//
extern CGameMain	g_GameMain;#endif // _LESSON_X_H_


以上是兩個頭文件定義個各種變量和方法,為下面的文件做了鋪墊

LessonX.cpp

/
//
//
//
//
/
#include <Stdio.h>
#include <algorithm>
#include "CommonClass.h"
#include "LessonX.h"
#include "Texiao.h"
#include "iostream"
using namespace std;//
//
CGameMain		g_GameMain;//==============================================================================
//
// 大體的程序流程為:GameMainLoop函數為主循環函數,在引擎每幀刷新屏幕圖像之后,都會被調用一次。//==============================================================================
//
// 構造函數
CGameMain::CGameMain()
{m_fGameTime			    =0.f;m_iGameScore			=0;m_fChuiX				=0.f;m_fChuiY				=0.f;m_pKaishi				=new CSprite("kaishi");m_pChuizi				=new CSprite("chuizi");m_pTime				    =new CTextSprite("time");m_pScore				=new CTextSprite("Score");m_pDefen                =new CTextSprite("defen");m_pfirst                =new CTextSprite("First");m_pSecond               =new CTextSprite("Second");m_pthird                =new CTextSprite("Third");m_pDishu                =new CSprite("dishu");m_ptexiao               =new CSprite("texiao");m_pDengji               =new CTextSprite("dengji");//游戲等級選擇及顯示m_pFengmian             =new CSprite("fengmian");m_psorry                =new CSprite("sorry");m_pShuoming             =new CSprite("shuoming");m_pwenzi                =new CTextSprite("wenzi");m_pyanhua               =new CSprite("yanhua");m_fRotateTime           =0.f;m_fOldRotation          =0.f;m_iGameState			=0;//四個邊界值m_fScreenLeft			=0.f;m_fScreenRight			=0.f;m_fScreenTop			=0.f;m_fScreenBottom			=0.f;m_fBaseTime             =0.f;//計分sum                     =0;//游戲等級jibie                   =0.5f;gs = 0;
}
//==============================================================================
//
// 析構函數
CGameMain::~CGameMain()
{
}//==============================================================================
//
// 游戲主循環,此函數將被不停的調用,引擎每刷新一次屏幕,此函數即被調用一次
// 用以處理游戲的開始、進行中、結束等各種狀態.
// 函數參數fDeltaTime : 上次調用本函數到此次調用本函數的時間間隔,單位:秒
void CGameMain::GameMainLoop( float	fDeltaTime )
{switch( GetGameState() ){// 初始化游戲,清空上一局相關數據case 1:{cout<<1<<endl;GameInit();SetGameState(2); // 初始化之后,將游戲狀態設置為進行中}break;// 游戲進行中,處理各種游戲邏輯case 2://判斷游戲時間是否大于0,是的話,顯示游戲剩余時間。{// TODO 修改此處游戲循環條件,完成正確游戲邏輯cout<<2<<endl;if( m_fGameTime>0 ){GameRun( fDeltaTime ,jibie);}else // 游戲結束。調用游戲結算函數,并把游戲狀態修改為結束狀態{SetGameState(0);GameEnd();}}break;// 游戲結束/等待按空格鍵開始case 0:cout<<0<<endl;default:break;};
}
//=============================================================================
//
// 每局開始前進行初始化,清空上一局相關數據
void CGameMain::GameInit()
{m_fChuiX=m_pChuizi->GetSpritePositionX();m_fChuiY=m_pChuizi->GetSpritePositionY();m_fOldRotation=m_pChuizi->GetSpriteRotation();// 獲取屏幕4個邊界值m_fScreenLeft = CSystem::GetScreenLeft();m_fScreenRight = CSystem::GetScreenRight();m_fScreenTop = CSystem::GetScreenTop();m_fScreenBottom = CSystem::GetScreenBottom();sum = 0;
}
//=============================================================================
//
// 每局游戲進行中
void CGameMain::GameRun( float fDeltaTime ,float jibie)
{m_fGameTime-=fDeltaTime;//減少游戲時間m_pTime->SetTextValue((int)m_fGameTime);//顯示時時更新的游戲時間if(m_fRotateTime>0){m_fRotateTime-=fDeltaTime;if(m_fRotateTime<=0){m_pChuizi->SetSpriteRotation(m_fOldRotation);}}m_fBaseTime -= fDeltaTime;if(m_fBaseTime <= 0){m_fBaseTime = jibie;m_ptexiao->SetSpritePosition(-25,-45);m_pyanhua->SetSpritePosition(80,-53);Dishu("");}}
//=============================================================================
//
// 本局游戲結束
void CGameMain::GameEnd()
{//游戲時間小于等于0,則設置游戲狀態為游戲結束m_iGameState =  0;m_pChuizi->SetSpriteVisible(true);m_fGameTime =   0.f;m_pScore->SetTextValue((int)m_fGameTime);CSystem::ShowCursor(true);m_pChuizi->SetSpritePosition(m_fChuiX,m_fChuiY);/*char name[128];sprintf(name, "dishu_%d", sont);CSprite* tmpSprite1=new CSprite(name);tmpSprite1->DeleteSprite();*/m_pDishu->SetSpritePosition(-45,-45);m_psorry->SetSpritePosition(-45,-55);m_ptexiao->SetSpritePosition(-25,-45);m_pyanhua->SetSpritePosition(80,-53);defen=sum;m_pDefen->SetTextValue(defen);a[0]=sum;sort(a,a+4);m_pfirst->SetTextValue(a[3]);m_pSecond->SetTextValue(a[2]);m_pthird->SetTextValue(a[1]);m_pChuizi->SetSpriteRotation(m_fOldRotation);}
//=============================================================================
//
// 按數字鍵1、2、3選擇游戲等級
void CGameMain::Dengji(const int DengjiKey,float jibie)
{if(KEY_F1 == DengjiKey)jibie = 0.5f;else if(KEY_F2 == DengjiKey)jibie = 1.0f;else if(KEY_F3 == DengjiKey)jibie = 1.5f;elsejibie = 0.5f;
}
//=============================================================================
//
// 選取難度開始游戲
void CGameMain::OnKeyDown(const int iKey,const int bAltPress, const int bShiftPress, const int bCtrlPress)
{if(0 == m_iGameState && KEY_SPACE == iKey){m_pFengmian->DeleteSprite();return ;}m_pShuoming->DeleteSprite();m_pwenzi->DeleteSprite();if( KEY_ENTER == iKey && 2== m_iGameState){m_iGameState =  1;m_iGameScore =  0;m_fGameTime  =  30.f;//游戲總共的時間  //設置游戲時間// 更新當前游戲積分顯示(清零上一局積分顯示值)m_pScore->SetTextValue(m_iGameScore);// 更新當前游戲剩余時間顯示, 由于游戲剛開始,所以直接設置為g_fMaxGameTimem_pTime->SetTextValue(m_fGameTime);// 隱藏 "按空格開始游戲" 這個提示圖片m_pKaishi->SetSpriteVisible(false);//隱藏鼠標m_pDengji->SetTextString("一般");CSystem::ShowCursor(false);}else if(0 == m_iGameState){if(KEY_F1 == iKey){m_iGameState =  1;m_iGameScore =  0;m_fGameTime  =  30.f;//游戲總共的時間  //設置游戲時間// 更新當前游戲積分顯示(清零上一局積分顯示值)m_pScore->SetTextValue(m_iGameScore);// 更新當前游戲剩余時間顯示, 由于游戲剛開始,所以直接設置為g_fMaxGameTimem_pTime->SetTextValue(m_fGameTime);// 隱藏 "按空格開始游戲" 這個提示圖片m_pKaishi->SetSpriteVisible(false);//隱藏鼠標m_pDengji->SetTextString("簡單");CSystem::ShowCursor(false);jibie = 1.5f;gs=1;}else if(KEY_F2 == iKey){m_iGameState =  1;m_iGameScore =  0;m_fGameTime  =  30.f;//游戲總共的時間  //設置游戲時間// 更新當前游戲積分顯示(清零上一局積分顯示值)m_pScore->SetTextValue(m_iGameScore);// 更新當前游戲剩余時間顯示, 由于游戲剛開始,所以直接設置為g_fMaxGameTimem_pTime->SetTextValue(m_fGameTime);// 隱藏 "按空格開始游戲" 這個提示圖片m_pKaishi->SetSpriteVisible(false);//隱藏鼠標m_pDengji->SetTextString("一般");CSystem::ShowCursor(false);jibie = 1.0f;gs = 2;}else if(KEY_F3 == iKey){m_iGameState =  1;m_iGameScore =  0;m_fGameTime  =  30.f;//游戲總共的時間  //設置游戲時間// 更新當前游戲積分顯示(清零上一局積分顯示值)m_pScore->SetTextValue(m_iGameScore);// 更新當前游戲剩余時間顯示, 由于游戲剛開始,所以直接設置為g_fMaxGameTimem_pTime->SetTextValue(m_fGameTime);// 隱藏 "按空格開始游戲" 這個提示圖片m_pKaishi->SetSpriteVisible(false);//隱藏鼠標CSystem::ShowCursor(false);m_pDengji->SetTextString("困難");jibie = 0.5f;gs = 2;}else{m_iGameState =  1;m_iGameScore =  0;m_fGameTime  =  30.f;//游戲總共的時間  //設置游戲時間// 更新當前游戲積分顯示(清零上一局積分顯示值)m_pScore->SetTextValue(m_iGameScore);// 更新當前游戲剩余時間顯示, 由于游戲剛開始,所以直接設置為g_fMaxGameTimem_pTime->SetTextValue(m_fGameTime);// 隱藏 "按空格開始游戲" 這個提示圖片m_pKaishi->SetSpriteVisible(false);//隱藏鼠標CSystem::ShowCursor(false);jibie = 1.0f;m_pDengji->SetTextString("一般");}}
}
//=============================================================================
//
// 打地鼠實現
void CGameMain::Dishu(const char* szName)
{//char	szName[128];//char    name[128];//int Msont;int iDir = 0;int iDir1 = 0;int i=0;float fPosX, fPosY;float fPosX1,fPosY1;iDir = CSystem::RandomRange(0,15);//隨機生成出現地鼠的編號iDir1 = CSystem::RandomRange(0,15);//隨機生成出現地鼠的編號i=CSystem::RandomRange(0,3);//m_fBaseTime -= fDeltaTime;//if(m_fBaseTime <= 0)//{//m_fBaseTime = 0.8f;//根據隨機數設置地鼠出現在哪if(iDir!=iDir1&&i==1&&gs==2){switch(iDir1){case 0:fPosX1 = CSystem::RandomRange(-35, -35 );fPosY1 = CSystem::RandomRange(-25,-25);break;case 1:fPosX1 = CSystem::RandomRange(-15, -15 );fPosY1 = CSystem::RandomRange(-25,-25);break;case 2:fPosX1 = CSystem::RandomRange(5, 5 );fPosY1 = CSystem::RandomRange(-25,-25);break;case 3:fPosX1 = CSystem::RandomRange(25, 25 );fPosY1 = CSystem::RandomRange(-25,-25);break;case 4:fPosX1 = CSystem::RandomRange(-35, -35 );fPosY1 = CSystem::RandomRange(-10,-10);break;case 5:fPosX1 = CSystem::RandomRange(-15, -15 );fPosY1 = CSystem::RandomRange(-10,-10);break;case 6:fPosX1 = CSystem::RandomRange(5, 5 );fPosY1 = CSystem::RandomRange(-10,-10);break;case 7:fPosX1 = CSystem::RandomRange(25, 25 );fPosY1 = CSystem::RandomRange(-10,-10);break;case 8:fPosX1 = CSystem::RandomRange(-35, -35 );fPosY1 = CSystem::RandomRange(5,5);break;case 9:fPosX1 = CSystem::RandomRange(-15, -15 );fPosY1 = CSystem::RandomRange(5,5);break;case 10:fPosX1 = CSystem::RandomRange(5, 5 );fPosY1 = CSystem::RandomRange(5,5 );break;case 11:fPosX1 = CSystem::RandomRange(25, 25 );fPosY1 = CSystem::RandomRange(5,5);break;case 12:fPosX1 = CSystem::RandomRange(-35, -35 );fPosY1 = CSystem::RandomRange(20,20);break;case 13:fPosX1 = CSystem::RandomRange(-15, -15 );fPosY1= CSystem::RandomRange(20,20);break;case 14:fPosX1 = CSystem::RandomRange(5, 5 );fPosY1 = CSystem::RandomRange(20,20);break;case 15:fPosX1 = CSystem::RandomRange(25, 25 );fPosY1 = CSystem::RandomRange(20,20);break;}m_psorry->SetSpritePosition(fPosX1,fPosY1);}else{m_psorry->SetSpritePosition(-45,-55);}switch(iDir){case 0:fPosX = CSystem::RandomRange(-35, -35 );fPosY = CSystem::RandomRange(-25,-25);break;case 1:fPosX = CSystem::RandomRange(-15, -15 );fPosY = CSystem::RandomRange(-25,-25);break;case 2:fPosX = CSystem::RandomRange(5, 5 );fPosY = CSystem::RandomRange(-25,-25);break;case 3:fPosX = CSystem::RandomRange(25, 25 );fPosY = CSystem::RandomRange(-25,-25);break;case 4:fPosX = CSystem::RandomRange(-35, -35 );fPosY = CSystem::RandomRange(-10,-10);break;case 5:fPosX = CSystem::RandomRange(-15, -15 );fPosY = CSystem::RandomRange(-10,-10);break;case 6:fPosX = CSystem::RandomRange(5, 5 );fPosY = CSystem::RandomRange(-10,-10);break;case 7:fPosX = CSystem::RandomRange(25, 25 );fPosY = CSystem::RandomRange(-10,-10);break;case 8:fPosX = CSystem::RandomRange(-35, -35 );fPosY = CSystem::RandomRange(5,5);break;case 9:fPosX = CSystem::RandomRange(-15, -15 );fPosY = CSystem::RandomRange(5,5);break;case 10:fPosX = CSystem::RandomRange(5, 5 );fPosY = CSystem::RandomRange(5,5);break;case 11:fPosX = CSystem::RandomRange(25, 25 );fPosY = CSystem::RandomRange(5,5);break;case 12:fPosX = CSystem::RandomRange(-35, -35 );fPosY = CSystem::RandomRange(20,20);break;case 13:fPosX = CSystem::RandomRange(-15, -15 );fPosY = CSystem::RandomRange(20,20);break;case 14:fPosX = CSystem::RandomRange(5, 5 );fPosY = CSystem::RandomRange(20,20);break;case 15:fPosX = CSystem::RandomRange(25, 25 );fPosY = CSystem::RandomRange(20,20);break;}/*sont=m_iCount;sprintf(szName, "dishu_%d", m_iCount);CSprite* tmpSprite=new CSprite(szName);tmpSprite->CloneSprite("dishu");tmpSprite->SetSpritePosition(fPosX, fPosY);//m_vdishu.push_back(*tmpSprite);m_iCount++;Msont=m_iCount;sprintf(name, "dishu_%d", Msont-=2);CSprite* tmpSprite1=new CSprite(name);tmpSprite1->DeleteSprite();}*/m_pDishu->SetSpritePosition(fPosX,fPosY);}
//=============================================================================
//
// 鼠標可控制錘子
void CGameMain::OnMouseMove(const float fMouseX, const float fMouseY)
{if(m_iGameState == 1||m_iGameState == 2){m_pChuizi->SetSpritePosition(fMouseX, fMouseY);}
}
//=============================================================================
//
// 鼠標點擊實現拍打動作
void CGameMain::OnMouseClick(const int iMouseType, const float fMouseX, const float fMouseY)
{if(m_iGameState==0){m_pFengmian->SetSpriteVisible(false);}if(m_iGameState==1||m_iGameState==2){m_pChuizi->SetSpriteRotation(m_fOldRotation-45);m_fRotateTime   =   0.2f;}float fPosX,fPosY;fPosX=m_pDishu->GetSpritePositionX();fPosY=m_pDishu->GetSpritePositionY();float fPosX1,fPosY1;fPosX1=m_psorry->GetSpritePositionX();fPosY1=m_psorry->GetSpritePositionY();if(m_pChuizi->IsPointInSprite(fPosX,fPosY)){m_ptexiao->SetSpritePosition(fPosX,fPosY);sum++;m_pScore->SetTextValue(sum);m_pDishu->SetSpritePosition(-45,-45);}if(m_pChuizi->IsPointInSprite(fPosX1,fPosY1)){m_pyanhua->SetSpritePosition(fPosX1,fPosY1);sum+=5;m_pScore->SetTextValue(sum);m_psorry->SetSpritePosition(-45,-55);}
}
Main.cpp

這個文件夜視系統自帶的接口文件,不過有的需要使用

//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
#include "CommonClass.h"
#include "LessonX.h"///
//
// 主函數入口
//
//
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{// 初始化游戲引擎if( !CSystem::InitGameEngine( hInstance, lpCmdLine ) )return 0;// To do : 在此使用API更改窗口標題CSystem::SetWindowTitle("打地鼠");// 引擎主循環,處理屏幕圖像刷新等工作while( CSystem::EngineMainLoop() ){// 獲取兩次調用之間的時間差,傳遞給游戲邏輯處理float	fTimeDelta	=	CSystem::GetTimeDelta();// 執行游戲主循環g_GameMain.GameMainLoop( fTimeDelta );};// 關閉游戲引擎CSystem::ShutdownGameEngine();return 0;
}//==========================================================================
//
// 引擎捕捉鼠標移動消息后,將調用到本函數
void CSystem::OnMouseMove( const float fMouseX, const float fMouseY )
{// 可以在此添加游戲需要的響應函數g_GameMain.OnMouseMove(fMouseX,fMouseY);
}
//==========================================================================
//
// 引擎捕捉鼠標點擊消息后,將調用到本函數
void CSystem::OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )
{// 可以在此添加游戲需要的響應函數g_GameMain.OnMouseClick(iMouseType,fMouseX,fMouseY);
}
//==========================================================================
//
// 引擎捕捉鼠標彈起消息后,將調用到本函數
void CSystem::OnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY )
{// 可以在此添加游戲需要的響應函數}
//==========================================================================
//
// 引擎捕捉鍵盤按下消息后,將調用到本函數
// bAltPress bShiftPress bCtrlPress 分別為判斷Shift,Alt,Ctrl當前是否也處于按下狀態。比如可以判斷Ctrl+E組合鍵
void CSystem::OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress )
{// 可以在此添加游戲需要的響應函數g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);
}
//==========================================================================
//
// 引擎捕捉鍵盤彈起消息后,將調用到本函數
void CSystem::OnKeyUp( const int iKey )
{// 可以在此添加游戲需要的響應函數}//===========================================================================
//
// 引擎捕捉到精靈與精靈碰撞之后,調用此函數
void CSystem::OnSpriteColSprite( const char *szSrcName, const char *szTarName )
{
}//===========================================================================
//
// 引擎捕捉到精靈與世界邊界碰撞之后,調用此函數.
// iColSide : 0 左邊,1 右邊,2 上邊,3 下邊
void CSystem::OnSpriteColWorldLimit( const char *szName, const int iColSide )
{}


以上就是funcode做的簡單打地鼠游戲的代碼和方法,希望對大家有幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536181.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536181.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536181.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nodejs,Npm,React安裝教程

React安裝 1.下載node.js安裝包 下載二進制包 選擇比較穩定的版本進行安裝&#xff0c;v8.9 2.安裝 直接把文件解壓復制到某個目錄下&#xff0c; sudo cp -r node-v8.9.0 /opt/node #你下載的版本sudo touch /etc/profile.d/node.sh #新建一個腳本文件sudo gedit /etc/…

Ubuntu下的提示信息彩色顯示

【問題】 雖然已經折騰過了&#xff1a; 【已解決】Ubuntu中讓終端只顯示當前路徑&#xff0c;而不顯示絕對路徑 但是&#xff0c;終端中的prompt提示信息&#xff0c;不是彩色的&#xff0c;導致的結果是&#xff1a; 當終端中輸出信息很多時&#xff1a; 【已解決】Ubun…

hustoj的搭建

最近開始接觸服務器之類的&#xff0c;就自己搭建一個hustoj的服務器&#xff0c;hustoj系統的搭建在網上已經很完善了&#xff0c;這里我就簡單的說一下&#xff0c;作為自己的學習筆記。 安裝主要環境&#xff0c;Apache2&#xff0c;MySQL&#xff0c;php5和PHPmyadmin。 …

Shell字符串操作集合

字符操作字符串的長度獲取字符串中某些字符的個數統計單詞的個數bash提供的數組數據結構它是以數字為下標的和C語言從0開始的下一樣awk里面的數組取子串匹配求子串sed有按行打印的功能記得用tr把空格換為行號tr來取子串head和tail查詢字串子串替換tac 會將文本的內容倒置顯示正…

百練4982 踩方格

總時間限制: 1000ms 內存限制: 65536kB描述有一個方格矩陣&#xff0c;矩陣邊界在無窮遠處。我們做如下假設&#xff1a;a. 每走一步時&#xff0c;只能從當前方格移動一格&#xff0c;走到某個相鄰的方格上&#xff1b;b. 走過的格子立即塌陷無法再走第二次&#xff1b;…

Qt自定義QML模塊

自定義QML模塊 含義為將常用風格的Button&#xff0c;Text,RadioButton,或者自定義的控件作為一個控件進行使用&#xff0c;節省代碼。 優點&#xff1a; 代碼簡潔&#xff0c;減少重復代碼自定義的控件進行封裝重復使用可以與QML自帶的庫區別開來優化項目結構 一、創建模塊…

POJ3984 迷宮問題【BFS】

好長時間沒有敲過代碼了&#xff0c;感覺之前學過的都忘了&#xff0c;趁著這個暑假&#xff0c;打算把之前學習的東西都復習一下&#xff0c;當然得慢慢來&#xff0c;畢竟好長時間不敲代碼了&#xff0c;怎么著都有些生疏&#xff0c;再加上之前學的也不咋地&#xff0c;相當…

宏定義基本用法

宏定義 不帶參數 宏定義又稱為宏代換、宏替換&#xff0c;簡稱“宏”。 格式&#xff1a; #define 標識符 字符串其中的標識符就是所謂的符號常量&#xff0c;也稱為“宏名”。 預處理&#xff08;預編譯&#xff09;工作也叫做宏展開&#xff1a;將宏名替換為字符串。 掌…

廣度優先搜索練習之神奇的電梯

廣度優先搜索練習之神奇的電梯 Time Limit: 1000ms Memory limit: 65536K 題目描述 有一座已知層數為n的高樓&#xff0c;這座高樓的特殊之處在于只能靠電梯去上下樓&#xff0c;所以要去到某一層要非常耽誤時間&#xff0c;然而更悲哀的是&#xff0c;這座高樓的電梯是限號…

ubuntu安裝proxychains及自動補全

proxychains ProxyChains是本人目前為止用到的最方便的代理工具。 inux下代理一般是通過http_proxy和https_proxy這兩個環境變量&#xff0c;但是很多軟件并不使用這兩個變量&#xff0c;導致流量無法走代理。在不使用vpn的前提下&#xff0c;linux并沒有轉發所有流量的真全局…

快速冪講解

快速冪的目的就是做到快速求冪&#xff0c;假設我們要求a^b,按照樸素算法就是把a連乘b次&#xff0c;這樣一來時間復雜度是O(b)也即是O(n)級別&#xff0c;快速冪能做到O(logn)&#xff0c;快了好多好多。它的原理如下&#xff1a; 假設我們要求a^b&#xff0c;那么其實b是可以…

如何查詢資料

如何查詢資料技術資料及問題查詢查詢方法分類查找提取關鍵字GitHub項目優先使用Google搜索引擎Copy Paste論文查找詢問主管 測試修改使用總結分享 公司信息查詢國內公司國外公司 如何查詢資料 技術資料及問題查詢 查詢方法 資料與解決辦法的查詢大致分為7大類。 1.分類查…

山東省第八屆 ACM 省賽 sum of power(SDUT 3899)

Problem Description Calculate ∑ni1im mod (10000000007) for given n&#xff0c;m. Input Input contains two integers n,m(1≤n≤1000,0≤m≤10). Output Output the answer in a single line. Example Input 10 0 Example Output 10 方法&#xff1a;快速冪和大數求和 …

Ubuntu主題更換

Ubuntu主題更換 目前的Ubuntu有Unity和Gnome兩個比較流行的版本&#xff0c;以下為Gnome桌面環境的主題更換&#xff0c;其他桌面環境類似。 主題的下載地址&#xff0c;點擊 Theme 將在網絡上下載的主題文件進行解壓&#xff0c;然后拷貝到 /usr/share/themes/ 目錄下&…

awk簡單使用

awk 用于在linux/unix下對文本和數據進行處理,支持用戶自定義函數和動態正則表達式等先進功能。 命令格式&#xff1a; awk BEGIN{ print “start” } pattern { commend } END{print "end"} file awk "BEGIN{ print “start” } pattern { commend } END{pr…

Ubuntu 14.04 下 Virtual Judge 的搭建

前期準備工作 1.1 一個Linux系統 因為現場賽的緣故&#xff0c;我一直使用的都是ubuntu。 這里我測試用的是Ubuntu14.04 Desktop 64bit ,當然選擇Server會更好一些. 系統的安裝不再贅述&#xff0c;作為服務器請選用Server版本。1.2 更新源 在搭建環境之前&#xff0c;請確保…

BitMap的原理介紹與實現

BitMap 位圖&#xff08;bitmap&#xff09;是一種非常常用的結構&#xff0c;在索引&#xff0c;數據壓縮等方面有廣泛應用。位圖是通過將數組下標與應用中的一些值關聯映射&#xff0c;數組中該下標所指定的位置上的元素可以用來標識應用中值的情況&#xff08;是否存在或者數…

MySQL與PHP連接

1、mysql_connect()-建立數據庫連接 格式&#xff1a; resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]]) 例&#xff1a; $conn mysql_connect("localhost", "username", "pa…

QML Profiler性能優化教程

QML Profiler 2018年1月26日 vincent 對于一個程序的開發&#xff0c;性能優化是開發中的一個重要步驟。 我們肯定不希望開發出來的程序表現出卡頓&#xff0c;最好是處處流暢&#xff0c;絲滑般的體驗。 對于C程序&#xff0c;我們有很多方法可以做性能優化&#xff0c;例如…

uburntu在不能自動獲取網絡時的聯網設置

一&#xff1a;網絡基礎配置 1. eth0設置不正確&#xff0c;導致無法正常啟動&#xff0c;修改eth0配置文件就好 ubuntu 12.04的網絡設置文件是/etc/network/interfaces&#xff0c;打開文件&#xff0c;會看到 auto lo iface lo inet loopback 這邊的設置是本地回路。在后…