funcode C課程設計坦克大戰(zhàn)_第1頁
funcode C課程設計坦克大戰(zhàn)_第2頁
funcode C課程設計坦克大戰(zhàn)_第3頁
funcode C課程設計坦克大戰(zhàn)_第4頁
funcode C課程設計坦克大戰(zhàn)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、游戲介紹相信大部分同學都玩過或看過“坦克大戰(zhàn)”這款經典游戲?,F在,就由我們自己動手來開發(fā)它。只要大家具備了C+語言和面向對象的基礎知識,然后按照實驗指南的指導一步一步進行下去,相信我們每個同學都能把這款經典游戲做出來。二、實驗目標綜合運用C+及其面向對象的知識開發(fā)一款小游戲。三、實驗內容 在一個戰(zhàn)場上,玩家控制坦克,消滅敵方坦克,并防止敵方坦克摧毀我方基地。游戲的具體要求如下:1、 游戲有一個初始頁面,如下圖。2、 按下任意鍵開始游戲,玩家控制坦克在戰(zhàn)場上穿梭,碰到墻時,不能通過。3、 敵方坦克自由移動,每隔2秒改變一個方向,每隔3秒發(fā)射一發(fā)子彈。4、 敵方坦克每隔5秒出現一輛,從屏幕上方

2、的左、中、右三個位置依次出現。5、 當玩家被消滅或者我方基地被摧毀或者游戲時間大于30秒的時候,游戲結束。游戲開始前進入游戲四、游戲的整體框架5、 實驗指南實驗準備打開FunCode,創(chuàng)建一個新的C+項目。注意:項目名稱必須為英文和數字,且不能有空格。點擊“項目”“導入地圖模板”,從對話框中選取名稱為TankWar的模板導入。導入成功后,界面如下:實驗一 游戲開始【實驗內容】1、 設置游戲標題2、 按空格鍵,提示圖片消失,游戲進入開始狀態(tài).【實驗運行結果】游戲開始前按下空格鍵后【實驗思路】按下空格鍵是鍵盤按下事件,可在CSystem:OnKeyDown函數中編寫響應代碼。為了保證程序結構的清晰

3、、一致,更好的辦法是在CGameMain類中添加一個相應的鍵盤按下事件處理函數,然后在CSystem:OnMouseClick函數中進行調用。g_GameMain是CGameMain類的對象,它是全局變量,在程序運行時最先被創(chuàng)建?!緦嶒炛笇А?、 C+程序的執(zhí)行入口是主函數。FunCode的主函數名稱叫WinMain,寫在Main.cpp文件中。CSystem:SetWindowTitle是設置程序運行窗口標題的函數,修改如下:CSystem:SetWindowTitle("坦克大戰(zhàn)");2、 參考CSystem:OnKeyDown函數,為CGameMain類創(chuàng)建一個OnK

4、eyDown函數。CGameMain類的頭文件是LessonX.h文件,實現代碼寫在LessonX.cpp文件中。因此,先在LessonX.h文件對函數進行聲明。函數的返回值和參數列表都與CSystem:OnKeyDown函數保持一致。訪問權限應該是public。代碼如下:void OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress );3、 接著,在Lesson.cpp文件中對該函數進行定義:void CGameMain:OnKeyDown( const

5、int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress )4、 在CSystem:OnKeyDown函數(Main.cpp文件中)調用CGameMain:OnKeyDown函數,并將自己的參數傳遞給該函數。g_GameMain是是CGameMain類的對象,它是全局變量,在程序運行時最先被創(chuàng)建。因此,我們可以用g_GameMain調用自己的成員函數OnKeyDown。g_GameMain.OnKeyDown(iKey, bAltPress, bShiftPress, bCtrlPress);5、

6、 FunCode程序運行時,當發(fā)生鍵盤按下事件,程序首先調用并執(zhí)行CSystem:OnKeyDown函數,然后由CSystem:OnKeyDown函數調用并執(zhí)行CGameMain:OnKeyDown函數。因此,鍵盤按下事件的響應代碼我們在CGameMain:OnKeyDown函數中編寫即可。6、 我們要處理的兩個精靈如下圖,它們的名稱分別是splash和start。我們需要創(chuàng)建兩個CSprite類對象與這兩個精靈綁定。7、 在CGameMain類中聲明兩個CSprite*類型,根據面向對象的封裝性原理,成員變量的訪問權限應該是private。代碼應該寫在哪個文件,請參看前面的實驗步驟。CSpr

7、ite*m_pSplash;CSprite*m_pStart;在CGameMain類的構造函數中,對上面兩個指針變量進行初始化。通過調用CSprite的構造函數,將精靈和精力對象綁定在一起。m_pSplash= new CSprite("splash");m_pStart= new CSprite("start");8、 最后,我們在CGameMain:OnKeyDown函數中處理空格鍵按下事件。if( 0 =GetGameState() )if(iKey =KEY_SPACE)m_iGameState = 1;KEY_SPACE是枚舉變量KeyCode

8、s的成員,表示空格鍵。KeyCodes定義在CommonClass.h文件中。該枚舉變量定義了全部的鍵盤值。注意:必須將m_iGameState的值改為1。當GameMainLoop函數再次執(zhí)行時,根據m_iGameState的值調用并執(zhí)行GameInit函數,游戲進入開始狀態(tài)。進入游戲開始狀態(tài)時,調用CSprite類的SetSpriteVisible函數將精靈圖片設置為不可見。在GameInit函數中添加代碼:m_pSplash->SetSpriteVisible(false);m_pStart->SetSpriteVisible(false);9、 程序執(zhí)行完CGameMain

9、:GameInit函數后,執(zhí)行CGameMain: SetGameState(2),將m_iGameState的值改為2,游戲進入運行狀態(tài)。10、 在CGameMain類的析構函數中delete本實驗創(chuàng)建的指針對象,以釋放分配的內存。CGameMain:CGameMain()delete m_pSplash;delete m_pStart;11、 編譯并運行程序,然后按下空格鍵,看看運行效果。實驗二 坦克運動【實驗內容】1、 創(chuàng)建坦克類CTankPlayer;2、 游戲開始時,將坦克放置于(0,0)的坐標上;3、 通過按鍵WSAD控制坦克上下左右運動;4、 坦克運行到黑色區(qū)域邊界時不能繼續(xù)前進

10、?!緦嶒炦\行結果】在區(qū)域內運動運動到區(qū)域邊界【實驗思路】坦克也是精靈,但是它具備一些自己獨特的功能,比如通過鍵盤控制運動、開炮等。因此我們可以創(chuàng)建一個新的類CTankPlayer類,并讓它繼承CSprite類。通過WASD鍵,控制坦克做相應的的上左下右運動。按下某個鍵,給坦克設置相應方向的運動速度;松開時,將該方向的速度設為0,表示停止運動。屏幕上最內部的黑色區(qū)域為玩家坦克的活動區(qū)域,左上角坐標為(-26,-22),右下角坐標為(26,22)。當坦克運動到該區(qū)域邊界時,坦克不能繼續(xù)前進?!緦嶒炛笇А?、 通過類向導創(chuàng)建CTankPlayer類,其繼承于CSprite類。以VC+ 6.0為例:第

11、一步、點擊菜單“插入”-“新建類”。第二步、在“New Class”對話框中輸入類名和父類名。第三步、點擊“Change”按鈕,在新對話框中修改CTankPlayer類的頭文件和cpp文件的路徑。將頭文件保存到項目文件夾的SourceCodeHeader文件夾中,將cpp文件保存到項目文件夾下的SourceCodeSrc文件夾中。這里需要特別注意的是創(chuàng)建文件路徑的問題,所有的.h頭文件應該在項目文件夾SourceCodeHeader中,所有的.cpp源文件應該放在項目文件夾下的SourceCodeSrc文件夾中。2、 為CTankPlayer類添加m_iDir,m_fSpeedX,m_fSpe

12、edY,m_iHp四個成員變量(成員變量。用來表示坦克在X軸和Y軸方向上的速度以及運行的方向,并且在構造函數中初始化為0。這里規(guī)定,m_iDir的值為0、1、2、3,分別表示上、右、下、左。成員函數的聲明和定義如何添加,訪問權限是什么,可參考實驗一,下文不再繼續(xù)提示),分別表示運動方向、X軸、Y軸速度以及血量值。本文檔的命名采用匈牙利命名法,m_表示類成員變量,i表示整型,f表示float型,sz表示字符指針,g_表示全局變量等。同時需要在public權限下定義獲取和設置這些變量的Get和Set方法:/set方法void SetHp(int hp)m_iHp = hp;void SetDir(

13、int dir)m_iDir = dir;void SetSpeedX(float speedX)m_fSpeedX = speedX;void SetSpeedY(float speedY)m_fSpeedY = speedY;/get方法int GetHp()return m_iHp;int GetDir()return m_iDir;float GetSpeedX()return m_fSpeedX;float GetSpeedY()return m_fSpeedY;3、 CTankPlayer的父類是CSprite類(具體聲明查看CommonClass.h),構造函數為CSprite(

14、 const char *szName )。4、 所以通過上邊方法自動生成的類,如果系統(tǒng)自動生成構造函數CTankPlayer(void)生成的對構造函數實現的代碼:CTankPlayer:CTankPlayer(void)再為CTankPlayer類添加新的構造函數:CTankPlayer(const char* szName)。CTankPlayer:CTankPlayer(const char* szName):CSprite(szName) /對構造函數進行實現m_iDir=0;m_fSpeedX=0.f;m_fSpeedY=0.f;m_iHp=2;子類對象創(chuàng)建時,要先調用父類的構造函

15、數完成父類部分的構造。如果父類沒有默認構造函數,子類的構造函數必須顯示調用父類的構造函數。CTankPlayer構造函數調用CSprite類構造函數,并將參數szName的值傳遞給它,從而將名稱為szName的精靈圖片與CTankPlayer對象綁定起來。5、 為CTankPlayer類添加Init函數,該函數主要用來完成該類的初始化工作。這里,先調用setHp方法設置血量。然后調用父類的SetSpritePosition函數將坦克精靈設置在屏幕中央(0,0)處。接下來給坦克精靈設置時間邊界的大小,與世界邊界的碰撞模式為WORLD_LIMIT_NULL,表示精靈與世界邊界碰撞的響應由代碼完成,

16、同時設置坦克碰撞模式為發(fā)送碰撞和接收碰撞。void CTankPlayer:Init()SetHp(2);SetSpritePosition(0.f,0.f);SetSpriteWorldLimit(WORLD_LIMIT_NULL, -26, -22, 26, 22);SetSpriteCollisionActive(1,1);/設置為可以接受和發(fā)生碰撞SetSpriteVisible(true);6、 在CGameMain類中增加一個私有成員變量m_pTankplayer,類型為CTankPlayer*。注意添加頭文件:#include"TankPlayer.h"7、

17、按下空格鍵后,程序會調用鍵盤按下事件響應函數,將m_iGameState的值改為1,游戲進入開始狀態(tài)(見實驗一)。程序再次執(zhí)行CGameMain:GameMainLoop函數時,根據m_iGameState的值調用并執(zhí)行CGameMain:GameInit函數。因此,可以在該函數中創(chuàng)建我方坦克,并調用CTankPlayer:Init函數來完成該類對象的初始化工作。m_pTankPlayer=new CTankPlayer("myplayer");/新建一個名字是myPlayer的我方坦克對象m_pTankPlayer->CloneSprite("player

18、");/我方坦克克隆在funcode模板中存在的名字為player的坦克,表示新建的坦克對象有現在精靈的所有屬性m_pTankPlayer->Init();8、 接下來,我們?yōu)镃TankPlayer類添加OnMove函數,參數iKey、bPress分別表示按下的是哪個按鍵和按鍵是否按下。首先聲明該函數,訪問權限為public:void OnMove(int iKey, bool bPress);9、 接著,完成OnMove方法。void CTankPlayer:OnMove(int iKey, bool bPress)if(bPress)switch (iKey)case KE

19、Y_W:SetDir(0);SetSpeedX(0);SetSpeedY(-8);break;case KEY_D:SetDir(1);SetSpeedX(8);SetSpeedY(0);break;case KEY_S:SetDir(2);SetSpeedX(0);SetSpeedY(8);break;case KEY_A:SetDir(3);SetSpeedX(-8);SetSpeedY(0);break;SetSpriteRotation(float(90*GetDir(); /用方向值乘于90得到精靈旋轉度數SetSpriteLinearVelocity(GetSpeedX(),Get

20、SpeedY();elseif(iKey = KEY_W | iKey = KEY_D | iKey = KEY_S | iKey = KEY_A)SetSpeedX(0);SetSpeedY(0);SetSpriteLinearVelocity(GetSpeedX(),GetSpeedY();用參數bPress來判斷鍵盤是按下還是彈起。如果bPress為false,表示鍵盤彈起,且彈起的鍵是WASD鍵時,設置坦克的X軸和Y軸移動速度都為0。如果bPress為true,表示鍵盤按下,根據按下的鍵,為m_iDir,m_fSpeedX,m_fSpeedY賦予相應的值。SetSpriteRotati

21、on和SetSpriteLinearVelocity函數用來設置精靈的角度和。10、 在CGameMain類的OnKeyDown函數中,通過調用CTankPlayer類的OnMove方法,根據按下的鍵,控制坦克朝指定方向運動。只有游戲進入開始狀態(tài),按鍵才有效。注意:OnMove參數bPress的值為true。在OnKeyDown函數中添加代碼如下:if(m_iGameState = 2)m_pTankPlayer->OnMove(iKey, true);11、 編譯并運行程序。按空格鍵開始,按WASD鍵,坦克會向規(guī)定的方向運動。但是松開按鍵后,坦克繼續(xù)前進,不會停止下來。12、 參考CS

22、ystem:OnKeyUp函數,給CGameMain類聲明并定義一個OnKeyUp函數,用來處理按鍵彈起事件,然后在CSystem:OnKeyUp函數中調用它。關于這個函數如何聲明、定義以及調用參考實驗一。13、 在CGameMain:OnKeyUp函數中調用CTankPlayer的OnMove方法,參數bPress的值為false。void CGameMain:OnKeyUp(const int iKey)if(m_iGameState = 2)m_pTankPlayer->OnMove(iKey, false);14、 編譯并運行程序,按下WASD鍵,坦克運行;松開按鍵,坦克停止。接

23、下來,我們來實現坦克運行到黑色區(qū)域邊界停止運動的效果。15、 參考CSystem:OnSpriteColWorldLimit函數,給CGameMain類聲明并定義一個OnSpriteColWorldLimit函數,用來處理精靈與世界邊界的碰撞事件,然后在CSystem: OnSpriteColWorldLimit函數中調用它。關于這個函數如何聲明、定義以及調用參考實驗一。16、 當坦克精靈碰到邊界時,將精靈的速度都設為0,精靈停止運動。用字符串處理函數strstr()來判斷碰到世界邊界的精靈是否為我方坦克。當碰到世界邊界的精靈名字中含有”player”的時候,strstr會返回一個非空值。因此

24、代碼如下:void CGameMain:OnSpriteColWorldLimit( const char *szName, const int iColSide )if(strstr(szName,"player") != NULL) /判斷碰到世界邊界的坦克是否為我方坦克m_pTankPlayer->SetSpriteLinearVelocity(0,0);實驗三坦克開炮【實驗內容】1、 創(chuàng)建子彈類CBullet;2、 通過按鍵J控制坦克開炮;【實驗運行結果】【實驗思路】創(chuàng)建子彈類,該類應具備子彈的運動方向、起始位置、X軸速度、Y軸速度等屬性,其中運動方向和起始位

25、置由坦克的方向和位置決定。通過按鍵控制坦克發(fā)射子彈,因此在CGameMain類的OnKeyDown方法中實現該需求。此時我們?yōu)镃TankPlayer類添加發(fā)射子彈的方法OnFire。當按下J鍵后,坦克發(fā)射子彈,在OnFire方法中,我們需要告訴子彈的方向和初始位置。而創(chuàng)建子彈我們由CGameMain類來完成。這樣減少了類之間的耦合?!緦嶒炛笇А?、 通過類向導創(chuàng)建CBullet類,其繼承于CSprite類,具體做法參考實驗一;2、 為CBullet類添加m_iDir,m_fSpeedX,m_fSpeedY,m_iHp,m_iOwner五個成員,分別表示方向、X軸、Y軸速度、子彈血量以及發(fā)射子彈

26、歸屬坦克,0表示地方坦克,1表示我方坦克,并參考實驗二添加變量的get和set方法。3、 為CTankPlayer類添加構造函數和析構函數。參照實驗二,把構造函數中將所有變量進行初始化。4、 為CBullet類添加OnMove方法,參數為iDir表示子彈的運動方向。5、 完成OnMove方法。根據方向m_iDir,首先設置m_fSpeedX,m_fSpeedY的值,然后設置根據方向設置旋轉角度,最后設置子彈的運動速度。void CBullet:OnMove(int iDir)SetDir(iDir);switch(GetDir()case 0:SetSpeedX(0);SetSpeedY(-1

27、0);break;case 1:SetSpeedX(10);SetSpeedY(0);break;case 2:SetSpeedX(0);SetSpeedY(10);break;case 3:SetSpeedX(-10);SetSpeedY(0);break;SetSpriteRotation(90*GetDir();SetSpriteLinearVelocity(GetSpeedX(),GetSpeedY();6、 在CGameMain類中添加表示子彈數目的成員變量m_iBulletNum(注意初始化為0)。然后添加AddBullet方法。方法中有iDir、fPosX、fPosY、iOwne

28、r四個參數分別表示子彈方向、子彈初始位置的X軸Y軸坐標以及子彈所屬坦克。由于地圖上只有一個子彈模板,所以我們需要先復制這個模板,然后設置該精靈的世界邊界。void CGameMain:AddBullet( int iDir,float fPosX,float fPosY ,int iOwner)char* szName = CSystem:MakeSpriteName("bullet",m_iBulletNum);/創(chuàng)建坦克名字CBullet* pBullet = new CBullet(szName);pBullet->CloneSprite("bulle

29、t");pBullet->SetSpriteWorldLimit(WORLD_LIMIT_NULL,-26, -22, 26, 22); /設置世界邊界pBullet->SetSpritePosition(fPosX,fPosY);pBullet->SetSpriteCollisionSend(true); /設置接收碰撞pBullet->OnMove(iDir);m_iBulletNum+; /子彈個數加1if(iOwner = 1)pBullet->SetOwner(1);/1表示我方坦克發(fā)射的子彈elsepBullet->SetOwner(0

30、); /0表示地方坦克發(fā)射的子彈7、 為CTankPlayer類增加OnFire方法,實現發(fā)射子彈的功能。在根據坦克的運動狀態(tài),得到子彈的相關屬性后,通過AddBullet方法在游戲中增加一發(fā)子彈。void CTankPlayer:OnFire()float x,y;x = GetSpritePositionX();y = GetSpritePositionY();switch(GetDir()case 0:y=y-GetSpriteHeight()/2-1;break;case 1:x=x+GetSpriteWidth()/2+1;break;case 2:y=y+GetSpriteHeig

31、ht()/2+1;break;case 3:x=x-GetSpriteWidth()/2-1;break;g_GameMain.AddBullet(GetDir(),x,y,1);因為用到g_GameMain這個全局對象,所以需要在CTankPlayer.cpp中聲明頭文件:#include”8、 按J鍵發(fā)射子彈。在CGameMain類的OnKeyDown函數if(m_iGameState = 2)下添加if(iKey = KEY_J)/判斷按下鍵是夠為J鍵m_pTankPlayer->OnFire();實驗四敵方坦克【實驗內容】1、 創(chuàng)建CTankEnemy類;2、 創(chuàng)建一個敵方坦克實

32、例,實現坦克從上方左中右三個位置隨機出現。3、 實現坦克隔2秒,隨機改變一個方向。4、 實現坦克隔5秒發(fā)射一發(fā)子彈;5、 當坦克與世界邊界碰撞時,改變方向;【實驗運行結果】【實驗思路】同我方坦克一樣,敵方坦克運動,也需要有運動方向、X軸Y軸速度三個基本屬性。為了實現坦克能自由運動,即坦克運動一段時間后改變方向,需增加一個改變方向的時間間隔。同時為了實現坦克自動發(fā)射子彈,需增加一個發(fā)射子彈的時間間隔。然后為敵方坦克增加移動和發(fā)射子彈的方法。最后我們在CGameMain類的GameRun方法中調用敵方坦克移動和發(fā)射子彈的方法?!緦嶒炛笇А?、 通過類向導創(chuàng)建CTankEnemy類;2、 為類CTa

33、nkEnemy添加m_iDir,m_fSpeedX,m_fSpeedY,m_iHp四個成員,分別表示方向、X軸、Y軸速度和血量;3、 參照前面的實驗,為CTankEnemy類添加構造函數和析構函數。4、 為類CTankEnemy添加Init方法初始化敵方坦克。設置血量為2,位置坐標為上方左中右的隨機位置,然后函數中給坦克精靈設置時間邊界的大小,與世界邊界的碰撞模式為WORLD_LIMIT_NULL,表示精靈與世界邊界碰撞的響應由代碼完成。最后設置方向和速度代碼如下:int iPos = CSystem:RandomRange(0,2);float fPosX;SetDir(2);SetHp(2

34、);switch (iPos)case 0:fPosX = -24.f;break;case 1:fPosX = 0.f ;break;case 2:fPosX = 24.f;break;default:break;SetSpritePosition(fPosX,-20.f);SetSpriteLinearVelocity(0.f,8.f);SetSpriteCollisionActive(1,1);/設置可以接受和發(fā)送碰撞SetSpriteRotation(float(90*GetDir();SetSpriteWorldLimit(WORLD_LIMIT_NULL,-26, -22, 26,

35、 22);5、 為類CTankEnemy添加OnMove方法,實現坦克順時針旋轉90度運動。然后根據方向設置子彈的運動速度m_fSpeedX,m_fSpeedY的值。與CTankPlayer類的OnMove方法類似。設置速度方向與原來方向旋轉90度的代碼如下:int iDir=0;if(GetDir()=0 | GetDir()=1 | GetDir()=2)iDir = GetDir()+1;Else /如果方向值等于3,設為0iDir = 0;SetDir(iDir);通過方向設置速度參考前邊實驗。6、 為類CTankEnemy添加帶參的OnMove方法,參數fDeltaTime,為游戲的

36、時間差,實現隔一段時間隨機改變方向。在CTankEnemy類中添加成員變量m_fChangeDirTime在構造函數中初始化為0,并添加get和set方法。void CTankEnemy:OnMove(float fDeltaTime)m_fChangeDirTime+=fDeltaTime;if(m_fChangeDirTime>2.0f)OnMove();m_fChangeDirTime = 0.f;7、 為類CTankEnemy添加OnFire方法,參數也為fDeltaTime,實現隔一段時間自動發(fā)射子彈。在CTankEnemy類中添加成員m_fBulletCreateTime變量

37、并在構造函數中初始化為0。void CTankEnemy:OnFire(float fDeltaTime)m_fBulletCreateTime+=fDeltaTime;if(m_fBulletCreateTime>3.0f)m_fBulletCreateTime = 0.0f;float x,y;x = GetSpritePositionX();y = GetSpritePositionY();switch(GetDir()case 0:y=y-GetSpriteHeight()/2-1;break;case 1:x=x+GetSpriteWidth()/2+1;break;case

38、2:y=y+GetSpriteHeight()/2+1;break;case 3:x=x-GetSpriteWidth()/2-1;break;g_GameMain.AddBullet(GetDir(),x,y,0);因為用到全局對象G_GameMain,所以需要在TankEnemy.cpp中聲明頭文件:#include"LessonX.h"8、 在CGameMain類中添加CTankEnemy類指針變量m_pTankEnemy。頭文件:#include"TankEnemy.h"然后在GameInit中創(chuàng)建并初始化。m_pTankEnemy = new

39、CTankEnemy("enemy");m_pTankEnemy->Init();9、 在CGameMain類的GameRun方法中實現敵方坦克自由移動和發(fā)射子彈。void CGameMain:GameRun( float fDeltaTime )if(m_pTankEnemy)m_pTankEnemy->OnMove(fDeltaTime);m_pTankEnemy->OnFire(fDeltaTime);10、 在CGameMain類的OnSpriteColWorldLimit方法中添加敵方坦克與世界邊界碰撞的檢測。if(m_pTankEnemy&am

40、p;&strcmp(m_pTankEnemy->GetName(),szName)=0)m_pTankEnemy->OnMove();實驗五加載地圖【實驗內容】1、 加載游戲地圖;【實驗運行結果】【實驗思路】在CGameMain類中添加方法LoadMap實現地圖加載。地圖數據是已知的,數據中的0表示此處為空;1表示的是地圖中此處為墻;2表示此處為玩家指揮部。每塊墻大小為4*4?!緦嶒炛笇А?、 首先在LessonX.cpp中定義一個表示地圖的二維數組來表示地圖,其中0表示沒有墻塊,1表示有墻塊:int g_iMap1113= 0,0,0,0,0,0,0,0,0,0,0,0,

41、0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0;2、 在CGameMain類中添加LoadMap方法,實現加載地圖。在方法中用for循環(huán)遍歷地圖二維數組,當二維數組中的某個值為1時表示該處是一堵墻。void CGameMain:LoadMap()char* szName;int i,j;float

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論