1.設計一個雙人對戰的植物大戰僵屍,兩人在一台電腦上玩。
植物方使用滑鼠控制,基本上與原版的控制的方法一樣。植物方獲勝條件是打掉僵屍最後面的五個墓碑中的三個。僵屍方使用鍵盤控制,W控制僵屍選擇游標的上移,S控制僵屍選擇游標的下移,ENTER是僵屍選擇的確認,方向鍵控制僵屍安放的位置,空格鍵是安放僵屍。僵屍方的獲勝條件是與原版一樣走到戴夫家裡。
2.首先,根據我的設計,我把游戲分為幾個元素:地圖格子元素,卡片元素,僵屍元素,推車元素,僵屍方的墓碑靶子元素,植物的子彈元素,動畫效果播放元素。其次,把游戲分為幾個處理:子彈碰到僵屍處理,僵屍碰到植物處理,推車碰到僵屍處理,子彈碰到墓碑靶子處理等。每個處理完後立馬接上動畫播放效果。
3.植物元素和僵屍元素都是動態的,於是我想到了載入GIF。經過查找資料,找到了在VC6.0中用GDI 載入GIF的方法。
詳見VC6.0使用GIF資料
資料和示常式序地址VC6.0載入GIF方法,示常式序
這是因為當數據量很大時,繪圖可能需要幾秒鍾甚至更長的時間,而且有時還會出現閃爍現象,為了解決這些問題,可採用雙緩衝技術來繪圖。雙緩衝即在內存中創建一個與屏幕繪圖區域一致的對象,先將圖形繪制到內存中的這個對象上,再一次性將這個對象上的圖形拷貝到屏幕上,這樣能大大加快繪圖的速度。雙緩衝實現過程如下:
(1)、在內存中創建與畫布一致的緩衝區
(2)、在緩衝區畫圖
(3)、將緩衝區點陣圖拷貝到當前畫布上
(4)、釋放內存緩衝區
增加雙緩衝後的示常式序地址雙緩衝載入GIF程序結果
4.植物大戰僵屍的地圖中的草地是有一格一格的,於是可以建立一個二維數組的結構體,來表示地圖上當前格子的狀態。
5.植物與僵屍都有選擇的卡片
植物有植物的卡片,僵屍有僵屍的卡片。每張卡片它們具有不同的屬性,建立一個結構體。
6.每個僵屍都是一個獨立的單元,包含著它的存活,位置等。我用的是一個結構體數組,其實可以用循環隊列的。
7.這裡其他元素是推車元素,僵屍方的墓碑靶子元素,植物的子彈元素。同理,它們有自己特性。
8.游戲處理
3.3.1子彈碰到僵屍處理
子彈是一個結構體數組,僵屍也是結構體數組,用兩個for循環掃描這兩個數組,當子彈的坐標與僵屍的坐標滿足相碰關系時,子彈激活標誌清零,即子彈消失,同時僵屍的生命值減一。直到僵屍清零,僵屍死亡。
3.3.2僵屍碰到植物處理
For循環掃描每個僵屍,通過僵屍的位置判斷出它此時所對應地圖上的前一個格子。通過當前格子的狀態,判斷接下來發生的事情。例如:格子里沒植物,僵屍通過;僵屍碰到豌豆射手,堅果牆,向日葵就停下來開吃,同時,格子的生命值不停地減,直到吃掉植物,向前通行,當是撐桿僵屍有一個桿子,碰到它們後要跳過它們;僵屍碰到炸彈,窩瓜,食人花就被吃掉或炸死,同時播放動畫效果。
3.3.3推車碰到僵屍處理
For循環掃描每個僵屍,當僵屍走到最左端的時候,激活推車的標誌,並且推車向右行駛。推車在這條路上碰到僵屍,僵屍就死亡,當推車到達最右端時,推車死亡。