曾令思 余婷 席一
摘 要 隨著計(jì)算機(jī)時(shí)代的到來(lái),游戲受到人們?cè)絹?lái)越多的青睞。以單機(jī)游戲?yàn)楸尘?,探討了射擊?lèi)游戲的諸多設(shè)計(jì)要點(diǎn),包括體系結(jié)構(gòu),系統(tǒng)安全等。本游戲是一款休閑益智的射擊游戲。在JAVA的基礎(chǔ)上,極大的優(yōu)化了代碼,減少了代碼冗余,而且易于查看游戲的運(yùn)行界面。
關(guān)鍵詞 射擊游戲 代碼實(shí)現(xiàn) JAVA游戲系統(tǒng)
中圖分類(lèi)號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A
1系統(tǒng)架構(gòu)
系統(tǒng)構(gòu)架主要有兩方面組成,一個(gè)是開(kāi)始界面,另一個(gè)是主函數(shù)。開(kāi)始界面主要功能是實(shí)現(xiàn)跳轉(zhuǎn),在開(kāi)始界面中也應(yīng)當(dāng)具有背景,音樂(lè)等。在主函數(shù)中,主要調(diào)用我方子彈,桃心,我方滅火器,敵方蜜蜂,背景類(lèi),音樂(lè)類(lèi)等功能模塊。
(1)在用戶點(diǎn)擊開(kāi)始界面的“PLAY”按鈕后,可自動(dòng)跳轉(zhuǎn)到主游戲界面。這是通過(guò)ActionListener實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤(pán)動(dòng)作的。在GameButton中主要是通過(guò)如下方式監(jiān)聽(tīng)鍵盤(pán)點(diǎn)擊的:
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand( ).equals("btn")){
close_MainWindows( );
new GameButtonStart( ).showGame( );
return;
(2)實(shí)現(xiàn)方在窗體顯示方法中添加關(guān)閉監(jiān)聽(tīng):
this.addWindowListener(new closeWindow()); this.setVisible(true);
再在窗體顯示方法外建立關(guān)閉窗口方法:
public void close_MainWindows( ) {
this.setVisible(false);}
(3)在游戲中可調(diào)用音樂(lè)類(lèi),實(shí)現(xiàn)播放音樂(lè)的功能。其主要實(shí)現(xiàn)方法是在類(lèi)外部定義一個(gè)Music類(lèi),新建一個(gè)有音樂(lè)的music文件夾,再在主類(lèi)中調(diào)用Music類(lèi)。
2游戲設(shè)計(jì)中需要解決的主要問(wèn)題分析
(1)背景圖層的循環(huán)顯示和閃爍。由于背景圖層只有一張圖片,若想讓游戲有移動(dòng)的真實(shí)感,則應(yīng)當(dāng)讓圖片一直不停的移動(dòng)。以圖片為參照物,就會(huì)感覺(jué)蜜蜂,滅火器的移動(dòng)更加逼真。另外,圖片初始時(shí)會(huì) 出現(xiàn)閃爍問(wèn)題,這時(shí)應(yīng)當(dāng)調(diào)用update()方法消除閃爍。
(2)蜜蜂和滅火器的碰撞。這時(shí),可在我方滅火器的子彈類(lèi)中,和蜜蜂類(lèi)中獲取蜜蜂的矩形:
//獲取蜜蜂的矩形
public Rectangle getRectangle(){
return new Rectangle(planeBulletX, planeBulletY, planeBulletWidth, planeBulletHeight);}
3關(guān)鍵技術(shù)
(1)背景的實(shí)現(xiàn):滾動(dòng)背景主要通過(guò)move()來(lái)實(shí)現(xiàn)。在主程序調(diào)用BackGround類(lèi)中的draMe(Graphics)時(shí),就會(huì)自動(dòng)的調(diào)用move()函數(shù),實(shí)現(xiàn)屏幕的滾動(dòng)播放。
(2)內(nèi)存的優(yōu):很多程序由于沒(méi)有采用正確的方法分配和使用內(nèi)存,不僅占用內(nèi)存較多,而且運(yùn)行效率不高。
4游戲的實(shí)現(xiàn)
本游戲的開(kāi)發(fā)是在Microsoft Windows 2007操作系統(tǒng)下,使用JAVA語(yǔ)言開(kāi)發(fā)的。
(1)開(kāi)始界面的實(shí)現(xiàn):用戶進(jìn)入游戲系統(tǒng)后,首先出現(xiàn)的是開(kāi)始界。在開(kāi)始界面中,用戶點(diǎn)擊“PLAY”按鈕,在偵聽(tīng)到點(diǎn)擊了“PLAY”按鈕后,跳轉(zhuǎn)到游戲進(jìn)行界面。
(2)滾動(dòng)屏幕的實(shí)現(xiàn):在游戲界面中,會(huì)出現(xiàn)背景圖片。BackGround的實(shí)例化bg的初始化是在GameStart中,并且把GameStart的當(dāng)前值傳給bg對(duì)象,以便于在程序退出時(shí),能夠用主類(lèi)調(diào)用它的退出方法closeWindow。在BackGround類(lèi)中,設(shè)置一個(gè)bgwidth 和一個(gè)bgHeight分別設(shè)置背景圖片的寬和高。再設(shè)置一個(gè)bgY1 和一個(gè)bgY2 用來(lái)控制圖片的移動(dòng)。在BackGround中,寫(xiě)一個(gè)movie()方法,隨著時(shí)間的改變而改變。這時(shí),就會(huì)出現(xiàn)滾動(dòng)的屏幕。
(3)主程序的實(shí)現(xiàn):當(dāng)玩家按下W,A,S,D分別對(duì)應(yīng)的上,左,下,右時(shí),函數(shù)Plane類(lèi)中的move()方法的變量y,x加5或減5。相對(duì)應(yīng)的,滅火器的位置會(huì)向上,左,下,右飛行一定距離。當(dāng)鍵盤(pán)松開(kāi)時(shí),滅火器會(huì)停止不動(dòng)。在moie()方法中,會(huì)調(diào)用方法location()。
public void location() {
if (bU && !bD && !bL && !bR) {
planeDir = Direction.U;
}
if (!bU && bD && !bL && !bR) {
planeDir = Direction.D;
}
if (!bU && !bD && bL && !bR) {
planeDir = Direction.L;
}
if (!bU && !bD && !bL && bR) {
planeDir = Direction.R;
}
if (!bU && !bD && !bL && !bR) {
planeDir = Direction.STOP;
參考文獻(xiàn)
[1] Bruce Eckel,陳昊鵬.Java編程思想[M].北京:機(jī)械工業(yè)出版社,2002.
[2] Adam Drozdex,數(shù)據(jù)結(jié)構(gòu)與算法(Java語(yǔ)言版)[M].北京:機(jī)械工業(yè)出版社,2003.
[3] Curtis D.Java,RM I and Corba[M].white paper of Object Management Group,1996.