基于java的俄罗斯方块游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
基于Java的俄羅斯方塊游戲的設(shè)計與實現(xiàn)
??? 俄羅斯方塊是一款風(fēng)靡全球,從一開始到現(xiàn)在都一直經(jīng)久不衰的電腦、手機、掌上游戲機產(chǎn)品,是一款游戲規(guī)則簡單,但又不缺乏樂趣的簡單經(jīng)典小游戲,上手容易,適用范圍廣泛,人所共知。俄羅斯方塊游戲簡單的基本規(guī)則是有小方塊組成的7種不同的規(guī)則圖形陸續(xù)從屏幕上落下,玩家操作移動使其下落拼出一條完整的橫條,隨即會消失,玩家得分,游戲等級提高,當(dāng)沒有被消除的圖形堆積到屏幕頂端時,游戲結(jié)束。
??? 俄羅斯方塊游戲最初是由俄羅斯人阿列克謝·帕基特諾夫在1984年開發(fā)的休閑小游戲,曾幾何時它創(chuàng)造了無可匹敵的商業(yè)價值,影響了一代休閑小游戲的開發(fā)與產(chǎn)業(yè)鏈。隨著信息時代科技時代的不斷發(fā)展和變化,計算機已經(jīng)普及到每一個人的生活中,在繁忙的工作生活中,這一類休閑小游戲給人們帶來了些許的放松。
??? 這篇論文詳細的描述分析了經(jīng)典傳統(tǒng)的俄羅斯方塊實現(xiàn)的基本思路和一些基本游戲規(guī)則,在此基礎(chǔ)之上,更進一步地開發(fā)出俄羅斯方塊的創(chuàng)新創(chuàng)意模式,在經(jīng)典游戲基礎(chǔ)上開發(fā)出隨著分數(shù)增高而等級增高難度加大的模式,并且創(chuàng)意性的開發(fā)出可操控方塊顏色變換的模塊,并且增添了游戲聲音和音樂模塊。本論文對上述功能給出了具體實現(xiàn)流程、詳細描述、和一些源代碼。
本論文闡述了俄羅斯方塊游戲的開發(fā)和發(fā)展歷史、開發(fā)此游戲的意義以及開發(fā)環(huán)境并根據(jù)軟件工程開發(fā)軟件和java編寫程序的相關(guān)知識,對程序的需求分析、概要設(shè)計、詳細設(shè)計與實現(xiàn)、調(diào)試運行進行了一系列描述。
??? 此次程序設(shè)計是在Microsoft Windows 7系統(tǒng)下,以Java為開發(fā)語言,在Eclipse開發(fā)平臺上進行游戲的設(shè)計與實現(xiàn)。
關(guān)鍵詞:游戲設(shè)計;俄羅斯方塊;軟件工程;Java;Eclipse。
目錄
基于Java的俄羅斯方塊游戲的設(shè)計與實現(xiàn)..................................... I
摘? 要..................................................................... I
Based on the design and implementation of Java game Tetris.............. II
Abstract.................................................................. II
1 緒論..................................................................... 1
1.1程序開發(fā)背景及意義................................................. 1
1.2開發(fā)技術(shù)概述....................................................... 2
1.3俄羅斯方塊游戲的研究現(xiàn)狀........................................... 2
1.3.1 國內(nèi)外研究現(xiàn)狀............................................... 2
1.3.2 文獻綜述..................................................... 3
2相關(guān)技術(shù)................................................................. 4
2.1JAVA簡介........................................................... 4
2.2 Swing組件簡介..................................................... 4
2.3Eclipse開發(fā)平臺簡介................................................ 5
2.4系統(tǒng)平臺環(huán)境:..................................................... 6
2.4.1 硬件平臺:................................................... 6
2.4.2 軟件平臺:................................................... 6
3? 系統(tǒng)分析................................................................ 7
3.1可行性分析......................................................... 7
3.1.1經(jīng)濟可行性分析............................................... 8
3.1.2技術(shù)可行性分析............................................... 8
3.1.3社會可行性分析............................................... 8
3.2需求分析........................................................... 8
3.2.1 功能性需求................................................... 9
3.2.2 非功能性需求................................................. 9
3.2.3? 接口控制.................................................... 9
4? 系統(tǒng)的概要設(shè)計......................................................... 11
4.1? 系統(tǒng)的功能設(shè)計................................................... 11
4.1.1? 手動處理業(yè)務(wù)的基本流程..................................... 11
4.1.2? 基本流程的功能模塊......................................... 12
5? 系統(tǒng)的詳細設(shè)計與實現(xiàn).................................................. 15
5.1? 游戲主界面顯示模塊............................................... 15
5.2? 畫布、方塊顯示模塊............................................... 16
5.2.1? 背景畫布模塊設(shè)計........................................... 16
5.2.2? 預(yù)覽方塊模塊設(shè)計........................................... 19
5.2.3? 方塊移動、旋轉(zhuǎn)模塊設(shè)計..................................... 21
5.3? 控制面版模塊..................................................... 25
5.3.1? 菜單欄模塊設(shè)計............................................. 25
5.3.2? 控制面板按鈕設(shè)計........................................... 26
6? 系統(tǒng)的測試運行......................................................... 29
6.1 測試概述.......................................................... 29
6.1.1? 測試原則................................................... 29
6.1.2? 測試方法................................................... 30
6.1.3? 測試意義及注意事項......................................... 31
6.2 游戲代碼、算法的測試.............................................. 31
6.3 游戲界面菜單選項的功能測試....................................... 32
6.4 按鍵事件的功能測試................................................ 34
6.5 方塊的堆砌與消行功能測試......................................... 35
6.6? 測試結(jié)果......................................................... 35
結(jié)? 論.................................................................... 36
參考文獻.................................................................. 38
致 謝..................................................................... 39
附錄A 外文原文........................................................... 40
The psychology of Tetris.............................................. 40
附錄B 外文翻譯........................................................... 43
俄羅斯方塊的心理效應(yīng).................................................. 43
1 緒論
??? 緒論從程序的開發(fā)背景、開發(fā)意義以及所需要開發(fā)技術(shù)和目前國內(nèi)外對俄羅斯方塊游戲的研究現(xiàn)狀進行了簡要的敘述。
1.1程序開發(fā)背景及意義
??? 俄羅斯方塊游戲是一款流行于全世界并且經(jīng)久不衰的游戲,是一款在計算機,手機,電視游戲機,掌上游戲機等一系列產(chǎn)品上都能玩的休閑小游戲,它曾經(jīng)創(chuàng)造了幾乎任何游戲都無可匹敵的轟動和無數(shù)的商業(yè)價值,是游戲史,軟件開發(fā)史上的一件重要的大事。
??? 在1984年6月的一天,俄羅斯莫斯科的數(shù)學(xué)家阿列克謝·帕基特諾夫(Alex Pajitnov)在工作地點莫斯科科學(xué)計算機中心玩過一個拼圖游戲后突然受到啟發(fā),而設(shè)計出這款游戲,剛開始他只是在Electronica 60(一種計算機)上進行開發(fā),后來經(jīng)由瓦丁·格拉西莫夫(Vadim Gerasimov)移植到PC端,并且在莫斯科的計算機界廣泛傳播,俄羅斯方塊開始大火,成為了有史以來最為暢銷的經(jīng)典休閑小游戲,至今還一如既往保持魅力。俄羅斯方塊簡單的基本游戲規(guī)則是在一個用于擺放小正方形的標準虛擬游戲場地,基本單位為小型正方形;由四個小型正方形組成7中不同的規(guī)則圖形(田字形,Z字形,反Z字形,7字形,反7字形,T字形,長條形)通過玩家操作上鍵以90度,180度,270度,360度旋轉(zhuǎn)方塊一共有28種圖形方案,通過左鍵右鍵左右移動,下鍵加速下落調(diào)整位置,是方塊在屏幕底部拼出完整的一條或幾條,然后消除,給新落下的方塊騰出位置,每消除一條完整橫條,玩家等級提高一級,當(dāng)?shù)燃壧岣叩揭欢ǖ燃墪r剛快下落速度加快,一旦沒被消除的方塊到達屏幕頂端,游戲結(jié)束。
??? 隨著計算機技術(shù)的日益更新和不斷發(fā)展,俄羅斯方塊游戲也不斷地推出各式各樣的模式,也有許多不同的版本供大家玩耍,因為游戲本身有簡單,有復(fù)雜,能夠很好地鍛煉游戲玩家的腦力反應(yīng)能力,和邏輯思維能力,還能給玩家?guī)頍o窮的游戲樂趣,所以深受廣大玩家的喜歡。對于開發(fā)游戲軟件,大多數(shù)人都感到觸摸不到,很神奇,隨著開發(fā)方法和工具的不斷推陳出新,自己動手開發(fā)一些小游戲也并非遙不可及。俄羅斯方塊游戲在游戲史上的地位無可匹敵,并且游戲的界面簡約,代碼并不是很復(fù)雜,互聯(lián)網(wǎng)上也有很多關(guān)于俄羅斯方塊游戲?qū)崿F(xiàn)的一些算法和設(shè)計,難度并非特別大。
??? 俄羅斯方塊游戲簡單,益智,以其獨特簡潔的界面和極具玩耍樂趣的模式讓眾多的游戲愛好者深陷其中,無法自拔,并且老少皆宜。在如今快節(jié)奏的生活當(dāng)中,學(xué)生和工作黨的學(xué)習(xí)工作壓力也隨之越來越大,每個人的任務(wù)逐漸繁重,越來越少的自由支配休息時間讓人們更加迫切的需要有一些既簡單又節(jié)省時間的休閑游戲供大家娛樂。毫無疑問,俄羅斯方塊是一款簡單益智有趣的休閑小游戲,并且可以移植到電腦、手機、平板電腦、電視游戲機、掌上游戲機、電子詞典、Mp4等一系列便攜設(shè)備上。本次課題研究,無論從技術(shù)開發(fā)上,還是社會意義上,都是很有價值的,是本人對游戲開發(fā)的一次膽大嘗試。
1.2開發(fā)技術(shù)概述
軟件工程是一門研究用工程化方法構(gòu)建和維護有效的,實用的和高質(zhì)量的軟件的學(xué)科;設(shè)計包括程序設(shè)計語言,數(shù)據(jù)庫,算法,軟件開發(fā)工具,系統(tǒng)平臺,設(shè)計模式等很多方面;在現(xiàn)代社會中,軟件應(yīng)用于電子郵件,嵌入式系統(tǒng),人機交互界面,辦公套件,操作系統(tǒng),編輯器,數(shù)據(jù)庫,游戲等多個典型方面;同時,在如今社會的各式各樣的行業(yè)中都有計算機軟件的應(yīng)用,包括工業(yè),農(nóng)業(yè),銀行,航空,政府部門等等,能有效的促進經(jīng)濟和社會的發(fā)展,提高人們的工作效率和生活效率。
俄羅斯方塊游戲開發(fā)代碼相對來說不是特別復(fù)雜,本論文基于Java編程語言,采用Java語言中常用的Swing組件。Swing是Java中的圖形用戶界面(GUI)工具包,是Java基礎(chǔ)類的一部分,包括了文本框,分隔窗格,按鈕,表等GUI器件,使用純Java寫成,開發(fā)人員可以用少量的代碼就可以寫出Swing各式各樣的靈活豐富的功能和模塊化組件來創(chuàng)建漂亮優(yōu)美的用戶界面。Java Swing組件中包括以下幾個常用的類:JFrame?是屏幕上的圖形對象,可以有最大化、最小化、關(guān)閉等基本操作,是Java的GUI程序設(shè)計的基本思路;JPanel?能夠用來嵌套,對窗體中有相同邏輯功能的組件進行組合,能夠加到JFrame窗體中,是Swing中的面板容器類。 JLabel?對象是用來顯示文本、圖像或同時顯示二者并且可以設(shè)置其中的一些屬性;JTextField是一個用來編輯單行文本的運行組件;JButton是一個用來創(chuàng)建按鈕的類。除此之外,Java中的Swing組件中還包含有許多功能的類,可以簡單的來創(chuàng)建一些優(yōu)美漂亮的圖形界面。
1.3俄羅斯方塊游戲的研究現(xiàn)狀
1.3.1 國內(nèi)外研究現(xiàn)狀
進入二十一世紀以來,計算機不斷地發(fā)展,電競行業(yè)也在不斷進入上升階段,游戲軟件的開發(fā)越來越火,游戲軟件就如同戲劇、電影一樣,是一種越來越火的新型的綜合型藝術(shù)產(chǎn)品。跟一般的網(wǎng)頁開發(fā),軟件開發(fā)不同,計算機游戲軟件的開發(fā)不僅需要設(shè)計開發(fā)人員掌握專業(yè)的程序設(shè)計技巧和軟件工程的方法,還需要專業(yè)的游戲領(lǐng)域的知識,專業(yè)的游戲開發(fā)知識,才能有效的開發(fā)和實現(xiàn)游戲的生動界面,音效處理,并且跟玩家達成完美的交互等。
前蘇聯(lián)科學(xué)家阿列克謝·帕基特諾夫(Alex Pajitnov)原本開發(fā)的《俄羅斯方塊》游戲是作為一種教育用軟件的,之后開始提供授權(quán)給各個游戲公司,至此以后,各大平臺上就出現(xiàn)了各種不同版本的游戲。
Game Boy版的俄羅斯方塊游戲在日本本土賣出了424萬套,成為了Game Boy游戲史上賣的最火的游戲。在海灣戰(zhàn)爭期間,俄羅斯方塊游戲成為了前線美軍最適合的消磨時間的游戲之一。
俄羅斯方塊游戲的基本原理對于大多數(shù)程序員來說是相對比較簡單的,并且俄羅斯方塊游戲具有數(shù)學(xué)性,動態(tài)性和很強的知名度。也經(jīng)常拿來作為游戲程序設(shè)計的練習(xí)題材。
1.3.2 文獻綜述
文獻[1]和文獻[2]以零基礎(chǔ)講解為宗旨,用實例引導(dǎo)讀者深入學(xué)習(xí),采染基礎(chǔ)知識→核心技術(shù)→高級應(yīng)用→項目實戰(zhàn)的講解模式,深入淺出地講解Java的各項技術(shù)及實戰(zhàn)技能。從初學(xué)者角度出發(fā),通過通俗易懂的語言、豐富多彩的實例,詳細介紹了使用Java語言進行程序開發(fā)應(yīng)該掌握的各方面技術(shù)。包括:熟悉Eclipse開發(fā)工具,Java 語言基礎(chǔ),類和對象,包裝類,數(shù)字處理類,接口、繼承與多態(tài),類的高級特性,異常處理,Swing程序設(shè)計,集合類,I/O輸入輸出,反射,枚舉類型與泛型,多線程,網(wǎng)絡(luò)通信,數(shù)據(jù)庫操作,Swing表格組件,Swing樹組件,Swing其他高級組件,高級布局管理器,高級事件處理,AWT繪圖與音頻播放等。這兩本文獻覆蓋了“夠用”得Java語言和技術(shù),實例豐富,內(nèi)容詳盡,對于初學(xué)者和有一定的Java基礎(chǔ)的學(xué)生來說,可以快速的提高學(xué)生的開發(fā)技術(shù)和技能。本課題設(shè)計中有關(guān)圖形界面設(shè)計的內(nèi)容、用戶界面構(gòu)件及設(shè)計、事件處理與窗口構(gòu)造構(gòu)件以及Swing的基礎(chǔ)知識及其系列組件等方面的內(nèi)容都參考了這兩本文獻,給予了我很大的幫助。
文獻[3]主要講解了包括2D繪圖;游戲動畫的制作;網(wǎng)絡(luò)程序基礎(chǔ);強化游戲界面;人工智能與2.5D游戲;掃雷、迷宮、俄羅斯方塊等游戲?qū)嵗?#xff1b;碰撞、粒子系統(tǒng)、5D立體坐標等繪圖算法;多人聯(lián)機游戲制作。收集了一系列的算法公式,讓讀者能更方便的利用。以由淺入深的方式,逐步分析游戲設(shè)計的過程,帶領(lǐng)讀者解決游戲開發(fā)階段可能遇到的問題,并總結(jié)了Java游戲制作的實戰(zhàn)經(jīng)驗。本課程設(shè)計中游戲的原理、動畫的實現(xiàn)、音效的處理、鼠標和鍵盤事件處理、人工智能等知識都參考了該文獻。
文獻[4]探討了經(jīng)典的電腦游戲-俄羅斯方塊的程序原理及其實現(xiàn)技術(shù),從軟件工程的角度描述了程序的功能要求、數(shù)據(jù)結(jié)構(gòu)以及圖形旋轉(zhuǎn)、坐標變換等關(guān)鍵技術(shù)。通過這本文獻讓我了解了更多的關(guān)于俄羅斯方塊游戲開發(fā)的專業(yè)領(lǐng)域的知識。
文獻[5]屬于進階性書籍,更加側(cè)重于講解如何使用Java來思考解決問題。這本文獻本次課程設(shè)計中,給予了我很多關(guān)于Java在編程時編程思想和技巧上很多的幫助
2相關(guān)技術(shù)
2.1 JAVA簡介
??? Java是由Sun Microsystems公司推出的Java面向?qū)ο蟪绦蛟O(shè)計語言和Java平臺的總稱。是一種能夠編寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言。Java 技術(shù)具有良好的通用性、高效性、跨平臺性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。
Java語言歷時近二十年,已發(fā)展成為人類計算機史上影響力最深遠的編程語言之一,從某種程度上看,它甚至超出了編程語言的范疇,成為了一種開發(fā)平臺,一種開發(fā)規(guī)范模式。更甚至于:Java已經(jīng)成為了一種信仰,Java語言所崇尚的開源,自由,等精神,吸引了全世界無數(shù)的優(yōu)秀的程序員。事實上,從人類有記載歷史以來,從來沒有一種編程語言可以吸引這么多優(yōu)秀的程序員使用,也沒有一種編程語言能衍生出這么多的開源框架。
Java語言是一門非常純粹的面向?qū)ο蟮木幊陶Z言,它吸引了C語言和C++語言的各種優(yōu)點,又摒棄了C++語言里難以理解的多繼承,指針等概念,因此Java語言具有功能強大和簡單易用兩個非常良好的特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地表現(xiàn)了面向?qū)ο罄碚?#xff0c;允許程序員以一種更加優(yōu)雅的思維方式進行更加復(fù)雜的編程開發(fā)。
不僅如此,Java語言中相關(guān)的Java EE規(guī)范中包含了當(dāng)今時下最流行的各種軟件工程理念,各種先進的設(shè)計思想,都可以在Java EE規(guī)范、平臺以及相關(guān)的框架中找見相應(yīng)的實現(xiàn)原理。從某種程度上來看,學(xué)精通了Java語言相關(guān)的各種方面的知識,相當(dāng)于系統(tǒng)的學(xué)習(xí)了軟件開發(fā)的相關(guān)知識,而不是僅僅學(xué)完了一門編程語言。
時至今日,大部分銀行,電信,證券,電子商務(wù),電子政務(wù)等各種系統(tǒng)或者已經(jīng)采用Java EE平臺構(gòu)建,或者正在逐漸過渡到采用Java EE平臺來構(gòu)建,Java EE 規(guī)范是目前最成熟的,也是應(yīng)用最廣泛的企業(yè)級應(yīng)用開發(fā)規(guī)范。
2.2 Swing組件簡介
??? Swing API 是一組可擴展的 GUI 組件,用來創(chuàng)建基于 JAVA 的前端/ GUI 應(yīng)用程序。它是建立在 AWT API 之上,并且作為 AWT API 的替代者,因為它的幾乎每一個控件都對應(yīng) AWT 控件。 Swing 組件遵循模型 - 視圖 - 控制器架構(gòu)來滿足下面的準則。一個單一的 API 足夠支持多種外觀和風(fēng)格;API 是模擬驅(qū)動的,這樣最高層級的 API 不需要有數(shù)據(jù);API 是使用 Java Bean 模式的,這樣 Builder Tools 和 IDE 可以為開發(fā)者提供更好的服務(wù)來使用它。
??? Swing API 架構(gòu)用下列的方式來遵循基于松散的 MVC 架構(gòu)。模型表示組件的數(shù)據(jù)。視圖表示組件數(shù)據(jù)的可視化表示形式??刂破鹘邮苡脩粼谝晥D上的輸入,并且在組件的數(shù)據(jù)上反映變化。Swing 組件把模型作為一個單獨的元素,并且把視圖和控制器部分組合成用戶界面的元素。使用這種方式,Swing 具有可插拔的外觀與風(fēng)格架構(gòu)。Swing特點主要有:
??? 輕量級 ——?Swing 組件是獨立的本地操作系統(tǒng)的 API,因為 Swing API 控件通常采用純 JAVA 代碼而不是采用底層的操作系統(tǒng)調(diào)用來呈現(xiàn)。
??? 豐富的控件 ——?Swing 提供了一組豐富的先進的控件,如樹,頁簽窗體,滑動條,顏色選擇器,表格控件。
??? 高級自定義 ——?Swing 控件可以用非常簡單的方法來自定義,因為可視化外觀是獨立于內(nèi)部表示的。
??? 可插拔的外觀和風(fēng)格 ——?基于 Swing 的 GUI 應(yīng)用程序的外觀和風(fēng)格可以在運行時根據(jù)有效的值改變。
2.3 Eclipse開發(fā)平臺簡介
Eclipse 是一個開放源代碼的、基于 Java 的可擴展開發(fā)平臺,專注于為高度集成的工具開發(fā)提供一個全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺。Eclipse只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。Eclipse 附帶了一個標準的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。
Eclipse起始于1999年4月,最初是由IBM公司開發(fā)的替代商業(yè)軟件Visual Age for Java的下一代IDE開發(fā)環(huán)境,IBM提供了最初的Eclipse代碼基礎(chǔ),包括Platform、JDT 和PDE,2001年11月貢獻給開源社區(qū),目前由IBM牽頭,圍繞著Eclipse項目已經(jīng)發(fā)展成一個龐大的Eclipse聯(lián)盟,有150多家軟件公司參與到Eclipse項目中,其中包括Borland、Rational Software、Red Hat及Sybase等,現(xiàn)在由非營利軟件供應(yīng)商聯(lián)盟Eclipse基金會(Eclipse Foundation)管理。 2003年,Eclipse 3.0選擇OSGi服務(wù)平臺規(guī)范為運行時架構(gòu)。 2007年6月,穩(wěn)定版3.3發(fā)布。2008年6月發(fā)布代號為Ganymede的3.4版。
Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE),最初主要用來Java語言開發(fā),但是目前亦有人通過插件使其作為其他計算機語言比如C++和Python的開發(fā)工具。Eclipse原本只是一個框架平臺,提供插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),這個組件主要針對希望擴展 Eclipse 的軟件開發(fā)人員,允許構(gòu)建與 Eclipse 環(huán)境無縫集成的工具,眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。由于 Eclipse 中的每樣?xùn)|西都是插件,給 Eclipse 提供插件,為用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境,使所有工具開發(fā)人員都具有同等的發(fā)揮場所。
Eclipse的優(yōu)勢:
目前全球有上百萬人在使用Eclipse進行開發(fā)。為什么Eclipse擁有如此眾多的擁躉?這與Eclipse集眾多特性于一身有很大關(guān)系。
??? Eclipse 是開放源代碼的軟件。這意味著Eclipse不僅可以免費使用,還可以通過研究源代碼學(xué)習(xí)世界上頂尖開發(fā)人員的編程技術(shù),并可以共享遍布全球的開發(fā)人員所貢獻的公共開放源代碼庫。
??? Eclipse是真正可擴展并可配置的。Eclipse采用插件機制,猶如一個花瓶,你可以隨時向花瓶里面插花,也可以很容易將不再需要的花取出。目前,互聯(lián)網(wǎng)上免費的、收費的插件遍地開花,插件開發(fā)工作在國內(nèi)外也如火如荼。
Eclipse支持眾多的開發(fā)語言而不僅僅是Java。Eclipse只是給開發(fā)人員提供了一個能夠擴展系統(tǒng)功能的最小核心,基于擴展點的插件體系結(jié)構(gòu)使得Eclipse支持多種語言成為可能。只要安裝相應(yīng)語言的插件,Eclipse就可以支持該種語言的開發(fā)。目前,Eclipse已經(jīng)可以支持C/C++、 COBOL、PHP、Perl、Python等多種語言。(盡管 Eclipse 主要是一個 Java 開發(fā)環(huán)境,但其體系結(jié)構(gòu)確保了對其它編程語言的支持)。
?? Eclipse提供了對多重平臺特性的支持。開發(fā)者可以使用他們感覺最舒適、最熟悉的平臺,例如Windows、Linux、MacOS等。Eclipse對每個平臺都有其單獨的圖形工具包,這使得應(yīng)用程序具有接近本地操作系統(tǒng)的外觀和更好的性能。
?基于業(yè)界領(lǐng)先的OSGi規(guī)范。OSGi規(guī)范最早由Sun Microsystems、IBM、愛立信等于1999年推出,其服務(wù)平臺包括:服務(wù)網(wǎng)關(guān)、汽車、移動電話、工業(yè)自動化、建筑物自動化、PDA網(wǎng)格計算、 娛樂(如iPronto)和 IDE等。基于OSGi的系統(tǒng)以微內(nèi)核形式運行,因而能夠輕松實現(xiàn)軟件業(yè)界夢寐以求的可熱插拔、動態(tài)改變行為、穩(wěn)定高效的系統(tǒng)。Eclipse從3.1開 始,毅然拋棄了其原有的已經(jīng)獲得業(yè)界認可的框架,采用OSGi作為其架構(gòu)。從Eclipse3.2版本開始,Eclipse提供了基于OSGi開發(fā)的支 持,開發(fā)者可以利用其開發(fā)基于OSGi的系統(tǒng)了。
?? Eclipse美輪美奐的人機界面受到廣泛贊譽。Eclipse提供了全新的SWT/JFace API(而不是AWT/Swing),一改SWT/Swing單調(diào)、沉悶的界面風(fēng)格,使得開發(fā)基于本地的具有豐富圖形界面的應(yīng)用程序成為可能,猶如一股春 風(fēng)吹進Java的桌面開發(fā)領(lǐng)域,給人耳目一新的感覺。
?? Eclipse由業(yè)界領(lǐng)先者推出,具有強大的行業(yè)力量。Eclipse基金會吸收了大量學(xué)術(shù)研究機構(gòu)、商業(yè)組織,領(lǐng)導(dǎo)Eclipse的長遠規(guī)劃和發(fā)展,并確保Eclipse處于軟件工具行業(yè)的領(lǐng)先地位。
2.4系統(tǒng)平臺環(huán)境:
2.4.1 硬件平臺:
?? 本程序開發(fā)計算機硬件如下:
內(nèi)存:4G
硬盤:500G
CPU:Intel(R)Core(TM)i5—3230M CPU? @2.60GHz
交互工具:鍵盤、鼠標
顯示器:LCD顯示器
2.4.2 軟件平臺:
本系統(tǒng)的開發(fā)環(huán)境如下???
操作系統(tǒng):Microsoft Windows 7 Ultumate
JDK版本:jdk-8u121-windows-x64
Eclipse版本: Neon.2 Release (4.6.2),eclipse-inst-win64
3? 系統(tǒng)分析
系統(tǒng)分析是軟件開發(fā)過程中我們所要做的第一步,包括系統(tǒng)的需求分析和可行性分析。系統(tǒng)的需求分析,主要是用來說明本系統(tǒng)是一個什么系統(tǒng),必須用來做什么,就這個問題上達到開發(fā)人員和主要用戶之間的共識。系統(tǒng)的可行性分析,主要就是對系統(tǒng)的所有的一切資源實施進行分析,用來說明系統(tǒng)的開發(fā)和投入的合理性,可行性和必然性,并對其中可能會出現(xiàn)的不可預(yù)見性的問題進行合理的分析。軟件開發(fā)中最具有挑戰(zhàn)性的環(huán)節(jié)莫過于對系統(tǒng)的需求分析,花費在需求分析上的時間無疑是非常有價值的,如果時常發(fā)生需求變更,會給軟件開發(fā)在預(yù)定計劃內(nèi)完成的任務(wù)帶來非常嚴重的不利影響。做好系統(tǒng)的需求分析和可行性分析,這樣有利于提高軟件開發(fā)過程中的便利性,能對軟件開發(fā)過程進行實時監(jiān)控和管理,更方便的按計劃進行,從而達到提高軟件的質(zhì)量的目的,為程序開發(fā)人員,用戶等提供更便攜的交流合作。作為工作成果的原始依據(jù),系統(tǒng)的需求分析和可行性分析也間接的可以向潛在用戶表達自己系統(tǒng)的功能,讓用戶來判斷系統(tǒng)的功能等是否符合所要達到的需求。
3.1可行性分析
可行性分析基于技術(shù),經(jīng)濟,工程,技術(shù)等方面的項目主要內(nèi)容和配套條件,如市場需求,資源供應(yīng),施工規(guī)模,工藝路線,設(shè)備選型,環(huán)境影響,資金籌集,盈利能力等。 其他方面研究分析比較,項目完成后可能取得的財務(wù),經(jīng)濟和社會環(huán)境影響的預(yù)測,該項目是否值得投資,以及如何對項目決策進行咨詢建設(shè),為全面的系統(tǒng)分析方法提供依據(jù)。 可行性分析應(yīng)具有遠見,公正,可靠,科學(xué)的特點。
為了保證可行性研究工作的科學(xué)性、客觀性和公正性,有效地防止錯誤和遺漏,在可行性研究中,首先必須站在客觀公正的立場進行調(diào)查研究,做好基礎(chǔ)資料的收集工作。對于收集的基礎(chǔ)資料,要按照客觀實際情況進行論證評價,如實地反映客觀經(jīng)濟規(guī)律,從客觀數(shù)據(jù)出發(fā),通過科學(xué)分析,得出項目是否可行的結(jié)論。
可行性研究報告的內(nèi)容深度必須達到國家規(guī)定的標準,基本內(nèi)容要完整,應(yīng)盡可能多地占有數(shù)據(jù)資料,避免粗制濫造,搞形式主義。
在做法上要掌握好以下幾個要點:先論證,后決策;處理好項目建議書、可行性研究、評估這三個階段的關(guān)系,哪一個階段發(fā)現(xiàn)不可行都應(yīng)當(dāng)停止研究;要將調(diào)查研究貫徹始終。一定要掌握切實可靠的資料,以保證資料選取的全面性、重要性、客觀性和連續(xù)性;多方案比較,擇優(yōu)選取。對于涉外項目,或者在加入WTO等外在因素的壓力下必須與國外接軌的項目,可行性研究的內(nèi)容及深度還應(yīng)盡可能與國際接軌。
為保證可行性研究的工作質(zhì)量,應(yīng)保證咨詢設(shè)計單位足夠的工作周期,防止因各種原因的不負責(zé)任草率行事。
可行性分析的目的是確定是否可以在最短時間之內(nèi)用最低的成本解決這個問題??尚行苑治鲎钪饕牟皇墙鉀Q問題,而是要研究這些問題是否值得去花費人力和財力去研究和解決。如果有簡單易行的方法則予以肯定。
3.1.1經(jīng)濟可行性分析
??? 系統(tǒng)的經(jīng)濟可行性分析的目的是,核算系統(tǒng)從開發(fā)建設(shè)到系統(tǒng)運行期間所需的資金投入,以及新系統(tǒng)的市場需求及經(jīng)濟效益,將投入預(yù)算與預(yù)計收益進行對比,核算經(jīng)濟方面的成本的可行性。
本游戲系統(tǒng)主要是用于大學(xué)生軟件工程畢業(yè)課程設(shè)計,不需要考慮其所能產(chǎn)生的經(jīng)濟效益和游戲日后的發(fā)展?fàn)顟B(tài)。對游戲系統(tǒng)的本身的經(jīng)濟要求并不高,只是通過本游戲系統(tǒng)的開發(fā)來提升學(xué)生自身的知識和能力水平。只需要有一臺裝有JDK運行環(huán)境和Java開發(fā)工具Eclipse軟件的電腦就可以,所以經(jīng)濟問題可不用考慮。
3.1.2技術(shù)可行性分析
可用于編寫俄羅斯方塊游戲的編程語言有很多,本次課題主要是在基于Java的環(huán)境下進行游戲系統(tǒng)的開發(fā),所以本系統(tǒng)主要利用的是Java中的Swing組件進行開發(fā),需要對變量定義,初始化,界面設(shè)計,游戲初始化,進入游戲,退出游戲,處理游戲過程中的各種操作進行相應(yīng)功能的代碼要求,技術(shù)方面要求并非特別困難,技術(shù)可行。
3.1.3社會可行性分析
本游戲系統(tǒng)的開發(fā)主要是用于畢業(yè)課程設(shè)計與論文,用以鞏固大學(xué)四年學(xué)習(xí)的知識,主要以個人和學(xué)校為單位,僅供個人娛樂和學(xué)校的課程設(shè)計與畢業(yè)論文檢查入檔案,不會對社會造成任何的影響,所以無需考慮到任何法律,版權(quán)等一系列社會因素,在這方面完全可行。
3.2需求分析
??? 所謂的“需求分析”是指對待解決的問題的詳細分析,澄清問題的要求,包括需要輸入什么數(shù)據(jù),得到什么結(jié)果,最后應(yīng)該輸出什么??梢哉f,在軟件工程中“需求分析”是確定電腦“做什么”,達到什么樣的效果??梢哉f,需求分析是在系統(tǒng)完成之前完成的。
??? 在軟件工程中,需求分析是指在創(chuàng)建新的或更改現(xiàn)有計算機系統(tǒng)時描述新系統(tǒng)的目的,范圍,定義和功能所需的所有工作。需求分析是軟件工程中的關(guān)鍵過程。在這個過程中,系統(tǒng)分析師和軟件工程師決定了客戶的需求。只有在確定了這些需求之后,才能分析和尋求新系統(tǒng)的解決方案。需求分析階段的任務(wù)是確定軟件系統(tǒng)功能。
??? 在軟件工程的歷史上,人們一直認為需求分析是軟件工程中最簡單的一步。但是在過去十年中,越來越多的人意識到需求分析是最重要的過程。如果分析師在需求分析時無法正確地了解客戶的需求,則最終軟件無法真正達到客戶的需求,或軟件項目在指定時間內(nèi)無法完成。
3.2.1 功能性需求
??? 整個游戲系統(tǒng)會隨機產(chǎn)生7種由四個小方塊組成的不同形狀的方塊,經(jīng)過旋轉(zhuǎn)后得到28種狀態(tài),如果增加游戲難度,會增加六種不同形狀的方塊形狀,同樣經(jīng)過旋轉(zhuǎn)后增加24種狀態(tài)。方塊按一定的速度自由下落,玩家通過鍵盤上的上下左右按鍵控制方塊的左右移動和旋轉(zhuǎn),將方塊落下后放在合適的位置。當(dāng)方塊落下后,如果方塊落下后有一整行被方塊填滿,那么該一整行消去。當(dāng)一行被消去時,玩家得分增加10分,當(dāng)?shù)梅诌_到100分后,玩家等級增加一級,速度加快一級,難度加大。如果當(dāng)方塊落下后整個游戲畫布界面被占滿,則方塊不再下落,游戲宣告失敗。游戲具體的功能需求有如下幾個:
??? ? 游戲界面需求:游戲的良好的界面會讓玩家眼前一亮,更加能充分的感受到游戲帶來的娛樂性,放松性。本游戲的默認背景色是深綠色,游戲主界面畫面自定義為自己的所喜歡的圖片,并可以更改,主界面方塊默認用橘黃色,預(yù)顯方塊顏色默認為淡紫色。背景色、前景色對比鮮明,以達到讓玩家眼前一亮的感覺,并能在游戲達到高等級狀態(tài),方塊下落速度漸高的情況下使玩家能夠清楚的分辨出下落方塊的形狀,增加游戲的刺激性。
??? ? 游戲形狀需求:用數(shù)組作為存儲方塊52種狀態(tài)的數(shù)據(jù)結(jié)構(gòu),即初級等級長條形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7種形狀的向4個方向的旋轉(zhuǎn)變形,和中級等級的三種方塊12種不同的狀態(tài),高級等級的三種方塊12種不同的狀態(tài)。各個方塊可以實現(xiàn)按逆時針的旋轉(zhuǎn)方式旋轉(zhuǎn),并且方塊能否旋轉(zhuǎn)需要用條件加以判斷,如果旋轉(zhuǎn)后可能發(fā)生越界,則不能旋轉(zhuǎn),需要調(diào)整位置來保證他可以旋轉(zhuǎn)。
??? ? 鍵盤處理事件需求:當(dāng)方塊下落時,玩家可以通過鍵盤上的方向鍵:上鍵實現(xiàn)旋轉(zhuǎn),下鍵實現(xiàn)加速下落,左鍵實現(xiàn)左移,右鍵實現(xiàn)右移,和空格鍵實現(xiàn)一鍵下落,字母P鍵實現(xiàn)暫停,字母C鍵實現(xiàn)繼續(xù)等一系列的操作。
??? ? 鼠標處理事件需求:通過鼠標,可以點擊控制面板中的菜單按鈕和幫助按鈕,選擇菜單欄的菜單項,可以實現(xiàn)游戲的開局,選擇游戲等級,更改游戲中方塊的顏色顯示,游戲主界面背景色和前景色的顯示,更改游戲背景圖片,方塊下落速度,是否播放游戲中的聲音等一系列的功能。
? 顯示需求:本游戲程序的顯示需求是要求當(dāng)方塊落下后填滿一整行,則該行消除,其余剩下的未填滿的行自動逐次向下移動,消去一行右界面得分增加十分,當(dāng)分數(shù)增加到100分時,等級增加一等級。當(dāng)方塊落下疊加到主界面的全部所有行時,方塊不再下落,游戲結(jié)束,主界面提示“Game Over”字樣。
3.2.2 非功能性需求
非功能性需求:俄羅斯方塊游戲系統(tǒng)的非功能性需求包括游戲主界面左上角圖標顯示,調(diào)整窗口尺寸最大化最小化(但不包括主界面的尺寸大小),游戲運行時彈出窗口的位置居中等一系列非功能性需求。
3.2.3? 接口控制
本俄羅斯游戲系統(tǒng)在Windows操作系統(tǒng)下,主要是通過鍵盤進行游戲的操
作,通過鼠標進行開局,退出,設(shè)置等一系列操作。首先,游戲利用鍵盤的按鍵進行游戲的操作,所以需要使用鍵盤的接口事件。其次,在游戲進行的全過程中,需要使用鼠標進行游戲的控制,包括開始,選擇等級,改變設(shè)置,改變顏色,查看版本信息,退出等,所以要對鼠標的單擊,按鍵添加接口監(jiān)聽事件,編寫相應(yīng)的代碼來實現(xiàn)鼠標和鍵盤的相應(yīng)功能。
4? 系統(tǒng)的概要設(shè)計
4.1? 系統(tǒng)的功能設(shè)計
4.1.1? 手動處理業(yè)務(wù)的基本流程
?? ?本游戲的設(shè)計以娛樂為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經(jīng)典游戲功能的基礎(chǔ)上推陳出新,加之新的功能,賦以新的生機和活力。以下具體闡述游戲的基本流程。
?? 運行說明:
?? 1>運行程序,點擊右側(cè)控制面板內(nèi)的“開始”或“控制”菜單內(nèi)的“開始”按鈕開始游戲。
?? 2>使用上、下、左、右鍵和空格鍵,P鍵,C鍵控制方塊的變形、下落、向左和向右移動和一鍵迅速下落,暫停,繼續(xù)。
?? 3>方塊滿行消除,分數(shù)自動增加,等級自動增加一級。
?? 4>等級增加、方塊下落速度增加,按右側(cè)控制面板或“游戲”菜單內(nèi)的“初級”“中級”,“高級”按鈕來手動改變游戲難易程度。也可點擊“方塊顏色”菜單內(nèi)的選項,更改方塊顏色等,也可以通過“自定義”菜單內(nèi)的選項,來更改游戲的一些屬性。
?? 5>按鍵盤鍵字母P鍵可以控制游戲暫停,然后按子母鍵C鍵可以控制游戲繼續(xù)上次游戲。按“結(jié)束游戲”按鈕,游戲會徹底停止正在進行的當(dāng)局游戲,再按“開始”或“控制”菜單內(nèi)的“重新開始”會開始新游戲。
?? 6>當(dāng)方塊占滿整個窗口,不能再有新方塊下落時,游戲會彈出“Game Over”的對話框提示游戲結(jié)束。
游戲的基本流程圖如圖4—1所示:
??????????????????????? 圖4-1游戲的基本流程圖
4.1.2? 基本流程的功能模塊
本系統(tǒng)基于游戲的各項功能來設(shè)計游戲的各個功能模塊。圖4-2為本游戲的系統(tǒng)功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區(qū),游戲控制區(qū)。游戲界面區(qū)分顯示玩家可選操作、顯示玩家操作結(jié)果兩個部分。游戲控制區(qū)分更改顏色、開始、更改游戲等級為初級、更改游戲等級為中級、更改游戲等級為高級、自定義下落速度、更改背景、退出以及其他等一些功能模塊。
圖4-2系統(tǒng)功能模塊示意圖
??? 圖4-3為游戲界面區(qū)模塊設(shè)計示意圖,如圖所示,游戲界面區(qū)模塊可細分為闖進新游戲界面、處理玩家操作、顯示玩家操作結(jié)果三個功能模塊。
圖4-3界面模塊示意圖
??? 圖3-4為游戲控制區(qū)設(shè)計示意圖,如圖所示,游戲控制區(qū)模塊分為開始、自定義操作設(shè)置、初始游戲級別設(shè)置、初始顏色設(shè)置、退出等功能模塊。
圖4-4控制區(qū)模塊示意圖
5? 系統(tǒng)的詳細設(shè)計與實現(xiàn)
??? Java是一種純面向?qū)ο?#xff08;Object-Oriented)的程序語言,它的諸多優(yōu)點在此就不作詳細論述了。從面向?qū)ο蟮挠^念出發(fā),本程序主要可分為以下幾個模塊:
??? ●游戲主界面顯示模塊
??? ●方塊及數(shù)據(jù)顯示模塊
??? ●方塊移動控制模塊
??? ●游戲界面顏色控制模塊
??? ●游戲進度、等級控制模塊
??? 分析對象的技巧在于它的功能的擴展性及維護效率。試想,如果因為外部環(huán)境或者用戶需求的變化需要對程序進行功能擴展或者維護,就要對代碼作大幅度的更動甚至重寫,這樣就失去了面向?qū)ο蟮膬?yōu)勢,所以在本程序分析時將獨立性高的模塊作為一個對象,以提高程序的可擴展性和可維護性。以下該游戲中類的設(shè)計:
??? MyFrame類:繼承自JFrame類,作為游戲的主類,負責(zé)對游戲的主體全局進行控制,連接與指揮各個類的樞紐。
??? PreView類:繼承自JPanel類,作為操作面板類,負責(zé)安放主游戲窗口,積分板,級別控制按鈕等窗口用以控制游戲進程。
??? GameCanvas類:繼承自JPanel類,ChangeBlockColor線程類動態(tài)改變畫布類的方格顏色,畫布類通過檢查方格顏色來體現(xiàn)ChangeBlockColor方塊的移動情況與消去狀況。
??? Box類:方格類,組成方塊的基本元素,主要表達方式為顏色。
??? Block類:作為操控方塊的類,控制方塊的移動,下落以及變形。
5.1? 游戲主界面顯示模塊
??? 一個優(yōu)秀的軟件系統(tǒng)不僅體現(xiàn)在核心的功能的多樣性和強大上,如果使用者所面對的是枯燥的、陳舊的界面的話,那么這個的軟件系統(tǒng)是不成功的,所以好的、精美的界面設(shè)計是極為重要的環(huán)節(jié)。為玩家設(shè)計制作布局合理、視覺效果良好的界面的重要性就不言而喻了。
游戲主界面采用Swing組件開發(fā),并且向其注冊監(jiān)聽器,以實現(xiàn)各種控制功能,綜合游戲窗體的設(shè)計,其上至少需要注冊三個監(jiān)聽器,分別是動作監(jiān)聽器(ActionListener)、鍵盤監(jiān)聽器(KeyListener)、選項監(jiān)聽器(ItemListener)。
??? 根據(jù)初步設(shè)計,可以確定客戶端上所要用到的Swing組件對象有JFrame對象、JPanel對象,JLabel對象、JButton對象、JMenuBar對象、JMenu對象、JMenuItem對象、JTextField對象、JTextArea對象、JDialog對象等,至少十個Swing組件對象。下圖5-1為游戲主界面截圖。
圖5-1游戲主界面截圖
本游戲主界面設(shè)計的初始顏色搭配基于對比鮮明的原則,默認背景色為深綠色,左上角設(shè)置俄羅斯方塊圖標,得分初始值為0,等級初始值為1,最高分記錄初始值為0。游戲主窗體尺寸設(shè)置為(520,580),方塊移動范圍窗格由一個20行、12列的二維數(shù)組控制,且左上角圖標設(shè)置為方塊圖案,起標識作用。
5.2? 畫布、方塊顯示模塊
本游戲中將畫布設(shè)計為自定義圖片,可以根據(jù)自己的需求來自己動手更改背景圖片,在方塊下落過程中,根據(jù)顏色的變化識別下落的方塊。
5.2.1? 背景畫布模塊設(shè)計
該游戲的主背景畫布是一個20行、12列的二維數(shù)組,方塊顯示是由相應(yīng)顏色變化來標識,主窗體用顏色填充后可形成呈現(xiàn)出來背景樣式和方塊。本游戲用繼承自JPanel的GameCanvas類控制背景畫布的顯示,用rows代表畫布的行數(shù),cols代表畫布的列數(shù),行數(shù)和列數(shù)決定著畫布擁有方格的數(shù)目。背景畫布主要實現(xiàn)代碼如下:
首先,用一個畫布類的構(gòu)造函數(shù)來表示整個主界面的行數(shù)、列數(shù)以及主界
中的相對位置:
?????? /**
?????? ?* 畫布類的構(gòu)造函數(shù)
?????? ?* @param rows int, 畫布的行數(shù)
?????? ?* @param cols int, 畫布的列數(shù)
?????? ?* 行數(shù)和列數(shù)決定著畫布擁有方格的數(shù)目
?????? ?*/
?????? public GameCanvas(int rows, int cols) {
????????????? this.rows = rows;
????????????? this.cols = cols;
????????????? this.setOpaque(false);
????????????? boxes = new Box[rows][cols];
????????????? for (int i = 0; i < boxes.length; i++) {
???????????????????? for (int j = 0; j < boxes[i].length; j++) {
??????????????????????????? boxes[i][j] = new Box(false);
???????????????????? }
????????????? }
????????????? setBounds(0, 0, 300, 500);//設(shè)置相對位置坐標
????????????? setBorder(new EtchedBorder(
????????????? ??????? EtchedBorder.RAISED, Color.white, new Color(148, 145, 140)));
?????? }
?????? /**
?????? ?* 取得畫布中方格的行數(shù)
?????? ?* @return int, 方格的行數(shù)
?????? ?*/
?????? public int getRows() {
????????????? return rows;
?????? }
?????? /**
?????? ?* 取得畫布中方格的列數(shù)
?????? ?* @return int, 方格的列數(shù)
?????? ?*/
?????? public int getCols() {
????????????? return cols;
?????? }
??? 其次,在設(shè)置一個畫布類的構(gòu)造函數(shù)來表示整個主界面的前景色,背景色并獲取其前景色和背景色:
?????? /**
?????? ?* 畫布類的構(gòu)造函數(shù)
?????? ?* @param rows 與public GameCanvas(int rows, int cols)同
?????? ?* @param cols 與public GameCanvas(int rows, int cols)同
?????? ?* @param backColor Color, 背景色
?????? ?* @param frontColor Color, 前景色
?????? ?*/
?????? public GameCanvas(int rows, int cols,
?????? ????????????????? Color backColor, Color frontColor) {
????????????? this(rows, cols);
????????????? this.backColor = backColor;
????????????? this.frontColor = frontColor;
?????? }
?????? /**
?????? ?* 設(shè)置游戲背景色彩
????? ?* @param backColor Color, 背景色彩
?????? ?*/
?????? public void setBackgroundColor(Color backColor) {
????????????? this.backColor = backColor;
?????? }
?????? /**
?????? ?* 取得游戲背景色彩
????? ?* @return Color, 背景色彩
?????? ?*/
?????? public Color getBackgroundColor() {
????????????? return backColor;
?????? }
5.2.2? 預(yù)覽方塊模塊設(shè)計
方塊和數(shù)據(jù)信息是游戲中最基本的功能模塊。Box這個類方格類,是組成塊的基本元素,用自己的顏色來表示塊的外觀 ,MyTask繼承TimerTask類用來定時下落,用計數(shù)方式來實現(xiàn)速度的改變,MyListener類繼承KeyAdapter類用來實現(xiàn)按鍵監(jiān)聽,控制方塊的上下左右。定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制新顏色還是保留底色。
每得到一個新方塊,都是隨機從七種形態(tài)的方塊中選取一種。游戲定義了一個變量,代表新方塊的模型。比如定義int型數(shù)組STYLE代表28中方塊類型,7行4列,每個元素代表其中一種方塊。即0<=blockkindnum<=6,0=<blockstatusnum<=3
那么,當(dāng)方塊落下需要得到新方塊時,只需隨機得到一對blockkindnum,blockstatusnum值,然后再根據(jù)這個STYLE的值構(gòu)畫相應(yīng)的方塊。剩下的問題就是應(yīng)該怎么隨機到一對STYLE行列值。
Java語言包中的Math類提供了一個生成隨機數(shù)的方法random(),調(diào)用這個方法會產(chǎn)生一個在0-1之間的雙精度浮點數(shù)。所以每次要得到新方塊時,只需調(diào)用一次這個方法,得到一個0-1的雙精度浮點數(shù),然后用該數(shù)乘以7,之后強轉(zhuǎn)成整型,即可得到1—7的整數(shù),用來控制行。用該數(shù)乘以4,之后強轉(zhuǎn)成整型,即可得到1—4的整數(shù),用來控制列。
由此可以組合出多種圖形定義然后用代碼實現(xiàn)下列功能:
1>每次執(zhí)行首先為隨機數(shù)產(chǎn)生不同的初值。
??? ????????????? int col = (int) (Math.random() * (gc.getCols() - 3));//隨即位置生成列
???????????????????? int style = Constant.STYLES[(int) (Math.random() * Block.get_addl())][(int) (Math.random() * 4)];
圖5-2隨機產(chǎn)生方塊流程圖
??? 2>隨機選取一個圖形,圖5-2隨機產(chǎn)生方塊圖具體描述用生成的隨機數(shù)控
產(chǎn)生的圖形。
3>當(dāng)前圖形在其4*4網(wǎng)格中的位置信息。
??? 繪制4行4列的方塊預(yù)顯方格,隨機生成預(yù)顯示的方塊樣式。本游戲用二維數(shù)組存儲方塊的28種樣式。
值得注意的是:在傳統(tǒng)的俄羅斯方塊游戲的基礎(chǔ)上,本游戲系統(tǒng)為了體現(xiàn)出創(chuàng)新的思維,本著為了學(xué)習(xí)的原則,在傳統(tǒng)游戲的基礎(chǔ)上增加了中級三種其他的方塊樣式和高級三種其他的方塊樣式。一共有52種方塊樣式,具體的存儲方式主要實現(xiàn)代碼如下:
?????? /**
?????? ?* 分別對應(yīng)對13種模型的52種狀態(tài)
?????? ?*/
?????? public final static int[][] STYLES = {// 共28種狀態(tài)
????????????? {0xf000, 0x8888, 0xf000, 0x8888}, // 長條型的四種狀態(tài)
????????????? {0x4e00, 0x4640, 0xe400, 0x4c40}, // 'T'型的四種狀態(tài)
????????????? {0x4620, 0x6c00, 0x4620, 0x6c00}, // 反'Z'型的四種狀態(tài)
????????????? {0x2640, 0xc600, 0x2640, 0xc600}, // 'Z'型的四種狀態(tài)
????????????? {0x6220, 0x1700, 0x2230, 0x7400}, // '7'型的四種狀態(tài)
????????????? {0x6440, 0xe200, 0x44c0, 0x8e00}, // 反'7'型的四種狀態(tài)
????????????? {0x6600, 0x6600, 0x6600, 0x6600}, // 方塊的四種狀態(tài)
????????????? {0x8c88,0xf200,0x44c4,0x4f00},//增加的中級樣式方塊3個
????????????? {0xea00,0xc4c0,0xae00,0xc8c0},
????????????? {0x8c00,0xc800,0xc400,0x4c00},
????????????? {0xac00,0xcc40,0x6e00,0x8cc0},//增加的高級樣式方塊3個
????????????? {0x4e40,0x4e40,0x4e40,0x4e40},
????????????? {0x8480,0xa400,0x4840,0x4a00},
?????? };
?? 傳統(tǒng)俄羅斯方塊游戲的7種方塊樣式,相信很多人都知道,在這里就不一一截圖展示常見的方塊樣式。以下是在傳統(tǒng)游戲的模式下增加的三種中級難度和三種高級難度的方塊模型:
??? ●增加的三種中級難度方塊模型(經(jīng)過90度、180度、270度、360度旋得到四種轉(zhuǎn)狀態(tài))
圖5-10增加的三種中級難度方塊模型
??? ●增加的三種高級難度方塊模型(經(jīng)過90度、180度、270度、360度旋得到四種轉(zhuǎn)狀態(tài))
圖5-11增加的三種高級難度方塊模型
5.2.3? 方塊移動、旋轉(zhuǎn)模塊設(shè)計
方塊的翻轉(zhuǎn)與移動比較容易實現(xiàn),方塊移動只需要改變方塊的橫坐標或縱坐標,然后重新繪制方塊即可。方塊翻轉(zhuǎn)也只需要改變背景數(shù)組的值,重新繪制方塊即可。
本游戲方塊下落時,進行動態(tài)繪制,實現(xiàn)Cloneable接口, 以指示 Object.clone() 方法可以合法地對該類實例進行按字段復(fù)制。方塊的操作類BlockOperation繼承Thread類,重寫run()方法,以實現(xiàn)方塊的動態(tài)正確下落。當(dāng)然,在線程中要判定方塊是處于moving狀態(tài)還是pausing狀態(tài)。
publicvoid run()
?????? {
????????????? //moving判定方塊是否在動態(tài)下落
????????????? while (moving)
????????????? {
???????????????????? try
???????????????????? {
??????????????????????????? //betweenleveltime指示相鄰等級之間相差時間
??????????????????????????? sleep(betweenleveltime
??????????????????????????? ??????? * (ControlMainGame.maxlevel - level + flatgene));
???????????????????? } catch (InterruptedException ie)
???????????????????? {
??????????????????????????? ie.printStackTrace();
???????????????????? }
???????????????????? //pausing判定游戲是否處于暫停狀態(tài)
???????????????????? if (!pausing)
??????????????????????????? moving = (moveTo(y + 1, x) && moving);
???????????????????? //moving是在等待的100毫秒間,moving沒被改變
???????????? }}
當(dāng)然,在游戲中還要判定方塊移動的邊界問題, 比如,一個方塊在它左邊正好差一個格子的空間才能夠翻轉(zhuǎn),但是它的右邊恰好有一個格子的空間,這種情況,如果方塊不能夠翻轉(zhuǎn),就不方便用戶操作,如果能夠翻轉(zhuǎn),就會發(fā)生越界,將已經(jīng)存在的方塊擠占掉。要想實現(xiàn)翻轉(zhuǎn)又不發(fā)生越界,那么,就應(yīng)該在方塊翻轉(zhuǎn)后把它往右邊移動一個格子,然后再繪制方塊,這樣,方塊就不會擠占掉其它已經(jīng)固定住的方塊了,以下解決越界問題。
1>方塊翻轉(zhuǎn)判定
在兩種情況可能發(fā)生越界,一種是方塊落下去固定住以后,第二種是周圍的空間不允許它進行翻轉(zhuǎn)。
第一種情況只需要參考方塊落下去后不能夠再移動的判定即可。
對于第二種情況,在每次方塊翻轉(zhuǎn)前,必須首先計算出方塊周圍的空間,如果空間允許則翻轉(zhuǎn)。否則,不能翻轉(zhuǎn)。
因為七種方塊是不規(guī)則的,每種方塊要求的翻轉(zhuǎn)空間都是不一樣的,甚至是在它的不同翻轉(zhuǎn)狀態(tài)下,所要求的翻轉(zhuǎn)空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫一個判定條件,但是這樣做未免過于麻煩。
根據(jù)觀察,不難發(fā)現(xiàn),七種形態(tài)的方塊,長條形的方塊如果以橫條的形態(tài)下落,則只要能夠下落,就能翻轉(zhuǎn),如果以豎條的形態(tài)下落,那么它翻轉(zhuǎn)后所處的位置必須要有4x1個格子的空間才能夠翻轉(zhuǎn)。對于田字形的方塊,只有能夠繼續(xù)下墜,就一定能夠翻轉(zhuǎn),所以田字型的方塊只要沒有落下,就一直能夠翻轉(zhuǎn)。而其它五種形態(tài)的方塊,又有一個共同點,就是它們都有兩種翻轉(zhuǎn)狀態(tài)橫向占三個格子的空間,豎直方向占兩個空間,另外兩種翻轉(zhuǎn)狀態(tài)橫向占兩個格子的空間,豎直方向占三個格子空間,如果他們是以橫向占三個格子的狀態(tài)下落,那么只要能下落,就一定能夠翻轉(zhuǎn),如果是以橫向兩個格子的狀態(tài)下落,那么在翻轉(zhuǎn)后,周圍必須要有3x2個格子的空間。
所以,方塊翻轉(zhuǎn)的判定,要分三種情況,第一種情況是方塊落下去后不能翻轉(zhuǎn);第二種情況是對豎直狀態(tài)出現(xiàn)的長條形的方塊進行翻轉(zhuǎn)判定;第三種情況是對除長條形和田字形之外的其它五種以橫向占兩個格子的狀態(tài)出現(xiàn)的方塊進行翻轉(zhuǎn)判定。
何種情況下方塊能夠翻轉(zhuǎn)的問題解決了,接下來,我們就應(yīng)該解決方塊翻轉(zhuǎn)后所處的位置的問題了,因為只有事先知道方塊翻轉(zhuǎn)后所處的位置,才能夠?qū)δ莻€位置的空間范圍進行判定,判定它是否能夠容納方塊。
可以確定的是,無論方塊怎么翻轉(zhuǎn),都處在方塊數(shù)組中,也就是說方塊必定是在游戲地圖中某一4x4個格子的空間范圍內(nèi)。
方塊數(shù)組在游戲主界面中的坐標是確定的,不確定的是方塊翻轉(zhuǎn)后到底處在方塊數(shù)組的哪個位置,為了解決這個問題,我們可以限定方塊在方塊數(shù)組中的存儲原則是靠左、靠上,這樣,無論翻轉(zhuǎn)怎么翻轉(zhuǎn),方塊數(shù)組中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數(shù)組中的位置,也就可以得知方塊翻轉(zhuǎn)后在游戲地圖中的位置了。
假定方塊數(shù)組的橫縱坐標是x和y,那么,這個位置就是,長條形的方塊翻轉(zhuǎn)后所處的那一行是游戲地圖的第y行,所占的列是第x到x+3列,長條形和田字形以外的五種方塊翻轉(zhuǎn)后的所占的行數(shù)是游戲地圖的第y和第y+1行,所占的列是第x到x+2列。
所以,如果以上空間有空格子,方塊就能夠翻轉(zhuǎn)。
2>翻轉(zhuǎn)越界糾正
只要方塊翻轉(zhuǎn)后所處的空間足夠,方塊就能夠翻轉(zhuǎn),但是,如果方塊翻轉(zhuǎn)后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢?
方塊在邊界處時,翻轉(zhuǎn)后不僅可能翻出地圖外,還可能發(fā)生數(shù)組越界,當(dāng)然,只需要將地圖數(shù)組定義得大一些,就能夠避免數(shù)組越界錯誤,對于方塊越界,如果在它的另一邊有足夠空間,那么,就應(yīng)該把方塊往另一個方向移動適當(dāng)?shù)膯挝?#xff0c;糾正方塊越界錯誤。如圖5-12方塊翻轉(zhuǎn)流程圖所示,方塊翻轉(zhuǎn)需要經(jīng)三次判定:是否已經(jīng)下落到底部、翻轉(zhuǎn)后是否有足夠空間、翻轉(zhuǎn)后是否越界。
圖5-12 方塊翻轉(zhuǎn)處理流程圖
玩家操作鍵盤實現(xiàn)方塊的移動、旋轉(zhuǎn),代碼引進ControlKeyListener類繼承KeyAdapter類進行鍵盤監(jiān)聽功能的實現(xiàn)。KeyAdapter類繼承自O(shè)bject類,實現(xiàn)KeyListener接口,用來接收鍵盤事件的抽象適配器類。此類中的方法為空。此類存在的目的是方便創(chuàng)建偵聽器對象。擴展此類即可創(chuàng)建 KeyEvent 偵聽器并重寫所需事件的方法,即是 ControlKeyListener類。使用ControlKeyListener可創(chuàng)建偵聽器對象,然后使用組件的 addKeyListener 方法向該組件注冊此偵聽器對象。當(dāng)按下、釋放或鍵入某個鍵時,將調(diào)用該偵聽器對象中的相應(yīng)方法,并將 KeyEvent 傳遞給相應(yīng)的方法。實現(xiàn)代碼如下:?????? privateclass ControlKeyListener extends KeyAdapter
?????? {
????????????? publicvoid keyPressed(KeyEvent ke)
????????????? {
???????????????????? if (!game.isPlaying())
??????????????????????????? return;
???????????????????? BlockOperation blockope = game.getCurBlock();
???????????????????? switch (ke.getKeyCode())
???????????????????? {
??????????????????????????? case KeyEvent.VK_DOWN:
?????????????????????????????????? blockope.moveDown();
?????????????????????????????????? break;
??????????????????????????? case KeyEvent.VK_LEFT:
?????????????????????????????????? blockope.moveLeft();
?????????????????????????????????? break;
??????????????????????????? case KeyEvent.VK_RIGHT:
?????????????????????????????????? blockope.moveRight();
?????????????????????????????????? break;
??????????????????????????? case KeyEvent.VK_UP:
?????????????????????????????????? blockope.turnNext();
?????????????????????????????????? break;
??????????????????????????? default:
?????????????????????????????????? break;}}}
5.3? 控制面版模塊
5.3.1? 菜單欄模塊設(shè)計
???? 菜單欄中有“游戲”、“幫助”四個菜單選項?!坝螒颉边x項又分“開局”、“初級”、“中級”、“高級”、“自定義”、“方塊顏色”、“退出”等七個選項。“幫助”選項中有“關(guān)于”選項,用于顯示游戲版本等信息。
??? 1>“開局”的按鈕功能為實現(xiàn)游戲畫布的重新繪制,類似reset的功能。該按鈕的監(jiān)聽實現(xiàn)代碼如下:
?????? /**
?????? ?* 重置畫布
?????? ?*/
?????? public void reset() {
????????????? for (int i = 0; i < boxes.length; i++) {
???????????????????? for (int j = 0; j < boxes[i].length; j++)
??????????????????????????? boxes[i][j].setColor(false);
????????????? }
????????????? repaint();
?????? }
??? 2>“初級”、“中級”、“高級”按鈕用來手動調(diào)節(jié)游戲的等級,從而改變游戲的等級難度。 “退出”按鈕控制游戲隨時退出,終止游戲。
3>“幫助”按鈕中點擊“關(guān)于”按鈕顯示與游戲軟件本身相關(guān)信息,具體信息如圖所示:
????????????????????? ?圖4—19 “關(guān)于”選項截圖
5.3.2? 控制面板按鈕設(shè)計
本游戲控制面板中包含得分統(tǒng)計、等級統(tǒng)計等字段。
其中的TextField控件均由游戲本身統(tǒng)計給出,玩家不能私自編輯。本游戲的游戲規(guī)則為每消一行得10分,每增加100分上升一個等級,初始得分為0,初始等級為1。
以下給出得分、等級更新等功能實現(xiàn)的主要代碼:
????????????? /**
????????????? ?* 判斷是否滿行,滿行則調(diào)用消行方法。
????????????? ?*/
????????????? private void isFullLine() {
???????????????????? // TODO Auto-generated method stub
???????????????????? for (int i = 0; i < 20; i++) {
??????????????????????????? int row = 0;
??????????????????????????? boolean flag = true;
??????????????????????????? for (int j = 0; j < 12; j++) {
?????????????????????????????????? if (!gc.getBox(i, j).isColorBox()) {
????????????????????????????????????????? flag = false;
????????????????????????????????????????? break;
?????????????????????????????????? }
??????????????????????????? }
??????????????????????????? if (flag == true) {
??????????????????????????? ?????? row = i;
?????????????????????????????????? gc.delete(row);//刪除行
?????????????????????????????????? if(isMusic==true)
?????????????????????????????????? {mp.playEraseSound();}
?????????????????????????????????? addScor();//增加分數(shù)
?????????????????????????????????? if(scor%100==0)//設(shè)置為100分增加一個等級
?????????????????????????????????? upspeed=true;//將速度增加標志位至為true
?????????????????????????????????? if(upspeed==true)
????????????????????????????????????????? upLevel();
??????????????????????????? }
???????????????????? }
????????????? }
????????????? /**
????????????? ?* 得分的計算方法
????????????? ?*/
????????????? private void addScor() {
???????????????????? scor=scor+10;
???????????????????? jt9.setText("得分:"+MyFrame.scor);
????????????? }
?????? }
?????? private void reset() {
????????????? scor=0;
????????????? rank=0;
????????????? jt10.setText("等級:"+rank);
????????????? jt9.setText("得分:"+scor);
????????????? upspeed=false;
????????????? playing=true;
????????????? runstop=false;
????????????? gc.setGameOver(false);
????????????? gc.repaint();
????????????? gc.reset();
?????? }
控制面板中按鈕的功能在4.3.1中已給出代碼,在此不再贅述。
6 系統(tǒng)的測試運行
6.1 測試概述
系統(tǒng)測試,是將軟件,計算機硬件,外圍設(shè)備,網(wǎng)絡(luò)等元素確認在一起進行各種信息系統(tǒng)的組裝測試和確認測試,系統(tǒng)測試是為整個產(chǎn)品系統(tǒng)進行測試,目的是驗證是否 系統(tǒng)滿足需求規(guī)格的定義,找出與需求規(guī)格不一致或矛盾的地方,以提出更全面的方案。系統(tǒng)測試發(fā)現(xiàn)問題后,嘗試找出錯誤的原因和位置,然后進行更正。 是基于黑盒子類測試的整體系統(tǒng)要求,應(yīng)該覆蓋系統(tǒng)的所有組件。 對象不僅包括要測試的軟件,還包括軟件依賴的硬件,外圍設(shè)備甚至包括某些數(shù)據(jù),一些支持軟件及其接口。
系統(tǒng)測試是一個集成測試軟件,作為計算機系統(tǒng)的一部分,結(jié)合系統(tǒng)的其他部分,在計算機系統(tǒng)的實際操作環(huán)境中進行一系列嚴格有效的測試,以找出軟件潛在的問題,確保系統(tǒng)的正常運行。
系統(tǒng)測試的目的是驗證最終軟件系統(tǒng)是否符合用戶要求。
主要內(nèi)容包括:
(1)功能測試。也就是說,測試軟件系統(tǒng)的功能是正確的,根據(jù)文檔的要求,如《產(chǎn)品需求規(guī)格說明書》。 因為正確性是軟件最重要的品質(zhì)因素,因此功能測試至關(guān)重要。
(2)健壯性測試。也就是說,在異常情況下測試軟件系統(tǒng)的能力是否正常運行。健壯性有兩個含義:一個是容錯,另一個是恢復(fù)能力。
6.1.1? 測試原則
?軟件測試的基本原則,齊全的檢測的產(chǎn)品用戶的角度,盡可能多發(fā)現(xiàn)系統(tǒng)使用的問題過程中的問題和漏洞、研究和分析、在產(chǎn)品中,有缺陷的方面提出問題與改進建議。詳細的測試原理如下:
(1)軟件測試計劃是軟件測試的行動導(dǎo)向,實際的測試應(yīng)該細心嚴格執(zhí)行,高可行性的嚴格執(zhí)行測試計劃,特別是確定測試方法和測試目的。
(2)測試標準,建立基于用戶需求,軟件測試,主要目的是為了確保產(chǎn)品的一致性和驗證產(chǎn)品能夠滿足客戶的需求,所以在測試過程中應(yīng)該在用戶的角度始終站在看問題,并發(fā)現(xiàn)軟件缺陷和不足所帶來的影響,系統(tǒng)中最嚴重的錯誤無法滿足用戶需求的程序以及功能缺陷。
(3)不能隨意對待測試。
尤其是對系統(tǒng)的測試,反復(fù)測試,如果不嚴格執(zhí)行測試計劃,很有可能會因為疏忽導(dǎo)致的新BUG的產(chǎn)生。因此,反復(fù)測試階段也應(yīng)給予充分重視,早期檢測中有很多錯誤,大多是因為疏忽而沒被發(fā)現(xiàn)。
目的:
(1)確保系統(tǒng)測試的活動正常進行;
(2)驗證軟件產(chǎn)品和系統(tǒng)要求不匹配或矛盾的情況;
(3)建立完善的系統(tǒng)測試缺陷跟蹤數(shù)據(jù)庫;
(4)確保軟件系統(tǒng)的測試活動和結(jié)果及時通知相關(guān)團體和個人。
6.1.2? 測試方法
為了全方位的測試系統(tǒng),找出系統(tǒng)中存在的問題和故障,使用多種測試方法一起測試,可以更加全面的總結(jié)出系統(tǒng)設(shè)計的優(yōu)缺點。采用的測試方法有以下幾個:
功能測試:測試系統(tǒng)中各個功能模塊下的功能點是否可以正常使用;
手動測試:主要測試輸入、點擊等各項功能;
黑盒測試:輸入后查看得出的結(jié)果是否正確。
恢復(fù)測試:恢復(fù)測試作為系統(tǒng)測試,主要關(guān)注導(dǎo)致軟件運行失敗的各種條件,并驗證恢復(fù)過程可以正常實施。 在某些情況下,系統(tǒng)需要具有容錯能力。 此外,系統(tǒng)故障必須在規(guī)定的時間內(nèi)更正,否則將導(dǎo)致嚴重的經(jīng)濟損失。恢復(fù)測試主要檢查系統(tǒng)的容錯能力。當(dāng)系統(tǒng)出錯時,能否在指定時間間隔內(nèi)修正錯誤并重新啟動系統(tǒng)?;謴?fù)測試首先要采用各種辦法強迫系統(tǒng)失敗,然后驗證系統(tǒng)是否能盡快恢復(fù)。對于自動恢復(fù)需驗證重新初始化(reinitialization)、檢查點(checkpointing?mechanisms)、數(shù)據(jù)恢復(fù)(data?recovery)和重新啟動?(restart)等機制的正確性;對于人工干預(yù)的恢復(fù)系統(tǒng),還需估測平均修復(fù)時間,確定其是否在可接受的范圍內(nèi)。
安全測試:安全測試用于驗證系統(tǒng)內(nèi)的保護機制,防止非法入侵。 在安全測試中,測試人員扮演著試圖入侵系統(tǒng)的角色,采用多種方式試圖突破防線。 所以系統(tǒng)安全設(shè)計的標準是找出使入侵系統(tǒng)成本更高的方法。安全測試檢查系統(tǒng)對非法侵入的防范能力。安全測試期間,測試人員假扮非法入侵者,采用各種辦法試圖突破防線。例如,①想方設(shè)法截取或破譯口令;②專門定做軟件破壞系統(tǒng)的保護機制;③故意導(dǎo)致系統(tǒng)失敗,企圖趁恢復(fù)之機非法進入;④試圖通過瀏覽非保密數(shù)據(jù),推導(dǎo)所需信息,等等。理論上講,只要有足夠的時間和資源,沒有不可進入的系統(tǒng)。因此系統(tǒng)安全設(shè)計的準則是,使非法侵入的代價超過被保護信息的價值。此時非法侵入者已無利可圖。
壓力測試:壓力測試是指在正常資源下使用異常流量,頻率或數(shù)據(jù)量來實施系統(tǒng)。 以下試驗可以在壓力試驗中進行:
①如果平均中斷次數(shù)是每秒一到兩次,那么特殊測試用例的設(shè)計每秒產(chǎn)生10次中斷。
②將輸入數(shù)據(jù)量增加一個數(shù)量級,以確定輸入函數(shù)如何響應(yīng)。
③在虛擬操作系統(tǒng)中,需要產(chǎn)生最大量的內(nèi)存或其他資源的測試用例,或產(chǎn)生過多的磁盤存儲數(shù)據(jù)。
一般的情況下,系統(tǒng)都要反復(fù)測試,因為在系統(tǒng)時間和功能的限制,所以系統(tǒng)不可能完美無缺。因此,有必要對各種測試方法一起檢測。
強度測試
強度測試檢查程序?qū)Ξ惓G闆r的抵抗能力。強度測試總是迫使系統(tǒng)在異常的資源配置下運行。例如,①當(dāng)中斷的正常頻率為每秒一至兩個時,運行每秒產(chǎn)生十個中斷的測試用例;②定量地增長數(shù)據(jù)輸入率,檢查輸入子功能的反映能力;③運行需要最大存儲空間(或其他資源)的測試用例;④運行可能導(dǎo)致虛存操作系統(tǒng)崩潰或磁盤數(shù)據(jù)劇烈抖動的測試用例,等等。
性能測試
??? 對于那些實時和嵌入式系統(tǒng),軟件部分即使?jié)M足功能要求,也未必能夠滿足性能要求,雖然從單元測試起,每一測試步驟都包含性能測試,領(lǐng)測認為只有當(dāng)系統(tǒng)真正集成之后,在真實環(huán)境中才能全面、可靠地測試運行性能系統(tǒng)性能測試是為了完成這一任務(wù)。性能測試有時與強度測試相結(jié)合,經(jīng)常需要其他軟硬件的配套支持。
6.1.3? 測試意義及注意事項
??? 軟件測試是軟件設(shè)計過程中極其重要的一個環(huán)節(jié),是保證軟件的質(zhì)量的重要保障。測試的方法的好壞會直接影響到軟件的好壞,進行軟件測試可以找出其中的錯誤、不足并加以改進,從而得到一個高效、可靠的系統(tǒng)。
??? 軟件應(yīng)從多角度進行測試和分析,這樣才能找出其中錯誤的地方。測試的時間最好找一些與設(shè)計系統(tǒng)無關(guān)的人員,或者分析人員。因為在開發(fā)軟件的時候,開發(fā)人員已經(jīng)形成了自己的思維定勢,在測試的時候始終受到這種思想的束縛,很難找出其中的錯誤而與設(shè)計無關(guān)的人員和那些分析人員很容易找出錯誤所在。
在程序調(diào)試過程中一定要耐心仔細,一個細微的錯誤將會導(dǎo)致整個功能不能實現(xiàn)導(dǎo)致浪費很多的時間去修改。應(yīng)在以下幾方面加以注意:
??? 1>語法錯誤
??? 語法錯誤是經(jīng)常碰到的錯誤。例如,命令拼寫錯誤或傳遞給函數(shù)的參數(shù)不正確都將產(chǎn)生錯誤。語法錯誤可能導(dǎo)致不能繼續(xù)編寫代碼。
??? 2>邏輯錯誤
??? 邏輯錯誤通??赡苁菨撛诤碗y以檢測的。當(dāng)有因鍵入錯誤或程序邏輯流程引起的邏輯錯誤,可能會成功運行,但產(chǎn)生的結(jié)果卻是錯的。例如,當(dāng)本應(yīng)使用小于符號比較數(shù)值,但卻使用了大于符號時,那么將返回不正確的結(jié)果。
??? 3>運行時錯誤
??? 運行時錯誤是在執(zhí)行過程中指令試圖執(zhí)行不可能的動作而導(dǎo)致的,必須糾正運行時產(chǎn)生的錯誤,這樣才能保證軟件運行的可靠性。
??? 本游戲在開發(fā)過程中采用了多種有效措施進行測試以保證軟件質(zhì)量,對本游戲進行了邊界處旋轉(zhuǎn)、方塊翻轉(zhuǎn)越界等方面的測試,極大的保證了軟件質(zhì)量和出錯幾率。但是系統(tǒng)中可能還存在著一些其他的錯誤和缺陷,因此,游戲必須要經(jīng)過反復(fù)的運行測試,盡最大量將bug減到最少。
6.2 游戲代碼、算法的測試
??? 1>寫get()方法時需要有返回值,但是程序中沒有寫return語句,使程序在編譯時出現(xiàn)錯誤。解決方法是,在方法中加入return語句,返回相應(yīng)的內(nèi)容即可。
??? 2>使用隨機函數(shù)產(chǎn)生方塊時沒有給各個方塊傳入?yún)?shù),編譯不能通過。解決方法是,根據(jù)各個方塊的構(gòu)造傳入相應(yīng)的參數(shù)。
??? 3>寫T字形方塊各方格的默認位置時,將控制方塊位置的變量i,初始化為0,運行的結(jié)果是丁字形方塊默認成了豎形方塊。解決方法是,將變量i的初始化數(shù)值改為1,即可達到設(shè)計的效果。
??? 4>運行程序時,統(tǒng)計的分數(shù)只是每一次消除滿行后的分數(shù),而以前的分數(shù)就會被覆蓋,沒有累計。解決方法是,將程序中的“score=”改為“score+=”,就可以使分數(shù)累加。
??? 5>算法流程的錯誤主要集中在如何檢測及消去方塊,還有如何在通關(guān)之后對分數(shù)的累加進行處理,是否升級的判定這些方面,經(jīng)過與同學(xué)的討論以及參考資料,都最終得到了解決。
6.3 游戲界面菜單選項的功能測試
1>“游戲”菜單測試
表6.1游戲菜單測試用例
| 測試用例編號 | 測試項目名稱 | 測試執(zhí)行步驟 | 輸出 | 測試結(jié)果 |
| 01 | “開局”按鈕測試 | 點擊“游戲”→“開局” | 游戲重置 | 成功 |
| 02 | “結(jié)束游戲”按鈕測試 | 點擊“游戲”→“結(jié)束游戲” | 游戲結(jié)束 | 成功 |
| 03 | “初級”按鈕測試 | 點擊“游戲”→“初級” | 游戲等級選擇為初級 | 成功 |
| 04 | “中級”按鈕測試 | 點擊“游戲”→“中級” | 游戲等級選擇為中級 | 成功 |
| 05 | “高級”按鈕測試 | 點擊“游戲”→“高級” | 游戲等級選擇為高級 | 成功 |
| 06 | “自定義”按鈕測試 | “自定義”按鈕測試 | 彈出對話框,可以更改自定義信息 | 成功 |
| 07 | “下落速度”滑塊測試 | 點擊“游戲”→“自定義”→“下落速度” | 拖動滑塊可更改方塊下落速度 | 成功 |
| 08 | “方塊形狀”單選框按鈕測試 | 點擊“游戲”→“自定義”→“方塊形狀”單選框 | 可選擇方塊形狀初級、中級、高級、來改變方塊的形狀 | 成功 |
| 09 | “方塊是否自動上漲”選擇框測試 | 點擊“游戲”→“自定義”→“方塊是否自動上漲”選擇框 | 可勾選小方格,選中則方塊自動上漲,不選中則方塊不自動上漲 | 成功 |
| 10 | “游戲過程是否播放聲音”選擇框測試 | 點擊“游戲”→“自定義”→“游戲過程是否播放聲音”選擇框 | 可勾選小方格,選中則游戲過程中播放聲音,不選中則游戲過程中不播放聲音。 | 成功 |
| 11 | “更換背景”選擇框 | 點擊“游戲”→“自定義”→“游戲過程是否播放聲音”選擇框 | 可勾選小方格,選中則更換游戲背景圖片,不選中則不更換游戲背景圖片 | 成功 |
| 12 | “確定”和“取消”按鈕測試 | 點擊“游戲”→“自定義”→“確定”或“取消”按鈕 | 點擊確定保存更改設(shè)置退出對話框,點擊取消則不更改設(shè)置退出對話框 | 成功 |
| 13 | “方塊顏色”按鈕測試 | 點擊“游戲”→“方塊顏色” | 彈出對話框,可以更改方塊顏色,HSB,RGB等自定義信息 | 成功 |
| 14 | “退出”按鈕測試 | ?點擊“游戲”→“退出” | 退出游戲并關(guān)閉主界面窗口 | 成功 |
2>“幫助”菜單測試
表6.2 “幫助”菜單測試用例
| 測試用例編號 | 測試項目名稱 | 測試執(zhí)行步驟 | 輸出 | 測試結(jié)果 |
| 15 | “關(guān)于”按鈕測試 | 點擊“幫助”→“關(guān)于” | 彈出對話框,提示游戲版本等信息 | 成功 |
6.4 按鍵事件的功能測試
表6.3按鍵事件功能測試用例
| 測試用例編號 | 測試項目名稱 | 測試執(zhí)行步驟 | 輸出 | 測試結(jié)果 |
| 16 | 方塊移動測試 | 游戲過程中,點擊“左、右、下” | 方塊正常移動,不會移出邊界 | 成功 |
| 17 | 方塊旋轉(zhuǎn)測試 | 游戲過程中,點擊“上”方向鍵 | 方塊無邊界和障礙物阻擋的情況下可反轉(zhuǎn) | 成功 |
6.5 方塊的堆砌與消行功能測試
表6.4 方塊的堆砌與消行功能測試用例
| 測試用例編號 | 測試項目名稱 | 測試執(zhí)行步驟 | 輸出 | 測試結(jié)果 |
| 18 | 方塊堆砌測試 | 當(dāng)方塊下落到最底面或與障礙物接觸時 | 方塊成功堆砌在底部 | 成功 |
| 19 | 方塊消行測試 | 當(dāng)出現(xiàn)滿行現(xiàn)象時 | 所有滿行被消除,方塊依次下移 | 成功 |
| 20 | 游戲結(jié)束測試 | 當(dāng)出現(xiàn)滿屏現(xiàn)象時 | 彈出會話窗口,提示“Game Over” | 成功 |
6.6? 測試結(jié)果
經(jīng)過多種測試方法對系統(tǒng)各個方面、功能的測試多次測試,測試結(jié)果表明系統(tǒng)基本符合的整體設(shè)計要求,預(yù)期功能基本完成。系統(tǒng)基本可滿足設(shè)計開發(fā)之初的要求,測試結(jié)束。不過整體功能還不夠強大,創(chuàng)新方面做的稍微遜色,作為開發(fā)的第一個版本,游戲在功能、界面設(shè)計等很多方面還需要進一步完善。
結(jié)? 論
在做畢業(yè)設(shè)計之前,我對Java相關(guān)的開發(fā)只是停留在理論知識的水平上,此次畢業(yè)設(shè)計讓我明白“紙上得來終覺淺,絕知此事要躬行”的道理。缺乏實際的軟件開發(fā)經(jīng)驗,是我給自己下的定論。通過這次畢業(yè)設(shè)計,我完成了俄羅斯方塊游戲的全部開發(fā)任務(wù)。在整個開發(fā)過程中遇到了很多問題,如方塊的繪制和變形、線程的創(chuàng)建問題、同步的控制、滿行判斷、消行的處理以及最高分數(shù)記錄的功能實現(xiàn),但最終都被我一一解決,對其中比較主要的幾點體會總結(jié)如下:
第一,為了熟悉俄羅斯方塊的相關(guān)功能和設(shè)計,我時常從各大游戲下載網(wǎng)站下載單機版俄羅斯方塊游戲,并研究其中功能的實現(xiàn)和界面的設(shè)計,思考和查閱資料進行分析,經(jīng)過逐步的設(shè)計與反復(fù)的修改論證,才完成了整個游戲的開發(fā)。
第二,在游戲設(shè)計過程中,我采用從粗到精的設(shè)計模式,從小到大測試的原則。先設(shè)計游戲框架,并逐層測試,而后再添加具體實現(xiàn)代碼并逐步進行更細化的測試。設(shè)計過程中,經(jīng)常會遇到難題,我會通過反復(fù)思考和測試,然后找出自己的錯誤并加以改正,再進行下一個步驟,確保萬無一失,盡力減輕最后的調(diào)試工作量。
第三,畢業(yè)設(shè)計業(yè)可以作為一個不斷學(xué)習(xí)新鮮事物的過程,從設(shè)計初的不懂到最后能夠圓滿完成,我體會到在實踐中不斷學(xué)習(xí)的重要性,這對于將來我走上工作崗位具有重要的教育意義。通過畢業(yè)設(shè)計的創(chuàng)作,我對Java這門課程有了更深一步的了解,也對我今后的就業(yè)之路打下了一定的基礎(chǔ)。
畢業(yè)設(shè)計是我們作為學(xué)生學(xué)習(xí)階段的最后一步,是基礎(chǔ)知識和專業(yè)知識的綜合應(yīng)用,是一個全面的重新學(xué)習(xí),然后改進過程,學(xué)生學(xué)習(xí)能力的過程和獨立思考和工作能力也是一個培訓(xùn),而畢業(yè)設(shè)計水平也反映了大學(xué)教育的綜合水平,所以學(xué)校非常重視畢業(yè)設(shè)計這一環(huán)節(jié),加強畢業(yè)設(shè)計工作和動員教育的指導(dǎo)。在大學(xué)學(xué)習(xí)過程中,畢業(yè)設(shè)計是我們社會參與實際工作的重要組成部分,也是為了我們學(xué)習(xí)和解決生活問題的能力,是學(xué)校生活和社會生活的轉(zhuǎn)型。畢業(yè)設(shè)計完成后,我嘗試研究設(shè)計和實踐工作的有機結(jié)合。這更有利于我們增強自己的能力。
經(jīng)過一段時間的努力,在一些同學(xué)和老師的幫助下,我終于完成畢業(yè)項目,這是一項重要任務(wù)?;叵胍幌挛覀冊O(shè)計的過程,可以說是困難和容易共存的。其中,把大學(xué)學(xué)習(xí)的知識被納入內(nèi)部,其實對我來說,也是一個不小的挑戰(zhàn),而且也是一次大學(xué)的知識的考試。?
在畢業(yè)設(shè)計的過程中遇到了很多困難,而且很多都是沒有遇到過的問題,如果不是親自做,可能很難在某種程度上找到自己所缺乏的知識,對我們來說,找到問題,到解決問題,這是最實際的。面對自身難以解決的問題,在獲取一些信息的同時,在老師和學(xué)生的幫助下,這些問題可以解決,所以畢業(yè)設(shè)計順利完成。據(jù)了解,該項目的知識依然非常深奧,所以我們不僅現(xiàn)在,在未來更是要繼續(xù)探索。
理論與實踐的結(jié)合不僅包括課堂參與的知識,還包括技能培訓(xùn)的結(jié)合,以及指導(dǎo)學(xué)生如何去理解并接觸與社會相關(guān)的東西。學(xué)生畢業(yè)設(shè)計,在專業(yè)理論知識的指導(dǎo)下,可以通過多種方式解決一些實際問題。在設(shè)計過程中,學(xué)生可以運用理論知識進行實踐,不僅要加深對專業(yè)理論知識的理解,而且要豐富和發(fā)展本書的理論知識,使之變成更高層次的經(jīng)驗、技能。由于現(xiàn)有的教學(xué)模式,理論知識和技能與生產(chǎn)實踐有著嚴重的分離,學(xué)生無法學(xué)習(xí)課堂以外的知識,實際生產(chǎn)問題常常與學(xué)習(xí)無關(guān),無法有效得到應(yīng)用。通過合理選擇課題,引導(dǎo)學(xué)生有意識地運用知識和技能體系進行分析思考,為有機地整合理論知識和實踐做出貢獻。
社會不斷變化,目前社會正在轉(zhuǎn)型發(fā)展,人才的要求也越來越高,利用眼光看待問題,學(xué)習(xí)創(chuàng)新,學(xué)習(xí)適應(yīng)社會發(fā)展要求。在校外,進入社會,抓住今天的機遇,創(chuàng)造未來。老師的影響力和教授的知識,讓我了解很多道理,以一定的創(chuàng)新精神去面對將來的挑戰(zhàn)。?
????總之,對于這一次畢業(yè)設(shè)計,我感覺個人不但比以前更加熟悉了一些專業(yè)方面的知識,還鍛煉了自己的動手能力,覺得收獲頗豐。同時也會有一種小小的成就感,因為自己在這項任務(wù)進行的過程中努力過了。而在以后的實際工作中,我們也應(yīng)該同樣努力,不求最好、只求更好!?還有就是,想在此對于我的指導(dǎo)老師和同學(xué)們表示忠心的感謝,感謝他們在這畢業(yè)設(shè)計過程中給我的幫助!
程序無論是從技術(shù)還是功能上都基本地滿足了用戶的需求。但由于初次設(shè)計,功能不夠完善,細節(jié)方面的設(shè)計還有不足。
這次的畢業(yè)設(shè)計,我受益匪淺,讓我的思維方式更加縝密,能多個角度的看待、處理問題;知道遇到問題該如何去分析問題、解決問題。相信這些都會讓我在以后的工作中受益無窮的。
參考文獻
[1] 李剛,瘋狂Java講義(第3版),北京:電子工業(yè)大學(xué)出版社,2014.7
[2] 明日科技,Java從入門到精通(第4版),北京:清華大學(xué)出版社,2016(2017.1重印)
[3] 榮欽科技 Java2游戲設(shè)計.清華大學(xué)出版社,2004.
[4] 高凌琴 陳青華.俄羅斯方塊游戲關(guān)鍵技術(shù)探討[J].信息技術(shù)與信息化討,2008年第二期
[5] 艾克爾.Java編程思想[M].北京:機械工業(yè)出版社,2005.2
[6] (美) Paul Hyde.Java線程編程[M].北京:人們郵電出版社,2003
[7] Martin dejode.Symbian OS J2ME[M].北京:人民郵電出版社,2005.10
[8] 朱福喜. Java程序設(shè)計技巧與開發(fā)實例[M].北京:人民郵電出版社,2004.2
[9] 袁海燕 王文濤.Java實用程序設(shè)計100例[M].北京:人民郵電出版社,2005.2:51~96
[10] 黃復(fù)賢.俄羅斯方塊游戲的敏捷設(shè)計與開發(fā)[J]. 電腦編程技巧與維護,2005.4
[11] (美)Bill Venners.深入Java虛擬機[M].北京:機械工業(yè)出版社,2003.9.63~98
[12] 聞怡洋.J2ME MIDP 1.0/2.0無線設(shè)備編程指南[M].北京:北京大學(xué)出版社,2004.5:393~420
[13]趙東躍.俄羅斯方塊編程[J].電腦編程技巧與維護,1998年第六期
[14]殷兆麟.Java網(wǎng)絡(luò)編程基礎(chǔ)[M].北京:北方交通大學(xué)出版社,2004
[15] (美)John Zukowski.Java 2 從入門到精通[M].北京:電子工業(yè)出版社,1999
[16] 宋波.Java應(yīng)用開發(fā)教程[M].北京:電子工業(yè)出版社,2002
[17] 托普雷.J2ME技術(shù)手冊[M].北京:中國電力出版社,2004.6:259~312
附錄A 外文原文
The psychology of Tetris
?? Shapes fall from the sky, all you have to do is to control how they fall and fit within each other. A simple premise, but add an annoyingly addictive electronica soundtrack (based on a Russian folk tune called?Korobeiniki, apparently) and you have a revolution in entertainment.
?? Since?Tetris?was launched on the world in the 1980s, millions of hours have been lost through playing this simple game. Since then, we’ve seen games consoles grow in power, and with it the appearance of everything from Call of Duty to World of Warcraft. Yet block and puzzle games like Tetris still have a special place in our hearts. Why are they are so compelling?
?? The writer Jeffrey Goldsmith was so obsessed with Tetris that he wrote a famous article asking if the game’s creator Alexey Pajitnov had invented “a pharmatronic?” – a video game with the potency of an addictive drug. Some people say that after playing the game for hours they see falling blocks in their dreams or buildings move together in the street – a phenomenon known as the?Tetris Effect. Such is its mental pull, there’s even been the suggestion that the game might be able to prevent flashbacks in?people with PTSD.
?? I had my own Tetris phase, when I was a teenager, and spent more hours than I should have trying to align the falling blocks in rows. Recently, I started thinking about why games like Tetris are so compelling. My conclusion? It’s to do with a deep-seated psychological drive to tidy up.
?? Many human games are basically ritualised tidying up. Snooker, or pool if you are non-British, is a good example. The first person makes a mess (the break) and then the players take turns in potting the balls into the pockets, in a vary particular order. Tetris adds a computer-powered engine to this basic scenario – not only must the player tidy up, but the computer keeps throwing extra blocks from the sky to add to the mess. It looks like a perfect example of a pointless exercise – a game that doesn't teach us anything useful, has no wider social or physical purpose, but which weirdly keeps us interested.
?? There's a textbook psychological phenomenon called theZeigarnik Effect, named after Russian psychologist Bluma Zeigarnik. In the 1930s, Zeigarnik was in a busy cafe and heard that the waiters had fantastic memories for orders – but only up until the orders had been delivered. They could remember the requests of a party of 12, but once the food and drink had hit the table they forgot about it instantly, and were unable to recall what had been so solid moments before. Zeigarnik gave her name to the whole class of problems where incomplete tasks stick in memory.
?? The Zeigarnik Effect is also part of the reason why quiz shows are so compelling. You might not care about the year the British Broadcasting Corporation was founded or the percentage of the world's countries that have at least one McDonald's restaurant, but once someone has asked the question it becomes strangely irritating not to know the answer (1927 and 61%, by the way). The questions stick in the mind, unfinished until it is completed by the answer.
Game theory:
?? Tetris holds our attention by continually creating unfinished tasks. Each action in the game allows us to solve part of the puzzle, filling up a row or rows completely so that they disappear, but is also just as likely to create new, unfinished work. A chain of these partial-solutions and newly triggered unsolved tasks can easily stretch to hours, each moment full of the same kind of satisfaction as scratching an itch.
?? The other reason why Tetris works so well is that each unfinished task only appears at the same time as its potential solution – those blocks continuously fall from the sky, each one a problem and a potential solution. Tetris is a simple visual world, and solutions can immediately be tried out using the five control keys (move left, move right, rotate left, rotate right and drop – of course). Studies of?Tetris players?show that people prefer to rotate the blocks to see if they'll fit, rather than think about if they'll fit. Either method would work, of course, but Tetris creates a world where action is quicker than thought – and this is part of the key to why it is so absorbing. Unlike so much of life, Tetris makes an immediate connection between our insight into how we might solve a problem and the means to begin acting on it.
?? The Zeigarnik Effect describes a phenomenon, but it doesn't really give any reason for why it happens. This is a common trick of psychologists, to pretend they solved a riddle of the human mind by giving it a name, when all they've done is invented an agreed upon name for the mystery rather than solved it. A plausible explanation for the existence of the Effect is that the mind is designed to reorganise around the pursuit of goals. If those goals are met, then the mind turns to something else.
?? Trivia takes advantage of this goal orientation by frustrating us until it is satisfied. Tetris goes one step further, and creates a continual chain of frustration and satisfaction of goals. Like a clever parasite, Tetris takes advantage of the mind's basic pleasure in getting things done and uses it against us. We can go along with this, enjoying the short-term thrills in tidying up those blocks, even while a wiser, more reflective, part of us knows that the game is basically purposeless. But then all good games are, right?
?? If you would like to comment on this article or anything else you have seen on Future, head over to our?Facebook page?or message us on?Twitter.
附錄B 外文翻譯
俄羅斯方塊的心理效應(yīng)
這一人們喜聞樂見的游戲成功的秘訣在于抓住了我們重復(fù)排列與使用的心理樂趣。
幾何圖形從屏幕上方緩緩降落,你要做的就是控制其降落方式并與其他圖形排列消除。游戲的初衷很簡單,但加上了令人上癮的背景電子音樂后(據(jù)說來自俄羅斯民謠Korobeiniki)人們的娛樂生活發(fā)生了翻天覆地的變化。
自從1986年俄羅斯方塊問世后,這一簡單的游戲耗去了玩家數(shù)百萬個小時。從那時起,從使命召喚到魔獸世界,游戲操縱平臺的外觀和性能都在茁壯發(fā)展。但像俄羅斯方塊這樣的方塊益智類游戲始終占據(jù)了我們心中的一席之地。為何它們?nèi)绱私?jīng)久不衰呢?
作家杰弗里·戈德史密斯是沉迷于俄羅斯方塊不能自拔,乃至于他寫了一篇著名的文章,文中提到俄羅斯方塊的發(fā)明者阿里克謝·帕吉諾特夫是否發(fā)明了一種“癮藥”——讓人可以玩出癮。一些人說自己連玩了幾小時俄羅斯方塊后連夢里都會出現(xiàn)降落的方塊,還有看街上的大樓都在移動——這是一種名為“俄羅斯效應(yīng)”的現(xiàn)象。這是游戲產(chǎn)生的心理推動作用,還有建議稱那些患有創(chuàng)傷后精神緊張性障礙的人們需要預(yù)防游戲產(chǎn)生的幻覺重現(xiàn)。
當(dāng)我十幾歲的時候也有過一段俄羅斯方塊沉迷期,我花了很多時間在方塊的排列組合上。最近,我開始反思為什么俄羅斯方塊這類游戲能夠長青。說說我的結(jié)論吧,植根人們心中的心理驅(qū)使作用是整理這些方塊的關(guān)鍵。
很多游戲的宗旨大體都是整理消除。落袋臺球(snooker)就是典型的例子(對于非英國人來說叫做pool)。第一個人把球打亂后,其他人依照不同規(guī)則輪流將球射入落袋里。俄羅斯方塊在這一基本框架中加入了電腦控制的成分——不光是玩家要整理方塊,電腦還會不斷從上方扔下額外的方塊來制造凌亂。游戲看起來就是整一個漫無目的的過程,完全沒有寓教于樂的成分在內(nèi),也沒有深遠的社交或是心理意義,但是我們卻意外地為此著迷。
這當(dāng)中存在著一種名為“蔡加尼克效應(yīng)”的典型心理現(xiàn)象,命名自俄羅斯心理學(xué)家布魯瑪·蔡加尼克。19世紀30年代,蔡加尼克在一家人來人往的咖啡館里發(fā)現(xiàn)服務(wù)員的記憶力都很驚人——但是只能保持到餐點送到為止。他們能記住一桌12人點的東西,不過一旦食物和飲料上桌后他們立馬忘得一干二凈,也回想不起之前穩(wěn)固的記憶。蔡加尼克將這種把未完成的任務(wù)堅持保留在記憶中的現(xiàn)象以自己的名字命名。
蔡加尼克效應(yīng)也是智力節(jié)目如此受歡迎的原因之一。你可能不關(guān)心英國廣播公司是在幾幾年成立的或者全球至少有一家麥當(dāng)勞的國家占了多少,但是一旦出了這樣的問題,不知道答案居然就會渾身不舒服(順便答案是1927年和61%)。問題在被解答前一直會繚繞在腦海中。
游戲原理
俄羅斯方塊通過不斷創(chuàng)建任務(wù)而牢牢抓住我們的神經(jīng)。游戲中的每個環(huán)節(jié)都引領(lǐng)者我們解決謎團,排成或完成一列后圖形會消失,但是新的也在不斷出現(xiàn),周而復(fù)始。部分解決與新形成的任務(wù)鏈用來打發(fā)時間很方便,反復(fù)的滿足與焦慮感填滿了每時每刻。
另一個俄羅斯方塊風(fēng)靡的原因在于問完成的任務(wù)與潛在的解決方法并存——徐徐降臨的每一種方塊都有各自的安插方式。俄羅斯方塊是一個簡單的可視世界,通過操縱五個按鍵(當(dāng)然是向左、向右、左轉(zhuǎn)、右轉(zhuǎn)和降落)能夠迅速地得出解決方案。對俄羅斯方塊玩家的研究結(jié)果顯示,人們普遍喜歡通過旋轉(zhuǎn)方塊來看它們是否匹配,而不是一邊看著方塊降落一邊思考。當(dāng)然這兩種方法都可行,但在俄羅斯方塊的世界里永遠是動作領(lǐng)先——這是吸引人的關(guān)鍵。和生活中不太相同的是,俄羅斯方塊將我們處理問題時的所見所想直接聯(lián)系到了一起,我們能立即對問題采取行動。
蔡加尼克效應(yīng)是對一種現(xiàn)象的形容,但它無法解釋起因和作用。這是心理學(xué)家常用的把戲,看似他們通過命名而解開了人類的難解之謎,其實他們所做的僅僅是貪心地用自己的名字命名而根本沒解決問題。對這一現(xiàn)實的合理解釋是,大腦回路在達成目標的過程中會重組。如果這一目的達成,思路就會轉(zhuǎn)移到其他事物上。
益智游戲利用心理達標原理不斷挫敗我們直至我們滿意。俄羅斯方塊則更進一步在失敗與成功之間創(chuàng)建了持續(xù)的鏈條。正如聰明的寄生蟲一般,俄羅斯方塊善于利用人們完成與再使用的心理樂趣。我們一邊玩著一邊短暫地陶醉于排列方塊的樂趣中,哪怕我們?nèi)烁裰欣碇桥c成熟的部分明白這基本上是個毫無意義的游戲。但是所有好玩的游戲不都是這樣嘛,我說得對嗎?
總結(jié)
以上是生活随笔為你收集整理的基于java的俄罗斯方块游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东北大学软件项目管理与过程改进复习提纲(
- 下一篇: 【windows】win10如何安装使用