謝昊 昝鄉(xiāng)鎮(zhèn)
摘要:在不少人眼中,電子游戲是第九藝術(shù),容易被青少年接受,所以具有極大的市場(chǎng)。但是當(dāng)今社會(huì),生活節(jié)奏飛快,大部分人已經(jīng)沒法靜下心來(lái)花大量時(shí)間去玩某個(gè)“3A”大作。而flappy bird游戲正是一款快節(jié)奏的Side-Scrolling (橫向卷軸)游戲。該文以當(dāng)前比較熱門的JAVA語(yǔ)言,在需求分析的基礎(chǔ)上,開發(fā)并設(shè)計(jì)了經(jīng)典的flappy bird游戲。
關(guān)鍵詞:JAVA;游戲;flappy bird;事件處理;IntelliJ IDEA
中圖分類號(hào):TP317 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)29-0077-03
Abstract: In the eyes of many people, video games are the ninth art, easily accepted by young people. In today's society, the pace of life is fast, most people have been unable to settle down to spend a lot of time playing "3A" games. But the flappy bird game is a fast-paced Side-Scrolling (horizontal scroll) game. With the help of the current popular JAVA language, this paper develops and designs the classic flappy bird game based on the demand analysis.
Key words: JAVA; game development; flappy bird; event processing; IntelliJ IDEA
1 背景
開發(fā)游戲的語(yǔ)言不止一種,JAVA是當(dāng)前比較流行的一門編程語(yǔ)言,因其是一種可以撰寫跨平臺(tái)應(yīng)用程序的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言[1],并具有卓越的通用性、高效性和平臺(tái)移植性,同時(shí),JAVA語(yǔ)言在游戲開發(fā)方面, 又因?yàn)槠湔Z(yǔ)言嚴(yán)謹(jǐn)、可讀性強(qiáng)、高度的便利性等優(yōu)勢(shì),在游戲開發(fā)中具有非常重要的地位[2]。
當(dāng)今社會(huì),生活節(jié)奏飛快,大部分人已經(jīng)沒法靜下心來(lái)花大量時(shí)間去玩某個(gè)“3A”大作。但flappy bird游戲正是一款快節(jié)奏的Side-Scrolling (橫向卷軸)游戲,方便人們?cè)诘溶嚮蛘咂渌槠瘯r(shí)間里去耍上幾局。它由來(lái)自越南的獨(dú)立游戲開發(fā)者Dong Nguyen所制作,游戲于2013年5月24日上線,并在2014年2月突然爆紅,可謂是游戲史上的一朵奇[3]。游戲雖然難度極大,新人上手困難,但是通過游戲分?jǐn)?shù)的排名,它讓人產(chǎn)生強(qiáng)烈的競(jìng)爭(zhēng)欲,即使“受苦”也樂此不疲。該文基于JAVA平臺(tái)對(duì)flappy bird游戲進(jìn)行設(shè)計(jì)和開發(fā)。整個(gè)游戲在Microsoft Windows10 64位操作系統(tǒng)下,利用Intelli J IDEA 2017.2.4 x64開發(fā)工具進(jìn)行開發(fā)。游戲模式的選擇使用鼠標(biāo)進(jìn)行操作;游戲中小鳥的控制使用鼠標(biāo)或者方向鍵上操作。
2 需求分析與系統(tǒng)結(jié)構(gòu)
2.1 功能需求
通過對(duì)flappy bird游戲的多次試玩和深入分析,可以發(fā)現(xiàn),該款游戲雖然沒有華麗的游戲畫面,劇情幾乎為零,也不可能通關(guān),但每次分?jǐn)?shù)的提高都讓人無(wú)比激動(dòng)。游戲中的圖形設(shè)計(jì)和界面的美化至關(guān)重要,玩家通過點(diǎn)擊鼠標(biāo)操縱小鳥在屏幕中向上移動(dòng),游戲剛開始時(shí)屏幕的右邊開始出現(xiàn)水管。游戲中水管會(huì)每隔一段距離放置,如果成功越過一個(gè)水管,分?jǐn)?shù)加一,反之則跳轉(zhuǎn)到game over畫面。
像大多數(shù)游戲一樣,初始界面里有開始游戲和退出游戲的按鈕。開始游戲后,小鳥出現(xiàn)在屏幕中,有撲騰著翅膀的動(dòng)畫效果,并根據(jù)重力加速度下落;而背景的藍(lán)天白云隨小鳥移動(dòng)而移動(dòng);玩家輕點(diǎn)鼠標(biāo)控制小鳥控制向上移動(dòng)。
2.2 總體結(jié)構(gòu)
flappy bird游戲的總體設(shè)計(jì)分為五個(gè)模塊,總體結(jié)構(gòu)設(shè)計(jì)圖如圖1所示。
3 游戲數(shù)據(jù)流程
flappy bird游戲的數(shù)據(jù)流程如圖2所示。
玩家打開游戲,點(diǎn)擊相應(yīng)位置后開始游玩,游戲全程只需要點(diǎn)擊鼠標(biāo)。一旦進(jìn)入游戲,就對(duì)游戲資源初始化,之后小鳥會(huì)往下掉落。然后判斷小鳥是否與水管相撞或者是落地,如果未相撞則獲得相應(yīng)的分?jǐn)?shù)獎(jiǎng)勵(lì)并繼續(xù)往下掉落。如果相撞,則游戲結(jié)束。
4 核心功能模塊的設(shè)計(jì)
該款游戲具有以下3種特性:穩(wěn)定性,即游戲進(jìn)行時(shí)不會(huì)出現(xiàn)故障;可維護(hù)性,即在不破壞玩家數(shù)據(jù)的前提下進(jìn)行維護(hù)修復(fù)程序BUG;擴(kuò)展性,即在原有基礎(chǔ)上有添加更多的內(nèi)容,使游戲煥發(fā)出新的生命力。下面,我就詳細(xì)介紹一下游戲中核心功能模塊的實(shí)現(xiàn)。
4.1 界面設(shè)計(jì)
通過Swing工具包完成面板的整體布局。利用JFrame作為大的容器,在窗體里設(shè)置三個(gè)JPanel面板,分別作為開始界面,游戲界面和游戲結(jié)束界面,在相應(yīng)時(shí)刻設(shè)置面板是否可見。
創(chuàng)建一個(gè)MyPanel類繼承于JPanel類,對(duì)Jpanel類中的paintComponent ()方法進(jìn)行重寫,以便程序在繪制不斷向左滾動(dòng)的背景時(shí),MyPanel線程調(diào)用repaint()方法時(shí)能實(shí)現(xiàn)背景移動(dòng)和小鳥撲騰翅膀的效果。
4.2 動(dòng)畫設(shè)計(jì)
動(dòng)畫設(shè)計(jì)里包括小鳥撲騰翅膀的動(dòng)態(tài)效果、友好的人機(jī)交互、背景圖片的滾動(dòng)以及水管的隨機(jī)高度。
為了實(shí)現(xiàn)友好的人機(jī)交互,需要通過java中的事件處理技術(shù)實(shí)現(xiàn)點(diǎn)擊按鈕的反應(yīng)。當(dāng)單擊單人模式選項(xiàng)時(shí),會(huì)產(chǎn)生一個(gè)ActionEvent事件,或者在游戲正式開始時(shí),只要玩家觸碰鍵盤上的方向鍵,就會(huì)產(chǎn)生一個(gè)KeyEvent事件,之后Java虛擬機(jī)(JVM)檢測(cè)項(xiàng)目中與該選項(xiàng)或方向鍵對(duì)應(yīng)的事件處理器是否存在,事件處理器實(shí)質(zhì)是一個(gè)方法,如mouseClicked ()方法。JVM通過傳遞過來(lái)的 MouseEvent或者keyEvent對(duì)象,獲得事件發(fā)生時(shí)與該事件及事件源相關(guān)聯(lián)的信息。
4.3 碰撞檢測(cè)的設(shè)計(jì)
碰撞檢測(cè)算法有:點(diǎn)與矩形碰撞、點(diǎn)與圓形碰撞、矩形之間碰撞、圓形之間碰撞等[4]。flappy bird游戲中碰撞檢測(cè)的方法是點(diǎn)與矩形碰撞,將游戲中的小鳥近似地看作矩形,水管看作點(diǎn),如果小鳥的矩形部分和點(diǎn)重合即發(fā)生碰撞。只要游戲中的實(shí)體對(duì)象(小鳥、水管)的位置發(fā)生了變化,就需要執(zhí)行碰撞檢測(cè)算法。
4.4 音效的設(shè)計(jì)
電子游戲是一門集合了美學(xué)、動(dòng)畫、音樂、交互設(shè)計(jì)等元素的第九藝術(shù)。影響同樣類型的兩款游戲之前熱度持續(xù)的因素有很多,其中背景音樂(bgm)可能是重要的一點(diǎn)。背景音樂能夠影響游戲的節(jié)奏感,體現(xiàn)一款游戲的本質(zhì)。背景音樂有從悠揚(yáng)到急促的過渡,才能讓玩家更容易獲得愉快的體驗(yàn)感,增強(qiáng)游戲的重復(fù)可玩性。或者說,游戲節(jié)奏對(duì)孕育游戲產(chǎn)品的深層魅力起著不可或缺的作用;控制游戲節(jié)奏,當(dāng)是游戲開發(fā)設(shè)計(jì)中的一個(gè)關(guān)鍵環(huán)節(jié);優(yōu)秀的游戲不僅善于通過音樂渲染氣氛,也幾乎都善于使用音樂去控制玩家的交互頻率[5],追求游戲節(jié)奏構(gòu)思的良好實(shí)現(xiàn),讓玩家在游戲中減少無(wú)聊感。
4.5 數(shù)據(jù)庫(kù)的設(shè)計(jì)
常用操作是:
1)加載驅(qū)動(dòng)程序:Class.forName(driverClass);
2)獲得數(shù)據(jù)庫(kù)連接DriverManager.gerConnection(URL,user,password);
3)創(chuàng)建Statement對(duì)象:conn.createStatement();
4)向數(shù)據(jù)庫(kù)發(fā)送SQL命令;
5)最后處理數(shù)據(jù)庫(kù)的返回結(jié)果(ResultSet類)。
5 測(cè)試
該游戲的測(cè)試方法主要是通過試玩來(lái)發(fā)現(xiàn)問題,然后根據(jù)記錄的問題對(duì)游戲進(jìn)行相應(yīng)的改進(jìn),然后再一次測(cè)試。最終,打開游戲,游戲的界面各個(gè)部分正常顯示,如圖3、4、5所示。
6 結(jié)束語(yǔ)
該文在需求分析的基礎(chǔ)上,概述了基于java的flappy bird游戲需要設(shè)計(jì)與實(shí)現(xiàn)的基本功能,以 idea作為開發(fā)平臺(tái),成功完成各個(gè)核心功能。在調(diào)試bug的同時(shí),我也看到了不少完善的空間,比如添加不同難度的模式和游戲音樂的變化等,有利于游戲可玩性進(jìn)一步的提高。
參考文獻(xiàn):
[1] 王紅偉, 李會(huì)凱. 計(jì)算機(jī)軟件開發(fā)的Java編程語(yǔ)言探究[J]. 無(wú)線互聯(lián)科技, 2018, 15(10): 56-57.
[2] 許益凡, 薛益鴿. 基于JAVA平臺(tái)的魔塔游戲設(shè)計(jì)[J]. 智能計(jì)算機(jī)與應(yīng)用, 2018, 8(3): 235-239, 243.
[3] 張書樂. 爆紅的手機(jī)小游戲《Flappy Bird》[J]. 信息與電腦: 理論版, 2013(12): 13.
[4] 周貴志. 碰撞檢測(cè)算法[EB/OL].http://blog.csdn.net/jjwwmlp456/article/details/40679879.
[5] 趙錕. 基于電子游戲節(jié)奏的游戲音樂簡(jiǎn)析[J]. 音樂傳播, 2018(2): 123-124.
【通聯(lián)編輯:謝媛媛】