霍家亮 劉 博
(青島理工大學琴島學院計算機工程系,山東 青島 266106)
任天堂FC上的坦克大戰(zhàn)是游戲史上的經(jīng)典游戲,隨著時代的發(fā)展,硬件水平的不斷提高,人們對于娛樂的要求逐漸提高,F(xiàn)C等上個世紀80年代出現(xiàn)的游戲機早已不能滿足人們對于娛樂的需求。
在學習.NET的過程中,隨著對于.NET開發(fā)工具Visual Studio 2008的深入了解以及.NET開發(fā)技術、開發(fā)規(guī)范的不斷認識,萌生了將FC上的經(jīng)典游戲--坦克大戰(zhàn)在電腦上重現(xiàn)并加以改進的想法,這就是本項目開發(fā)背景。
瘋狂坦克是一個基于.NET平臺的Windows Forms小型應用程序,使用C#語言編寫,要求能夠實現(xiàn)畫布的生成,坦克的生成,敵我識別,我方坦克移動,敵方AI坦克移動,坦克的越界處理,坦克射擊功能,子彈與坦克的碰撞檢測,坦克護甲系統(tǒng),墻體系統(tǒng)等;另外還要求能夠在游戲過程中顯示游戲的實時信息、畫布上子彈總數(shù)、殘存物體總數(shù)、擊毀坦克數(shù),來作為游戲水平的檢測;在游戲中還能夠隨即產(chǎn)生AI坦克以及墻體。
(1)模塊劃分:
瘋狂坦克游戲按照功能劃分為兩個模塊:游戲元素和游戲處理。其中,游戲元素是游戲中的裝備,主要包括了:繪制坦克、繪制墻體、繪制子彈;游戲處理完成游戲的各種操作,主要包括:子彈命中、坦克護甲、坦克移除,如圖3-1所示:
圖3-1 游戲模塊圖
(2)業(yè)務流程:
游戲的工作流程:初始化生成游戲,繪制坦克、墻體,完成坦克移動、射擊,根據(jù)子彈碰撞的情況,判斷目標是否命中,如果坦克被命中,那么坦克將被銷毀;然后,游戲結束,簡單描述如下:
<1>當程序開始運行的時候,首先生成一個窗體,然后創(chuàng)建一個容器,用來容納游戲中的元素。
<2>容器創(chuàng)建完成后,開始繪制敵方坦克和己方坦克以及墻體。
<3>繪制完成后,敵方坦克按照AI開始移動,并開始射擊,射擊時根據(jù)坦克的方向繪制子彈。己方坦克根據(jù)鍵盤按鍵進行移動,若按下ctrl鍵則己方坦克開始射擊。如果子彈命中目標,如果目標擁有護甲,則目標減去一層護甲,如果目標已經(jīng)沒有護甲,則目標被消滅,從容器中移除它。墻體和坦克一樣,也擁有護甲值,但和坦克不同的是,墻體不能移動。當消滅一定數(shù)量的坦克或者墻體后,游戲會自動添加一定數(shù)量的坦克或者墻體,從而增加游戲難度。
<4>當己方坦克被消滅時,游戲結束。
(3)運行環(huán)境:
操作系統(tǒng):選擇win7或者indows xp
運行框架:.Net framework3.0
根據(jù)模塊功能,創(chuàng)建游戲運行界面,包含坦克、子彈、墻等游戲元素的繪制和重畫;構建類庫,包含游戲實現(xiàn)的主要方法,完成游戲的操作;創(chuàng)建配置文件,主要包括游戲元素的初始化信息,如:坐標信息。下面是游戲部分功能的實現(xiàn)方法:
(1)坦克的生成方法,部分代碼如下:
(2)坦克繪制以及坦克裝甲繪制,部分代碼如下:
(3)坦克的移動及射擊,用random.Next()控制坦克的隨機運動,用next值表示對應的方向,用random.Next()控制坦克的隨機發(fā)射炮彈,部分代碼如下:
(4)子彈與坦克的碰撞檢測方法,用Intersects With來檢測兩個矩形相碰撞。碰撞后,依次檢視是否為墻、是否無效子彈、是否有護甲,主要代碼如下:
本文采用C#語言實現(xiàn)了游戲的全部功能,在單機和局域網(wǎng)上測試通過,并改進了部分功能,游戲占內存比較小,運行比較流暢、沒有出現(xiàn)死機或者其它問題。
[1]于國防.李劍.C#語言Windows程序設計[M],清華大學出版社,2010.5
[2]童恒慶,梅清.基于.NET平臺的B/S系統(tǒng)開發(fā)框架的研究[J].微機發(fā)展,2004.6
[3]許洪明,趙金城.基于Web的重大工程項目管理信息系統(tǒng)應用研究[J].建筑技術開發(fā),2004.3