遊戲開發行業年薪百萬教你打造,C語言植物大戰殭屍 成功拿到offer!
不少同學都玩過《植物大戰殭屍》,最近PopCap公司又帶來了新版的訊息,這次高興的輪到Xbox的使用者了,日前PopCap公司公佈了《植物大戰殭屍》XBLA版的截圖,這個版本的《植物大戰殭屍》引入了多人合作與對抗模式,看圖就知道好玩多了又刺激多了。

詳見遊戲說明,
遊戲視訊
於是,我在非常強烈的好奇心和求知慾下,自己動手寫了一個簡易的雙人對戰版。開發環境是VC6.0,開發語言是C語言。
遊戲最終完成情況C語言植物大戰殭屍
第一章 需求分析
設計一個雙人對戰的植物大戰殭屍,兩人在一臺電腦上玩。
植物方使用滑鼠控制,基本上與原版的控制的方法一樣。植物方獲勝條件是打掉殭屍最後面的五個墓碑中的三個。
殭屍方使用鍵盤控制,W控制殭屍選擇游標的上移,S控制殭屍選擇游標的下移,ENTER是殭屍選擇的確認,方向鍵控制殭屍安放的位置,空格鍵是安放殭屍。殭屍方的獲勝條件是與原版一樣走到戴夫家裡。
第二章 概要設計
首先,根據我的設計,我把遊戲分為幾個元素:地圖格子元素,卡片元素,殭屍元素,推車元素,殭屍方的墓碑靶子元素,植物的子彈元素,動畫效果播放元素。
其次,把遊戲分為幾個處理:子彈碰到殭屍處理,殭屍碰到植物處理,推車碰到殭屍處理,子彈碰到墓碑靶子處理等。每個處理完後立馬接上動畫播放效果。
第三章 詳細設計
3.1載入GIF影象
植物元素和殭屍元素都是動態的,於是我想到了載入GIF。經過查詢資料,找到了在VC6.0中用GDI+載入GIF的方法。
詳見VC6.0使用GIF資料
資料和示例程式地址VC6.0載入GIF方法,示例程式
程式的結果如圖所示

這是因為當資料量很大時,繪圖可能需要幾秒鐘甚至更長的時間,而且有時還會出現閃爍現象,為了解決這些問題,可採用雙緩衝技術來繪圖。
雙緩衝即在記憶體中建立一個與螢幕繪圖區域一致的物件,先將圖形繪製到記憶體中的這個物件上,再一次性將這個物件上的圖形拷貝到螢幕上,這樣能大大加快繪圖的速度。雙緩衝實現過程如下:
1、在記憶體中建立與畫布一致的緩衝區
2、在緩衝區畫圖
3、將緩衝區點陣圖拷貝到當前畫布上
4、釋放記憶體緩衝區
增加雙緩衝後的示例程式地址雙緩衝載入GIF
程式結果如圖所示

3.2遊戲元素
3 .2.1地圖格子元素
植物大戰殭屍的地圖中的草地是有一格一格的,於是可以建立一個二維陣列的結構體,來表示地圖上當前格子的狀態。

3.2.2卡片元素
植物與殭屍都有選擇的卡片,如圖所示

植物有植物的卡片,殭屍有殭屍的卡片。每張卡片它們具有不同的屬性,建立一個結構體。

3.2.4其他元素
這裡其他元素是推車元素,殭屍方的墓碑靶子元素,植物的子彈元素。同理,它們有自己特性。

3.3遊戲處理
3.3.1子彈碰到殭屍處理
子彈是一個結構體陣列,殭屍也是結構體陣列,用兩個for迴圈掃描這兩個陣列,當子彈的座標與殭屍的座標滿足相碰關係時,子彈啟用標誌清零,即子彈消失,同時殭屍的生命值減一。直到殭屍清零,殭屍死亡。
3.3.2殭屍碰到植物處理
For迴圈掃描每個殭屍,通過殭屍的位置判斷出它此時所對應地圖上的前一個格子。通過當前格子的狀態,判斷接下來發生的事情。例如:格子裡沒植物,殭屍通過;殭屍碰到豌豆射手,堅果牆,向日葵就停下來開吃,同時,格子的生命值不停地減,直到吃掉植物,向前通行,當是撐杆殭屍有一個杆子,碰到它們後要跳過它們;殭屍碰到炸彈,窩瓜,食人花就被吃掉或炸死,同時播放動畫效果。
3.3.3推車碰到殭屍處理
For迴圈掃描每個殭屍,當殭屍走到最左端的時候,啟用推車的標誌,並且推車向右行駛。推車在這條路上碰到殭屍,殭屍就死亡,當推車到達最右端時,推車死亡。
如果有想要學習C/C++的小夥伴,可以關注小編【C/C++企鵝群496926338】或者wx公眾號CPP_cx,小編也有5年程式設計經驗了,免費送一套比較系統的資料、教程和工作經驗,就當是福利吧! 想要植物大戰殭屍全套原始碼和素材也可以找我喲!