開始做遊戲系列——擁有你自己的遊戲(轉)

post0發表於2007-08-12
開始做遊戲系列——擁有你自己的遊戲(轉)[@more@]

  上次我們討論了遊戲領域裡面的幾種職業,以後我會說明他們是如何一起工作完成一個遊戲的。今天呢,就要

  

  實現大家的夢想,擁有一個自己的遊戲;甭管自己多菜,先做出來個遊戲先;不過還是要對一些常見的遊戲有

  

  所瞭解:

  

  RPG: Role Play Game    角色扮演類遊戲    天之痕

  FPS: First Person Shoot  第一人稱射擊遊戲   Counterstrike

  Puzzle Games        棋牌類遊戲      五子棋

  Sports Game         體育運動類     極品飛車、Fifa

  Action Game          動作類       格鬥

  還有很多,例如冒險類、休閒類、網遊類;分類標準不同,不能一一說明,只是想對遊戲一無所知的人臨時充

  

  充電。選擇一個儘量簡單的遊戲,我的建議是越簡單越好,RPG遊戲不要去想,我們現在做個自己的第一個遊戲

  

  只是想對遊戲有所瞭解,不是拿去賣;也不要高深的人工智慧(這樣的話,當然也要把棋牌類遊戲排除),先把

  

  時間花費在程式結構上面去,演算法當然重要,不是我們現在所要考慮的;而我常常很多人建議新手去編五子棋

  

  ,我想這絕對是個誤導。

  

  那你可能在想,我們現在能做什麼呢?既然你想跟著我來做遊戲,那麼我想一些知識你是需要掌握的,關於c++

  

  、VC和Direct X的知識:

  1、能夠區分MFC 和win32 app,能建立工程、能在工程中新增檔案、能設定標頭檔案和庫檔案的路徑、能向工程中

  

   新增庫,基本的除錯程式的能力;

  2、有類、物件、介面、指標的概念

  3、有獨立下載Direct X SDK(3.0--9.0)和CDX 庫(我這裡有cdx 3.1)的能力;cdx開發庫是開放原始碼的,所以以後如果有興趣,可以研究一下他們是怎麼封裝的;

    cdx可以在找到

  

  4、會安裝並在VC++ 6.0中設定Direct X SDK(3.0--9.0)和CDX庫.

  

  不過要提醒一下,安裝direct sdk前,先要把VC++ 6.0關掉。Direct SDK會詢問你是不是要關聯到VC++ 6.0,選擇是,就不需要手動新增;你會發現 工具--&gt選擇--&gt目錄中 路徑裡面,Direct X SDK的標頭檔案和庫檔案已經被新增進去了;

  安裝CDX的時候就沒有這麼智慧,你需要自己手動新增,不會的話,回覆我的時候說一聲;

  好了,假設你一切搞定;

  現在開啟cdx安裝目錄下的"gameslasterBlaster.dsp",將會開啟工程,這就是我向大家推薦的第一個遊戲;確切點說,是我們要修改這個遊戲,不過前提是,我們要能夠編譯執行透過,而且能夠了解這個遊戲的來龍去脈。對了,cdx預設安裝在 c:cdx資料夾

  

  邁出第一步通常是很難的,不過邁出第一步後就很輕鬆了;你可能會發現你還是不能執行,常見的錯誤是找不到"cdxd.lib",沒關係,我們只要稍微修改就可以了,在 工程--&gt設定--&gtLink中 模組庫裡,看有沒有cdxd.lib?如果有的話(呵呵,當然是有的),改成cdx.lib

  

  這樣就萬事大吉了,再編譯執行,應該沒錯了把?還有??!!那提出來,看我能不能幫你解決;遇到困難不要急,到ogdev論壇裡來問一下,基本上你遇到的問題我也會遇到過,我會給你建議;我每天都來上網,你的問題會很快解決,這個不要擔心。

  

  那麼我們現在就要看程式碼了:

  遊戲結構程式碼:

  

  /////////////////////////////////////////////////////////////////////////////////////////////

  // GAME.CPP     遊戲的框架,不同的是UpdateGame()實現不同

  /////////////////////////////////////////////////////////////////////////////////////////////

  

  

  void FiniApp()

  {

  //程式碼略

      //遊戲結束的清理工作

  }

  

  /////////////////////////////////////////////////////////////////////////////////////////////

  // WinProc     視窗訊息處理函式,一般不處理遊戲的事件

  /////////////////////////////////////////////////////////////////////////////////////////////

  long PASCAL WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

  {

  switch(message)           //訊息處理函式做了很少的工作,主要工作是在沒訊息的                       //時候的空閒處理函式里做的

  {

  case WM_ACTIVATEAPP:

      bActive = wParam;

  break;

  

  case WM_KEYDOWN:

  switch(wParam)

  {    //ESC鍵使遊戲結束

  case VK_ESCAPE:

  PostMessage(hWnd, WM_CLOSE, 0, 0);

  break;

  }

  break;

  

  case WM_DESTROY:

  FiniApp();

  PostQuitMessage(0);

  break;

  }

  

  return DefWindowProc(hWnd, message, wParam, lParam);

  }

  

  /////////////////////////////////////////////////////////////////////////////////////////////

  // InitApp     產生視窗,初始化遊戲

  /////////////////////////////////////////////////////////////////////////////////////////////

  BOOL InitApp(HINSTANCE hInst, int nCmdShow)

  {

  //註冊視窗類,建立視窗,視窗控制程式碼hWnd

  

  if(!hWnd) return FALSE;

  

  ShowWindow(hWnd, nCmdShow);

  UpdateWindow(hWnd);

  

  InitGame();

  Input.Create(hInst, hWnd);

  

  return TRUE;

  }

  

  /////////////////////////////////////////////////////////////////////////////////////////////

  // WinMain     程式的入口位置

  /////////////////////////////////////////////////////////////////////////////////////////////

  int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)

  {

  MSG msg;

      //這裡呼叫初始化視窗和遊戲

  if(!InitApp(hInst, nCmdShow)) return FALSE;

  

  while(1)

  {

  if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))

  {

  if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam;

  TranslateMessage(&msg);

  DispatchMessage(&msg);

  }

  else if(bActive)        //bActive標誌遊戲是否在執行

  {

  UpdateGame();       //這個函式起了很大的作用,更新輸入和遊戲

  }

  else WaitMessage();

  }

  }

  

  上面也是基本的win32 application的基礎知識

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951449/,如需轉載,請註明出處,否則將追究法律責任。

相關文章