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