JAVA課程設(shè)計(jì)俄羅斯方塊(含代碼)_第1頁(yè)
JAVA課程設(shè)計(jì)俄羅斯方塊(含代碼)_第2頁(yè)
JAVA課程設(shè)計(jì)俄羅斯方塊(含代碼)_第3頁(yè)
JAVA課程設(shè)計(jì)俄羅斯方塊(含代碼)_第4頁(yè)
JAVA課程設(shè)計(jì)俄羅斯方塊(含代碼)_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、IJavaJava程序課程設(shè)計(jì)程序課程設(shè)計(jì)任任 務(wù)務(wù) 書書俄羅斯方塊游戲的開(kāi)發(fā)1 1、主要內(nèi)容:、主要內(nèi)容:俄羅斯方塊游戲具有廣泛的游戲人群,因?yàn)樗容^簡(jiǎn)單有趣,無(wú)論老少都比較適合。俄羅斯方塊游戲的設(shè)計(jì)對(duì)于每一個(gè)Java語(yǔ)言設(shè)計(jì)者進(jìn)行語(yǔ)言提高和進(jìn)階都是一個(gè)很好的鍛煉機(jī)會(huì)。俄羅斯方塊游戲的設(shè)計(jì)工作是非常復(fù)雜和重要的,它涉及面逛,牽涉面多,如果不好好考慮和設(shè)計(jì),將難以成功開(kāi)發(fā)出這個(gè)游戲。在這個(gè)游戲的設(shè)計(jì)中,將牽涉到圖形界面的顯示與更新,數(shù)據(jù)的收集與更新并且在這個(gè)游戲的開(kāi)發(fā)中還會(huì)應(yīng)用類的繼承機(jī)制以及一些設(shè)計(jì)模式。因此,如何設(shè)計(jì)和開(kāi)發(fā)好這個(gè)俄羅斯方塊游戲,對(duì)于提高Java開(kāi)發(fā)水平和系統(tǒng)的設(shè)計(jì)能力有極大

2、的幫助。在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者需要處理好各個(gè)類之間的集成關(guān)系,還要處理各個(gè)類的相應(yīng)的封裝,并且還要協(xié)調(diào)好各個(gè)模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。2 2、具體要求(包括技術(shù)要求等):具體要求(包括技術(shù)要求等):系統(tǒng)的功能設(shè)計(jì)要求:系統(tǒng)的功能設(shè)計(jì)要求:本課程設(shè)計(jì)將實(shí)現(xiàn)以下幾種功能。本課程設(shè)計(jì)將實(shí)現(xiàn)以下幾種功能。1.1. 游戲界面主框架游戲界面主框架游戲界面主框架主要包括游戲圖形區(qū)域界面,游戲速度的選擇更新界面,游戲分?jǐn)?shù)的顯示更新界面,下一個(gè)圖形方塊的顯示更新區(qū)域,開(kāi)始游戲按鈕,重新開(kāi)始游戲按鈕以及退出游戲按鈕游戲界面主框架的主要結(jié)構(gòu)如下圖所示。II2游戲圖形區(qū)域界面的顯示更新功能游戲圖形區(qū)域界

3、面的顯示更新功能 游戲圖形區(qū)域界面主要是一個(gè)圖形顯示更新區(qū)域,主要包括游戲方塊顯示更新,整行方塊的刪除和更新,進(jìn)行中和游戲結(jié)束時(shí)的分?jǐn)?shù)更新和游戲圖形區(qū)域界面的清除。 在這個(gè)游戲圖形區(qū)域界面中,主要是一個(gè)表格,根據(jù)相應(yīng)格子的設(shè)置標(biāo)志來(lái)顯示相應(yīng)的圖形圖片,這樣就實(shí)現(xiàn)了俄羅斯方塊的實(shí)時(shí)顯示。3游戲方塊的設(shè)計(jì)游戲方塊的設(shè)計(jì) 在俄羅斯方塊游戲中,具體的游戲方塊圖形的設(shè)計(jì)是比較重要的一個(gè)方面。因?yàn)槎砹_斯方塊游戲中主要的動(dòng)作就是控制游戲方塊的移動(dòng)和翻轉(zhuǎn),以便于組成一行行連續(xù)的方塊從而增加游的分?jǐn)?shù)。由于主要的游戲動(dòng)作都集中在這個(gè)游戲方塊上,因此游戲方塊的設(shè)計(jì)就顯得格外重要了。為了增加程序的可擴(kuò)展性,這里設(shè)計(jì)一

4、個(gè)游戲方塊的基類,各個(gè)具體的游戲方塊都從這個(gè)基類開(kāi)始繼承。這樣,當(dāng)需要增加游戲方塊時(shí)就不用重新設(shè)計(jì)新的類,只需要從這個(gè)基類集成出一個(gè)類就可以了。更具基類設(shè)計(jì)了8個(gè)派生游戲方塊類,其結(jié)構(gòu)如圖:III 系統(tǒng)功能設(shè)計(jì)分析系統(tǒng)功能設(shè)計(jì)分析 俄羅斯方塊游戲根據(jù)游戲界面布局的不同,將系統(tǒng)劃分為如下幾個(gè)功能部分。(1) 游戲顯示更新功能。游戲顯示更新功能主要是更新顯示游戲區(qū)域的方塊顯示,包括控制游戲方塊的下落速度,下落方向以及形狀改變,并且還需要判斷當(dāng)前游戲方塊是否滿足消除一行的條件。GameAreaPanel類就是游戲顯示更新的控制類,paint(Graphics g)方法主要負(fù)責(zé)游戲區(qū)域的實(shí)時(shí)重繪。(2

5、) 游戲方塊預(yù)覽功能。在游戲過(guò)程中,當(dāng)在游戲區(qū)域中出現(xiàn)一個(gè)游戲方塊時(shí),必須在游戲預(yù)覽區(qū)域出現(xiàn)下一個(gè)游戲方塊,這樣有利于游戲者控制游戲的策劃。由于在此游戲中存在8中不同的游戲方塊,所以在游戲方塊預(yù)覽中就需要顯示隨機(jī)生成游戲方塊。PreviewPanel類是游戲預(yù)覽控制類,在painting(Graphics g)方法中,將根據(jù)生成的隨機(jī)數(shù)字顯示不同的游戲方塊。(3) 游戲方塊控制功能。給各種游戲方塊設(shè)置一個(gè)基類,主要包括begin()(初始化顯示)方法,down()(向下移動(dòng))方法,left()(向左移動(dòng))方法,right()(向右移動(dòng))方法,change()(變換角度)方法,downto()(

6、一下到底)方法。在各個(gè)游戲子類中,需要具體實(shí)現(xiàn)這些方法。(4) 游戲速度分?jǐn)?shù)更新功能。在游戲者進(jìn)行游戲的過(guò)程中,需要按照異地昂的游戲規(guī)則給游戲規(guī)則給游戲者計(jì)算游戲分?jǐn)?shù),當(dāng)游戲分?jǐn)?shù)達(dá)到一定數(shù)量后,就需要給游戲者增加難度,即提高游戲中游戲方塊的下落速度。學(xué)習(xí)并掌握以下技術(shù):學(xué)習(xí)并掌握以下技術(shù):Java等熟練使用以下開(kāi)發(fā)工具:熟練使用以下開(kāi)發(fā)工具:JCreator等實(shí)現(xiàn)系統(tǒng)上述的功能。實(shí)現(xiàn)系統(tǒng)上述的功能。IV3 3、進(jìn)度安排:進(jìn)度安排:12月28日 12月29日:課程設(shè)計(jì)選題,查找參考資料 12月29日 12月 30日:完成需求分析12月31日 1月2日: 完成系統(tǒng)設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì)1月3日 1月4日

7、: 完成程序代碼的編寫1月5日 1月6日:系統(tǒng)測(cè)試與完善1月7日 1月8日:完成課程設(shè)計(jì)報(bào)告,準(zhǔn)備答辯4、主要參考文獻(xiàn)、主要參考文獻(xiàn)1 劉中兵.Java高手真經(jīng)M.北京:電子工業(yè)出版社,2009.3:3-6662 陶亞楠 廖建.Java Web開(kāi)發(fā)入行真功夫M.北京:電子工業(yè)出版社,2009.3:3-2223黃曉東.Java 課程設(shè)計(jì)案列精編(第二版)M .中國(guó)水利水電出版社,2007.4:6-3334黃曉東.Java 課程設(shè)計(jì)案列精編(第一版)M .中國(guó)水利水電出版社,2004.5:6-2225 趙斌.SQL Server 2008應(yīng)用開(kāi)發(fā)案例解析M.北京:科學(xué)出版社,2009:8-1006

8、 Kai Leung Yung,Wai Hung Ip,Ding-Wei Wang. Soft Computing Based Procurement Planning of Time-variable Demand in Manufacturing Systems J. International Journal of Automation and Computing. 2007, 4(1):80-877 Meline J.P.Van der Meulen,Miguel Revilla. The Effectiveness of Choice of Programming Language

9、as a Diversity Seeking DecisionJ. Springer Berlin/Heidelberg. 2005, (3):199-209V摘要摘要在現(xiàn)今電子信息高速發(fā)展的時(shí)代,電子游戲已經(jīng)深入人們的日常生活,成為老少皆宜的娛樂(lè)方式。但是游戲設(shè)計(jì)結(jié)合了日新月異的技術(shù),在一個(gè)產(chǎn)品中整合了復(fù)雜的設(shè)計(jì)、藝術(shù)、聲音和軟件,所以并不是人人皆知。直到今天,在中國(guó)從事游戲設(shè)計(jì)的人仍然很少,但是游戲行業(yè)的發(fā)展之快,遠(yuǎn)超如家電、汽車等傳統(tǒng)行業(yè),也正因?yàn)槿绱?,游戲人才的教育、培養(yǎng)遠(yuǎn)落后于產(chǎn)業(yè)的發(fā)展。俄羅斯方塊是個(gè)老幼皆宜的小游戲,它實(shí)現(xiàn)由四塊正方形的色塊組成,然后存儲(chǔ)在一個(gè)數(shù)組的四個(gè)元素中,計(jì)

10、算機(jī)隨機(jī)產(chǎn)生不同七種類型的方塊,根據(jù)計(jì)算機(jī)時(shí)鐘控制它在一定的時(shí)間不停的產(chǎn)生,用戶根據(jù)鍵盤的四個(gè)方向鍵控制翻轉(zhuǎn)、向左、向右和向下操作,(控制鍵的實(shí)現(xiàn)是由鍵盤的方向鍵的事件處理實(shí)現(xiàn))。然后程序根據(jù)這七種方塊堆疊成各種不同的模型。論文描述了游戲的歷史,開(kāi)發(fā)此游戲的環(huán)境,游戲開(kāi)發(fā)的意義。遵循軟件工程的知識(shí),從軟件問(wèn)題定義開(kāi)始,接著進(jìn)行可行性研究、需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),最后對(duì)軟件進(jìn)行了測(cè)試,整個(gè)開(kāi)發(fā)過(guò)程貫穿軟件工程的知識(shí)體系。此次設(shè)計(jì)在Microsoft Windows XP系統(tǒng)下,以Java為開(kāi)發(fā)語(yǔ)言,在eclipse開(kāi)發(fā)平臺(tái)上進(jìn)行游戲的設(shè)計(jì)與實(shí)踐。關(guān)鍵詞:游戲設(shè)計(jì);算法;數(shù)組;事件關(guān)鍵詞:游

11、戲設(shè)計(jì);算法;數(shù)組;事件VIAbstractIn the era of high-speed development of electronic information, computer game has enter peoples daily life, become an amusement adapt to old and young. But Game design is a combination of fast-moving technology, the complexity of integrating design、 art、audio and software into

12、a single production, so this technology isnt known by everyone. up-to-date, there are few people work at game design all the same, whereas, the development of game industry more faster than traditional industry as home appliances and automobile, by the reason of this situation, the education and tra

13、ining of person with ability of game design drop behind the development of game industry.The Russian square piece is a get-away drama with all proper old young , it carry out to be constitute by four pieces of colors of exact square piece, then save in one four chemical elements of the piece set, ra

14、ndom creation dissimilarity of calculator seven the square piece of the category type, control it according to the calculator clock in certain time continuously creation, the customer is inside out according to four directions key control of the keyboard, to left, rightwards and get down the operati

15、on,.( the realization of the control key is to be carry out by the event handling of the direction key of the keyboard)Then the procedure pileds according to these seven kinds of square pieces various different model.The thesis has described the game history , has developed this game environment, de

16、velopment significance of game. Knowledge abiding by a software engineering, definition begins from software problem , proceed to carry out feasibility study , need analysis , essentials design , detailed design, the at last has carried out a testing on the software , entire exploitation process has

17、 run through the software engineering knowledge hierarchy.The computer game design and practice are designed on eclipse developing platform with Java developing instrument, under Microsoft Windows XP system this time.Key Words:Game design;calculate way;several;eve浙江科技學(xué)院信息與電子工程學(xué)院2009級(jí)Java程序課程設(shè)計(jì)報(bào)告I目目

18、錄錄摘要摘要.VIABSTRACT.VII目目 錄錄.I第第1章章 引言引言 .11.1 背景.11.2 課程設(shè)計(jì)內(nèi)容.11.3 任務(wù)分工.2第第2章章 俄羅斯方塊概述俄羅斯方塊概述 .42.1 游戲的歷史.42.1.1從頭談起.42.1.2圖形硬件的革命.42.2游戲的意義與內(nèi)涵.52.2.1游戲的組成要素.52.3俄羅斯方塊游戲.5第第3章章 可行性研究可行性研究 .63.1 設(shè)計(jì)目的.63.2 可行性研究前提.63.3 可行性分析.73.4 結(jié)論.7第第4章章 俄羅斯方塊游戲的設(shè)計(jì)俄羅斯方塊游戲的設(shè)計(jì) .84.1游戲功能需求.84.2 運(yùn)行環(huán)境及系統(tǒng)性能的需求.94.3 詳細(xì)設(shè)計(jì).9浙江

19、科技學(xué)院信息與電子工程學(xué)院2009級(jí)Java程序課程設(shè)計(jì)報(bào)告II第第5章章 系統(tǒng)的具體實(shí)現(xiàn)系統(tǒng)的具體實(shí)現(xiàn) .205.1界面設(shè)計(jì).205.1.1用戶登陸界面圖.205.1.2 系統(tǒng)主界面.265.2程序設(shè)計(jì)及調(diào)試運(yùn)行.315.2.1 測(cè)試的意義及注意事項(xiàng).315.2.2測(cè)試的步驟.325.2.3 測(cè)試結(jié)果.33第第6章章 結(jié)束語(yǔ)結(jié)束語(yǔ) .33致謝致謝 .34參考文獻(xiàn)參考文獻(xiàn) .35附錄附錄 源代碼源代碼 .361第第1章章 引言引言1.11.1 背景背景俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它由俄羅斯人阿列克謝帕基特諾夫發(fā)明,故得此名。俄羅斯方塊的基本規(guī)則是移動(dòng)、旋轉(zhuǎn)和擺放游戲自

20、動(dòng)輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡(jiǎn)單、老少皆宜,從而家喻戶曉,風(fēng)靡世界。 俄羅斯方塊曾經(jīng)造成的轟動(dòng)與造成的經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上的一件大事,它看似簡(jiǎn)單但卻變化無(wú)窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個(gè)俄羅斯方塊時(shí)代。俄羅斯方塊上手極其簡(jiǎn)單,但是要熟練地掌握其中的操作與擺放技巧,難度卻不低。作為家喻戶曉老少皆宜的大眾游戲,其普及程度可以說(shuō)是史上任何一款游戲都無(wú)法相比的。但是,誰(shuí)知道這么優(yōu)秀的娛樂(lè)工具,出自哪位神人之手呢?顧名思義,俄羅斯方塊自然是俄羅斯人發(fā)明的。這位偉人叫做阿列克謝帕基特諾夫。俄羅斯方塊原名是俄語(yǔ)(英語(yǔ)是Tetris),

21、這個(gè)名字來(lái)源于希臘語(yǔ)tetra,意思是“四”,而游戲的作者最喜歡網(wǎng)球(tennis)。于是,他把兩個(gè)詞tetra和tennis合而為一,命名為Tetris,這也就是俄羅斯方塊名字的由來(lái)啦。1.21.2 課程設(shè)計(jì)內(nèi)容課程設(shè)計(jì)內(nèi)容1. .游戲界面主框架游戲界面主框架游戲界面主框架主要包括游戲圖形區(qū)域界面,游戲速度的選擇更新界面,游戲分?jǐn)?shù)的顯示更新界面,下一個(gè)圖形方塊的顯示更新區(qū)域,開(kāi)始游戲按鈕,重新開(kāi)始游戲按鈕以及退出游戲按鈕2游戲圖形區(qū)域界面的顯示更新功能游戲圖形區(qū)域界面的顯示更新功能 游戲圖形區(qū)域界面主要是一個(gè)圖形顯示更新區(qū)域,主要包括游戲方塊顯示更2新,整行方塊的刪除和更新,進(jìn)行中和游戲結(jié)束

22、時(shí)的分?jǐn)?shù)更新和游戲圖形區(qū)域界面的清除。 在這個(gè)游戲圖形區(qū)域界面中,主要是一個(gè)表格,根據(jù)相應(yīng)格子的設(shè)置標(biāo)志來(lái)顯示相應(yīng)的圖形圖片,這樣就實(shí)現(xiàn)了俄羅斯方塊的實(shí)時(shí)顯示。3游戲方塊的設(shè)計(jì)游戲方塊的設(shè)計(jì) 在俄羅斯方塊游戲中,具體的游戲方塊圖形的設(shè)計(jì)是比較重要的一個(gè)方面。因?yàn)槎砹_斯方塊游戲中主要的動(dòng)作就是控制游戲方塊的移動(dòng)和翻轉(zhuǎn),以便于組成一行行連續(xù)的方塊從而增加游的分?jǐn)?shù)。由于主要的游戲動(dòng)作都集中在這個(gè)游戲方塊上,因此游戲方塊的設(shè)計(jì)就顯得格外重要了。為了增加程序的可擴(kuò)展性,這里設(shè)計(jì)一個(gè)游戲方塊的基類,各個(gè)具體的游戲方塊都從這個(gè)基類開(kāi)始繼承。這樣,當(dāng)需要增加游戲方塊時(shí)就不用重新設(shè)計(jì)新的類,只需要從這個(gè)基類集成

23、出一個(gè)類就可以了。4.系統(tǒng)功能設(shè)計(jì)分析系統(tǒng)功能設(shè)計(jì)分析 俄羅斯方塊游戲根據(jù)游戲界面布局的不同,將系統(tǒng)劃分為如下幾個(gè)功能部分。(1) 游戲顯示更新功能。游戲顯示更新功能主要是更新顯示游戲區(qū)域的方塊顯示,包括控制游戲方塊的下落速度,下落方向以及形狀改變,并且還需要判斷當(dāng)前游戲方塊是否滿足消除一行的條件。GameAreaPanel類就是游戲顯示更新的控制類,paint(Graphics g)方法主要負(fù)責(zé)游戲區(qū)域的實(shí)時(shí)重繪。(2) 游戲方塊預(yù)覽功能。在游戲過(guò)程中,當(dāng)在游戲區(qū)域中出現(xiàn)一個(gè)游戲方塊時(shí),必須在游戲預(yù)覽區(qū)域出現(xiàn)下一個(gè)游戲方塊,這樣有利于游戲者控制游戲的策劃。由于在此游戲中存在8中不同的游戲方塊

24、,所以在游戲方塊預(yù)覽中就需要顯示隨機(jī)生成游戲方塊。PreviewPanel類是游戲預(yù)覽控制類,在painting(Graphics g)方法中,將根據(jù)生成的隨機(jī)數(shù)字顯示不同的游戲方塊。(3) 游戲方塊控制功能。給各種游戲方塊設(shè)置一個(gè)基類,主要包括begin()(初始化顯示)方法,down()(向下移動(dòng))方法,left()(向左移動(dòng))方法,right()(向右移動(dòng))方法,change()(變換角度)方法,downto()(一下到底)方法。在各個(gè)游戲子類中,需要具體實(shí)現(xiàn)這些方法。(4) 游戲速度分?jǐn)?shù)更新功能。在游戲者進(jìn)行游戲的過(guò)程中,需要按照異地昂的游戲規(guī)則給游戲規(guī)則給游戲者計(jì)算游戲分?jǐn)?shù),當(dāng)游戲分

25、數(shù)達(dá)到一定數(shù)量后,就需要給游戲者增加難度,即提高游戲中游戲方塊的下落速度。3 1.31.3 任務(wù)分工任務(wù)分工4第第2章章 俄羅斯方塊概述俄羅斯方塊概述2.12.1 游戲的歷史游戲的歷史游戲是人類生活的重要組成部分,從第一個(gè)電子游戲開(kāi)發(fā)至今已經(jīng)有30多年,在這個(gè)短暫的時(shí)期里,隨著硬件水平的提高,游戲開(kāi)發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。2.1.1從頭談起從頭談起真正的電子游戲機(jī)產(chǎn)生于20世紀(jì)70年代。1971年,麻省理工學(xué)院的學(xué)生Nolan Bushnell設(shè)計(jì)了世界上的第一個(gè)業(yè)務(wù)用游戲機(jī)(俗名街機(jī)),叫做電腦空間。這臺(tái)游戲機(jī)用一臺(tái)黑白電視機(jī)作為顯示屏,用一個(gè)控制柄作為操縱器,不過(guò)由于市場(chǎng)因素這

26、款游戲以失敗告終。但是最后他在電子游戲的發(fā)展上取得了非凡的成就。上面介紹的是專用機(jī)游戲的歷史,而最早的電腦游戲可以追溯到1972年,一個(gè)叫Crowther的工程師用當(dāng)時(shí)最流行的主機(jī)DEC公司的PDP10編寫一段簡(jiǎn)單的FORTRAN程序。在這個(gè)程序里,Crowther設(shè)計(jì)了一張地圖,地圖上不規(guī)則的分布著陷阱,游戲者必須尋找路徑避開(kāi)陷阱。這個(gè)程序被公認(rèn)為是最早的電腦游戲程序。1989年,BroderBund公司的設(shè)計(jì)師喬丹.麥克納根據(jù)阿拉伯民族的古老傳說(shuō)一千零一夜在Apple平臺(tái)上制作了一部動(dòng)作冒險(xiǎn)相結(jié)合的電腦游戲波斯王子。這個(gè)游戲獲得了第一作,它代表了當(dāng)時(shí)電腦技術(shù)的最高水平。1986年,任天堂公

27、司發(fā)售了一款真正的游戲巨作超級(jí)馬里奧。20世紀(jì)80年代IBM PC兼容機(jī)的出現(xiàn)打破了Apple公司的壟斷地位。到了20世紀(jì)90年代,游戲業(yè)才真正成熟起來(lái),成為了一種產(chǎn)業(yè)。由于PC機(jī)價(jià)格非常低而且硬件速度越來(lái)越快,游戲逐漸成為人們生活中不可缺少的一部分。游戲產(chǎn)業(yè)也逐漸發(fā)展成熟。2.1.2圖形硬件的革命圖形硬件的革命圖形硬件的飛速發(fā)展是近些年來(lái)的事情,部分原因是來(lái)自工業(yè)方面的壓力,例如在軍事和醫(yī)療方面對(duì)于實(shí)時(shí)圖形的需求很強(qiáng)烈,而交互娛樂(lè)產(chǎn)業(yè)也極大的推動(dòng)了圖形硬件的發(fā)展。技術(shù)上的因素同樣也推動(dòng)著圖形硬件的發(fā)展,許多圖形算法可以很容易地表達(dá)為并行方式,這樣硬件執(zhí)行的效率變得很高。摩樂(lè)定律也起了作用,越

28、來(lái)越多的晶體管可以集成到一塊單獨(dú)的芯片上。5在所謂的GPU(圖形處理器)概念出現(xiàn)以前,特殊的圖形硬件只出現(xiàn)在諸如SGI和E&S系統(tǒng)里面,這些硬件價(jià)格太昂貴,不過(guò)這些公司提供了第一代基于硬件的頂點(diǎn)變換和紋理映射的解決方案。2.22.2游戲的意義與內(nèi)涵游戲的意義與內(nèi)涵游戲這個(gè)名稱一直就存在于每個(gè)人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲,好比“一場(chǎng)游戲一場(chǎng)夢(mèng)” 。因此,游戲?qū)τ诂F(xiàn)代人的成長(zhǎng)歷程,絕對(duì)是一個(gè)不可或缺的重要角色。2.2.12.2.1游戲的組成要素游戲的組成要素“游戲”,最簡(jiǎn)單的定義,就是一種供人們娛樂(lè)休閑

29、的快樂(lè)元素。從更專業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂(lè)及輸贏的一種行為表現(xiàn)。這種行為表現(xiàn)具備以下4個(gè)要素。行為模式行為模式: :“游戲”最簡(jiǎn)單的要素就是游戲有特定的流程模式,這種流程模式貫穿于整個(gè)游戲的行為,用戶必須依照它的模式流程來(lái)執(zhí)行。倘若一種游戲沒(méi)有了特定的行為模式,那么就沒(méi)有執(zhí)行的行為;在沒(méi)有執(zhí)行的行為之后,這個(gè)游戲也玩不下去了。舉個(gè)例子來(lái)說(shuō),如果猜拳游戲沒(méi)有了剪刀、石頭、布等行為模式,那么這還能叫做“猜拳游戲” 嗎?所以不管游戲的流程有多么復(fù)雜還是多么簡(jiǎn)單,一定要有特定的行為模式。條件規(guī)則條件規(guī)則: :當(dāng)游戲有了一定的行為模式后,接著就必須制定出一系列的條件

30、規(guī)則。簡(jiǎn)單來(lái)說(shuō),這些游戲的條件規(guī)則就是大家必須去遵守的游戲行為守則,只要是大家一致以為的游戲行為,在游戲中,玩家就必須遵守它,如果不遵守這種游戲行為,那么就失去了公平性。如同一種簡(jiǎn)單的球賽,打球的英文解釋可以用PLAY GAME來(lái)加以說(shuō)明,按照英文字面上的解釋,它就是執(zhí)行游戲的行為,而球賽必須有一定的條件規(guī)則,并且參與者都要必須去遵守它,不能遵守它就叫作“犯規(guī)”。所以不管是什么游戲,它都會(huì)具備一組規(guī)則條件,在游戲進(jìn)行的時(shí)候才會(huì)有足夠的公平性。娛樂(lè)身心娛樂(lè)身心: :一種游戲所帶來(lái)的娛樂(lè)性,關(guān)鍵就在于為玩家所帶來(lái)的刺激感,這也是游戲的精華所在。簡(jiǎn)單來(lái)說(shuō),不管是很多人玩的游戲,還是一個(gè)人玩的單機(jī)游戲

31、,游戲本身就會(huì)存在它的娛樂(lè)和刺激性,使得玩家們想要去玩它。輸贏輸贏: :其實(shí)針對(duì)游戲而言,輸贏是所有游戲的最終目的。一個(gè)沒(méi)有輸贏的游戲,也就沒(méi)有了它存在的意義,如同我們常常接觸到的猜拳游戲,說(shuō)穿了最終目的就是為了分出勝負(fù)而己。一般而言,游戲又可以分為動(dòng)態(tài)和靜態(tài)兩種形態(tài)。動(dòng)態(tài)的游戲必須配合肢體動(dòng)作,如猜拳游戲;而靜態(tài)游戲則是較偏向思考的行為,如同紙上游戲。然而不管是動(dòng)態(tài)或是靜態(tài)游戲,只要具備上述4項(xiàng)組成要素,都可以將它稱為“游戲”。62.32.3俄羅斯方塊游戲俄羅斯方塊游戲俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動(dòng)與造成的經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上的一件大事。這款游戲最

32、初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡(jiǎn)單但卻變化無(wú)窮,令人上癮。但是經(jīng)過(guò)時(shí)代的變遷,當(dāng)初簡(jiǎn)單卻變化無(wú)窮的俄羅斯方塊游戲如今卻已失去了它的市場(chǎng),究其原因,主要是因?yàn)橛螒蛴布约凹夹g(shù)的革新使得優(yōu)秀的游戲接二連三地推出,而俄羅斯方塊游戲作為一款形式、內(nèi)容過(guò)于簡(jiǎn)單的游戲勢(shì)必經(jīng)受不住時(shí)間的沖擊的。現(xiàn)在作者將改寫這個(gè)固定的游戲模式,通過(guò)增加一系列的新功能,開(kāi)發(fā)出一種全新的俄羅斯方塊游戲,使游戲用戶重新燃起對(duì)俄羅斯方塊游戲的熱愛(ài)。第3章 可行性研究 3.13.1 設(shè)計(jì)目的設(shè)計(jì)目的綜合運(yùn)用在校期間所學(xué)理論知識(shí)和技能,設(shè)計(jì)開(kāi)發(fā)俄羅斯方塊,使自己熟悉應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程,培養(yǎng)獨(dú)立思考能力,

33、檢驗(yàn)學(xué)習(xí)效果和動(dòng)手能力,提高工程實(shí)踐能力,為將來(lái)實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。73.23.2 可行性研究前提可行性研究前提基本需求基本需求: :系統(tǒng)開(kāi)發(fā)的總體任務(wù)是實(shí)現(xiàn)游戲的可操作性、美觀性、及時(shí)性,及適當(dāng)?shù)墓δ軘U(kuò)展。主要開(kāi)發(fā)目標(biāo)主要開(kāi)發(fā)目標(biāo): :采用結(jié)構(gòu)化設(shè)計(jì)方法,開(kāi)發(fā)出一個(gè)可操作性、美觀性、及時(shí)性的游戲,并通過(guò)此次軟件開(kāi)發(fā)過(guò)程全面提高自身的綜合素質(zhì)??尚行匝芯克捎玫姆椒ê筒襟E可行性研究所采用的方法和步驟: :通過(guò)研究分析俄羅斯方塊所具備的能力及實(shí)現(xiàn)的方法、確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達(dá)到的能力,以最簡(jiǎn)潔、最容易的辦法,邊開(kāi)發(fā)邊測(cè)試邊修改,實(shí)現(xiàn)一個(gè)有一定可玩性的游戲軟件。評(píng)價(jià)尺度:本游戲盡量追

34、求游戲操作的合理性及正確性,但是仍不排除會(huì)出現(xiàn)一些偶然性的錯(cuò)誤;同時(shí)游戲也盡量追求界面的美觀性及功能的豐富性,但是基于時(shí)間的關(guān)系,可能會(huì)有極少數(shù)的拓展功能不能實(shí)現(xiàn)。3.33.3 可行性分析可行性分析管理可行性管理可行性: : 本游戲設(shè)計(jì)的目的只在于提高自身實(shí)踐水平,并不對(duì)外發(fā)布,因此完全具有管理可行性。經(jīng)濟(jì)可行性經(jīng)濟(jì)可行性: :由于本游戲的主要背景是畢業(yè)課程設(shè)計(jì),不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)電腦便可,所以不用考慮到經(jīng)濟(jì)問(wèn)題。技術(shù)可行性技術(shù)可行性: :可用與本游戲的編程語(yǔ)言有VB,VC,Java,Delphi等,考慮到用于

35、編寫程序的困難度,和對(duì)語(yǔ)言的了解程度,選擇JAVA作為編程語(yǔ)言。需要對(duì)圖形界面設(shè)計(jì)、事件處理、多媒體、網(wǎng)絡(luò)編程等有一定了解。社會(huì)可行性社會(huì)可行性: :本游戲的開(kāi)發(fā)作為畢業(yè)課程設(shè)計(jì)以鞏固先前所學(xué)的知識(shí),以個(gè)人為單位,僅供個(gè)人平常娛樂(lè)所用,無(wú)須考慮有可能造成的社會(huì)影響,不用考慮到法律、版權(quán)等的社會(huì)因素,所以在這方面是完全可行的。3.43.4 結(jié)論結(jié)論綜上所述,本游戲軟件的技術(shù)成熟、完備。各方面均無(wú)重大問(wèn)題,因此本游戲軟件可開(kāi)始著手編寫8第第4章章 俄羅斯方塊游戲的設(shè)計(jì)俄羅斯方塊游戲的設(shè)計(jì)這一章是俄羅斯方塊游戲的設(shè)計(jì),從系統(tǒng)需求分析開(kāi)始,介紹開(kāi)發(fā)環(huán)境和用到的開(kāi)發(fā)工具,系統(tǒng)主要的功能設(shè)計(jì),系統(tǒng)的數(shù)據(jù)流

36、程圖。4.14.1游戲功能需求游戲功能需求4.1.1游戲界面需求游戲界面需求良好的用戶界面設(shè)計(jì)。本游戲主要有三個(gè)界面,一是用于主游戲區(qū)的游戲畫布,用來(lái)顯示游戲時(shí)運(yùn)動(dòng)和落下去的方塊,二是用于控制游戲的各種控件以及顯現(xiàn)游戲信息的一些組件,這是一個(gè)面板,三是進(jìn)行網(wǎng)絡(luò)對(duì)戰(zhàn)時(shí)用以顯示對(duì)方游戲信息的面板。94.1.2游戲控制需求游戲控制需求方塊下落時(shí),可通過(guò)鍵盤方向鍵(上、下、左、右鍵)對(duì)該方塊進(jìn)行向上(變形),向下(加速)、向左、向右移動(dòng)。4.1.3圖形顯示需求圖形顯示需求隨機(jī)給出不同的形狀(長(zhǎng)條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當(dāng)達(dá)到一定的

37、分?jǐn)?shù)時(shí),過(guò)關(guān),一共設(shè)置十關(guān),每關(guān)方塊下落的速度不同,游戲中方塊碰到頂部則游戲結(jié)束。4.1.4音樂(lè)播放需求音樂(lè)播放需求本游戲,具備播放背景音樂(lè)效果。4.24.2 運(yùn)行環(huán)境及系統(tǒng)性能的需求運(yùn)行環(huán)境及系統(tǒng)性能的需求本游戲?qū)\(yùn)行環(huán)境及系統(tǒng)性能的需求如表3.2所示:表4.2 游戲?qū)\(yùn)行環(huán)境及系統(tǒng)性能需求分析表操作系統(tǒng)Windows98/me/2000/XP/2003內(nèi)存容量64MB顯卡要求8M聲卡要求支持DirectX 8.0 聲卡交互工具鍵盤/鼠標(biāo)CPU奔騰133以上光驅(qū)8倍速以上硬盤空間400MB顯示器VGA以上顯示器開(kāi)發(fā)及運(yùn)行軟件JDK1.5以上版本 4.34.3 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)3.3.1音效播

38、放控制模塊設(shè)計(jì)本游戲的音效播放采用剪輯及多線程的方式實(shí)現(xiàn)。音頻播放需要用到JAVA中的sound包。首先,利用AudioSystem這個(gè)音頻工廠的getAudioInputstream()方法從音頻文件中取得一個(gè)音頻輸入流,其次,從這個(gè)音頻輸入流創(chuàng)建一個(gè)Clip,10然后打開(kāi)這個(gè)Clip。這樣,當(dāng)需要時(shí),就可以利用Clip中的start()方法播放這個(gè)剪輯,重復(fù)播放,可以用setFramePosition(0)這個(gè)方法將剪輯的位置重新置為0。音效剪輯的播放控制流程圖如圖3.3所示:圖4.3 音效播放流程圖4.3.2背景音樂(lè)播放控制模塊設(shè)計(jì)同音效的播放,背景音樂(lè)的播放也應(yīng)當(dāng)采用剪輯的形式,以方便

39、音樂(lè)的循環(huán)多次播放,同樣,背景音樂(lè)播放也要單獨(dú)的線程進(jìn)行控制。前面概要設(shè)計(jì)提出了一個(gè)問(wèn)題。因?yàn)楸尘耙魳?lè)采用單獨(dú)線程播放,當(dāng)用戶選擇暫停背景音樂(lè)播放時(shí),背景音樂(lè)播放線程如果以進(jìn)入wait狀態(tài)來(lái)暫停的話,則當(dāng)用戶取消暫停時(shí)必須還需要一個(gè)線程來(lái)喚醒它,額外增加一個(gè)線程的話,不免浪費(fèi)系統(tǒng)資源,而且也會(huì)增加編寫的難度。從另一個(gè)角度來(lái)說(shuō),背景音樂(lè)極可能在玩家的整個(gè)游戲過(guò)程中都處在播放狀態(tài),當(dāng)暫停時(shí),玩家也隨時(shí)會(huì)取消暫停,因此,可以讓背景音樂(lè)線程從游戲開(kāi)始后就一直處在執(zhí)行狀態(tài),如果用戶暫停播放,可以讓線程轉(zhuǎn)去循環(huán)處理檢測(cè)用戶是否取消暫停,當(dāng)檢測(cè)到用戶取消暫停時(shí),繼續(xù)播放音樂(lè)。背景音樂(lè)播放控制的算法流程如圖3

40、.4所示:Notify音效播放線程,游戲線程進(jìn)入wait狀態(tài)播放音效Notify游戲線程,音效播放線程進(jìn)入wait狀態(tài)滿足音效播放條件開(kāi)始結(jié)束11圖4.4 背景音樂(lè)播放控制流程圖4.3.3旋轉(zhuǎn)方塊的設(shè)計(jì)旋轉(zhuǎn)方塊的出現(xiàn)是隨機(jī)的,而隨著游戲級(jí)別的提升,每一關(guān)出現(xiàn)的旋轉(zhuǎn)方塊的數(shù)量也會(huì)不同,對(duì)于七種方塊來(lái)說(shuō),它們?cè)谌魏我欢螘r(shí)間內(nèi)出現(xiàn)的概率都是一致的,再者,旋轉(zhuǎn)方塊需要兩個(gè)定時(shí)器,定時(shí)下落和定時(shí)旋轉(zhuǎn)。旋轉(zhuǎn)方塊的這個(gè)性質(zhì)要求它必須要兩個(gè)線程才能控制,但是為了充分利用資源,我們可以利用方塊控制線程去控制旋轉(zhuǎn)方塊定時(shí)下落,然后只需再創(chuàng)建一個(gè)線程控制它定時(shí)旋轉(zhuǎn)即可。確定了兩個(gè)線程共同控制旋轉(zhuǎn)方塊,就會(huì)出現(xiàn)一個(gè)線

41、程協(xié)調(diào)工作的問(wèn)題。如果一個(gè)新方塊出現(xiàn)的時(shí)機(jī)正好也是旋轉(zhuǎn)方塊出現(xiàn)的時(shí)機(jī),程序就會(huì)出現(xiàn)紊亂,所以必須保證,在同一時(shí)間,正常方塊和旋轉(zhuǎn)方塊只能出現(xiàn)一個(gè)。因?yàn)閮蓚€(gè)線程需要共同控制旋轉(zhuǎn)方塊,所以不能用wait()和notify()這兩個(gè)方法去協(xié)調(diào)線程,而應(yīng)當(dāng)利用其它條件去協(xié)調(diào)兩個(gè)線程。首先,游戲開(kāi)始后,旋轉(zhuǎn)方塊控制線程可以隨機(jī)休眠一定時(shí)間(這個(gè)休眠時(shí)間應(yīng)該是隨著游戲級(jí)別的提升而縮短的)。休眠時(shí)間結(jié)束后,循環(huán)檢測(cè)正常方塊是否已經(jīng)落下,當(dāng)檢測(cè)到方塊落下后,馬上得到一個(gè)新方塊,然后開(kāi)啟一個(gè)循環(huán),在方塊沒(méi)有落下之前讓它按一定的時(shí)間頻率旋轉(zhuǎn),成為一個(gè)旋轉(zhuǎn)方塊。對(duì)于方塊控制線程,在方塊落下時(shí)應(yīng)該休眠一定數(shù)量的時(shí)間,

42、以讓旋轉(zhuǎn)方塊控制線程有得到旋轉(zhuǎn)方塊的機(jī)會(huì),如果超出這個(gè)休眠時(shí)間,旋轉(zhuǎn)方塊控制線程還播放背景音樂(lè)背景音樂(lè)播放控制線程否暫停播放接受到暫停信息是否處在暫停狀態(tài)是是否接受到恢復(fù)信息是否結(jié)束開(kāi)始12沒(méi)有得到新方塊,則可以認(rèn)為旋轉(zhuǎn)方塊控制線程還處在休眠中,方塊控制線程得到一個(gè)新方塊。相應(yīng)的算法流程如圖4.6和圖4.7所示:休眠時(shí)間結(jié)束隨機(jī)休眠一定時(shí)間檢測(cè)現(xiàn)有方塊是否已經(jīng)落下是否能夠消行方塊是否已經(jīng)落下是否能夠消行休眠一定時(shí)間否是得到新方塊休眠一定時(shí)間旋轉(zhuǎn)方塊否是游戲是否結(jié)束是否能夠消行是否開(kāi)始結(jié)束圖4.6 旋轉(zhuǎn)方塊控制線程工作圖4.3.3方塊的翻轉(zhuǎn)與移動(dòng)方塊的翻轉(zhuǎn)與移動(dòng)比較容易實(shí)現(xiàn),方塊移動(dòng)只需要改變方

43、塊的橫坐標(biāo)或縱坐標(biāo),然后重新繪制方塊即可。方塊翻轉(zhuǎn)也只需要改變方塊數(shù)據(jù)第二維turnstate的值,然后重新繪制方塊即可。但是,這里邊也會(huì)出現(xiàn)一個(gè)問(wèn)題,這何種時(shí)候,方塊不能再翻轉(zhuǎn)和移動(dòng)?4.3.4方塊的移動(dòng)很顯然,當(dāng)方塊移動(dòng)到地圖的左右邊界處,或者落下去后,不能再繼續(xù)移動(dòng)13;另一種情況就是,當(dāng)方塊要移動(dòng)的方向被其他方塊擋住時(shí),方塊不能再移動(dòng)。確定方塊移動(dòng)的規(guī)則后,接下來(lái)就是如何將這種規(guī)則用算法表示的問(wèn)題了。比如,當(dāng)方塊移動(dòng)的左邊界處時(shí),方塊不能再繼續(xù)往左移動(dòng)了,這個(gè)時(shí)候,肯定有一個(gè)條件成立,那就是方塊的橫坐標(biāo)必定是小于或者等于零的。如果方塊的橫坐標(biāo)等于0,方塊就不能再移動(dòng),那么方塊數(shù)組的第一

44、列至少有一個(gè)值為1,這種情況比較簡(jiǎn)單,但是,如果方塊數(shù)組的第一列全為0時(shí),也就是說(shuō),當(dāng)方塊數(shù)組有1的那列碰到邊界時(shí),方塊才不能移動(dòng),這個(gè)時(shí)候,首次出現(xiàn)1的那列的橫坐標(biāo)為0,而方塊數(shù)組的橫坐標(biāo)肯定已經(jīng)小于0了。假定我們以x記錄方塊數(shù)組的橫坐標(biāo),以j記錄方塊不能移動(dòng)時(shí),方塊數(shù)組中首次出現(xiàn)1的那列,當(dāng)方塊不能移動(dòng)時(shí),x+j的值必定是等于0的。同理,當(dāng)方塊到達(dá)右邊界不能移動(dòng)時(shí),我們可以從方塊數(shù)組的右邊開(kāi)始檢測(cè),記錄下首先出現(xiàn)1的那列的值,這個(gè)時(shí)候,x+j一定是等于14的。當(dāng)方塊落下后,方塊同樣不能再移動(dòng)。這又分為兩種情況,一種是要墜下的地方還沒(méi)有方塊,這個(gè)時(shí)候,只要可以記錄下方塊數(shù)組中最后出現(xiàn)1的那一

45、行,假定那是第i行,這樣,只要y+i等于24,就可以認(rèn)定方塊已經(jīng)落到游戲地圖的底部,不能再繼續(xù)下落。當(dāng)要方塊下邊或者左右有方塊時(shí),可以確定下邊有方塊的那一格在游戲地圖中的縱坐標(biāo)是橫坐標(biāo)或縱坐標(biāo)是x+j+1或者y+i+1,假定那一格的縱坐標(biāo)坐標(biāo)或者橫坐標(biāo)為y或x,那么游戲地圖數(shù)組中x+j+1y或者xy+i+1這個(gè)元素的值必定是2。綜合以上幾種情況,我們可以列出方塊移動(dòng)條件判定表,如表5.1所示:表 4.1 方塊移動(dòng)條件判定表12345678是否有阻隔TTTTTTTFx+j=0|gameareay+ix+j+1=2TFTTTFTx+j=14|gameareay+ix+j-1=2FTFTFTT條件y

46、+i=24|gameareay+i+1x+j=2FFFFTTT左移動(dòng)右移動(dòng)動(dòng)作下移動(dòng)4.3.4方塊的翻轉(zhuǎn)大多數(shù)的俄羅斯方塊游戲的翻轉(zhuǎn)判定條件都比較簡(jiǎn)單,即方塊處在邊界處時(shí)就不能再翻轉(zhuǎn),因?yàn)檫@種時(shí)候翻轉(zhuǎn)會(huì)發(fā)生數(shù)組越界錯(cuò)誤。試想一下,當(dāng)方塊移動(dòng)到邊界處,甚至還沒(méi)有到邊界處時(shí),就不能再翻轉(zhuǎn)了,無(wú)疑會(huì)給操作帶來(lái)大大地不方便性。方塊翻轉(zhuǎn)的另一個(gè)問(wèn)題就是,當(dāng)方塊下落過(guò)程中,左右兩邊都有方塊,周圍的空間不能再容許它翻轉(zhuǎn),往往很多游戲沒(méi)有注意到這一點(diǎn),這就導(dǎo)致,方塊翻轉(zhuǎn)之后把原來(lái)存在的方塊給擠掉了,這個(gè)問(wèn)題本質(zhì)上也是翻轉(zhuǎn)越界。為了解決以上問(wèn)題,游戲設(shè)計(jì)中應(yīng)該增加一個(gè)對(duì)于方塊能否翻轉(zhuǎn)的判定以及翻轉(zhuǎn)越界糾正功能。

47、141方塊翻轉(zhuǎn)判定如上所述,在兩種情況下一種是方塊落下去固定住以后,第二種是周圍的空間不允許它進(jìn)行翻轉(zhuǎn)。第一種情況好辦,只要參考方塊落下去后不能夠再移動(dòng)的判定即可。對(duì)于第二種情況,在每次方塊翻轉(zhuǎn)前,必須首先計(jì)算出方塊周圍的空間,如果空間允許則翻轉(zhuǎn),否則,不能翻轉(zhuǎn)。這里面又出現(xiàn)一個(gè)棘手的問(wèn)題,因?yàn)槠叻N方塊是不規(guī)則的,每種方塊要求的翻轉(zhuǎn)空間都是不一樣的,甚至是在它的不同翻轉(zhuǎn)狀態(tài)下,所要求的翻轉(zhuǎn)空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫一個(gè)判定條件,然后根據(jù)當(dāng)前的blocktype和turnstate值,選擇哪種判定條件進(jìn)行判定,但是這樣做未免過(guò)于麻煩。根據(jù)觀察,不難發(fā)現(xiàn)

48、,七種形態(tài)的方塊,長(zhǎng)條形的方塊如果以橫條的形態(tài)下落,則只有能夠下落,就能翻轉(zhuǎn),如果以豎條的形態(tài)下落,那么它翻轉(zhuǎn)后所處的位置必須要有4x1個(gè)格子的空間才能夠翻轉(zhuǎn);對(duì)于田字形的方塊,只有能夠繼續(xù)下墜,就一定能夠翻轉(zhuǎn),所以田子型的方塊只要沒(méi)有落下,就一直能夠翻轉(zhuǎn);而其它五種形態(tài)的方塊,又有一個(gè)共同點(diǎn),就是它們都有兩種翻轉(zhuǎn)狀態(tài)橫向占三個(gè)格子的空間,豎直方向占兩個(gè)空間,另外兩種翻轉(zhuǎn)狀態(tài)橫向占兩個(gè)格子的空間,豎直方向占三個(gè)格子空間,如果他們是以橫向占三個(gè)格子的狀態(tài)下落,那么只要能下落,就一定能夠翻轉(zhuǎn),如果是以橫向兩個(gè)格子的狀態(tài)下落,那么在翻轉(zhuǎn)后,周圍必須要有3x2個(gè)格子的空間。所以,方塊翻轉(zhuǎn)的判定,要分三

49、種情況。第一種情況是方塊落下去后不能翻轉(zhuǎn);第二種情況是對(duì)豎直狀態(tài)出現(xiàn)的長(zhǎng)條形的方塊進(jìn)行翻轉(zhuǎn)判定;第三種情況是對(duì)除長(zhǎng)條形和田字形之外的其它五種以橫向占兩個(gè)格子的狀態(tài)出現(xiàn)的方塊進(jìn)行翻轉(zhuǎn)判定。何種情況下方塊能夠翻轉(zhuǎn)的問(wèn)題解決了,接下來(lái),我們就應(yīng)該解決方塊翻轉(zhuǎn)后所處的位置的問(wèn)題了,因?yàn)橹挥惺孪戎婪綁K翻轉(zhuǎn)后所處的位置,才能夠?qū)δ莻€(gè)位置的空間范圍進(jìn)行判定,判定它是否能夠容納方塊??梢源_定的是,無(wú)論方塊怎么翻轉(zhuǎn),都處在方塊數(shù)組中,也就是說(shuō)方塊必定是在游戲地圖中某一4x4個(gè)格子的空間范圍內(nèi)。方塊數(shù)組在游戲地圖中的坐標(biāo)是確定的,不確定的是方塊翻轉(zhuǎn)后到底處在方塊數(shù)組的哪個(gè)位置,為了解決這個(gè)問(wèn)題,我們可以限定方塊

50、在方塊數(shù)組中的存儲(chǔ)原則是靠左、靠上,這樣,無(wú)論翻轉(zhuǎn)怎么翻轉(zhuǎn),方塊數(shù)組中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數(shù)組中的位置,也就可以得知方塊翻轉(zhuǎn)后在游戲地圖中的位置了。假定方塊數(shù)組的橫縱坐標(biāo)是x和y,那么,這個(gè)位置就是,長(zhǎng)條形的方塊翻轉(zhuǎn)后所處的那一行是游戲地圖的第y行,所占的列是第x到x+3列,長(zhǎng)條形和田字形以外的五種方塊翻轉(zhuǎn)后的所占的行數(shù)是游戲地圖的第y和第y+1行,所占的列是第x到x+2列。所以,如果以上空間有空格子,方塊就能夠翻轉(zhuǎn)。據(jù)此,我們可以列出方塊翻轉(zhuǎn)的條件判定表,如表4.2所示:15表4.2 方塊翻轉(zhuǎn)條件判定表2翻轉(zhuǎn)越界糾正由上述判定表可以看出,只要方塊翻轉(zhuǎn)后所處的空

51、間足夠,方塊就能夠翻轉(zhuǎn),但是,如果方塊翻轉(zhuǎn)后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢?比如,一個(gè)方塊在它左邊正好差一個(gè)格子的空間才能夠翻轉(zhuǎn),但是它的右邊恰好有一個(gè)格子的空間,這種情況,如果方塊不能夠翻轉(zhuǎn),就不方便用戶操作,如果能夠翻轉(zhuǎn),就會(huì)發(fā)生越界,將已經(jīng)存在的方塊擠占掉。要想實(shí)現(xiàn)翻轉(zhuǎn)又不發(fā)生越界,那么,就應(yīng)該在方塊翻轉(zhuǎn)后把它往右邊移動(dòng)一個(gè)格子,然后再繪制方塊,這樣,方塊就不會(huì)擠占掉其它已經(jīng)固定住的方塊了。同樣,方塊在邊界處時(shí),翻轉(zhuǎn)后不僅可能翻出地圖外,還可能發(fā)生數(shù)組越界,當(dāng)然,只需要將地圖數(shù)組定義得大一些,就能夠避免數(shù)組越界錯(cuò)誤,對(duì)于方塊越界,如果在它的另一邊有足夠空間,那么,就應(yīng)該

52、把方塊往另一個(gè)方向移動(dòng)適當(dāng)?shù)膯挝?,糾正方塊越界錯(cuò)誤。結(jié)合上述判定表,可以列出方塊翻轉(zhuǎn)-越界糾正判定表,如表4.3所示:3.3.5滿行消除JAVA圖形類中提供了一個(gè)方法,copyArea(int x, int y, int width, int height, int dx, int dy),這個(gè)方法的作用是將組建的某一區(qū)域復(fù)制到由dx和dy指定的水平距離和垂直距離所在的區(qū)域。利用這個(gè)方法,可以消除滿行。12345678落下TFFFFFFF田字形方塊T 1x4形態(tài)TT長(zhǎng)條形方塊4x1形態(tài)T2x3形態(tài)TT其它五種方塊3x2形態(tài)T第y行, x、x+3列空TF所有條件第y、y+1行x、x+2列空TF翻

53、轉(zhuǎn) 所有動(dòng)作不能翻轉(zhuǎn)16那么,當(dāng)方塊落下去后,如何判斷有行需要消除呢?如概要設(shè)計(jì)中所述,游戲地圖中有方塊的區(qū)域可以用2表示,當(dāng)方塊落下去后,判斷某一行是否全部為2,如果全為2,即表示這一行已滿,需要消除,這個(gè)時(shí)候,就可以利用copyArea這個(gè)方法將這一行消去了。消去一行后,要繼續(xù)向下檢測(cè),如果下一行是滿行,消除,否則再往下檢測(cè),一直將落下的方塊所占的行數(shù)全部檢測(cè)完為止。假定,以豎直狀態(tài)落下一個(gè)長(zhǎng)條形的方塊,很顯然,方塊一共占據(jù)了四行。這時(shí)候,應(yīng)該從長(zhǎng)條形的方塊占據(jù)的第一行開(kāi)始檢測(cè),不管期間是否有消行,都必須將長(zhǎng)條形的方塊所占據(jù)的四行全部檢測(cè)完為止。并且記錄下消去的行數(shù),方塊消行完成后,增加相

54、應(yīng)積分。但是,這里面又會(huì)遇到一個(gè)問(wèn)題,因?yàn)椴⒉皇撬蟹綁K所占的行數(shù)都一樣,方塊落下后到底該檢測(cè)多少行呢?考慮到方塊落下后最多占據(jù)四行,以及計(jì)算機(jī)運(yùn)算的高速性,可以設(shè)定每一次方塊落下后都往下檢測(cè)四行。方塊消行的流程圖如圖4.13所示:方塊落下是否有消行否檢測(cè)第一行檢測(cè)第二行消去該行是是否有消行消去該行檢測(cè)第三行是否有消行檢測(cè)第四行消去該行否是消去該行是否有消行否是統(tǒng)計(jì)所消行數(shù),增加相應(yīng)積分結(jié)束開(kāi)始圖4.13 方塊消行流程圖17表4.3 方塊翻轉(zhuǎn)-越界糾正判定表方塊翻轉(zhuǎn)處理的流程圖如圖4.12所示:落下TFFFFFFFFFF田字形方塊T 1x4形態(tài)TTTT長(zhǎng)條形方塊4x1形態(tài)T2x3形態(tài)TTTT其

55、它五種方塊3x2形態(tài)第y行, x、x+3列空TFFF第y、y+1行x、x+2列空TFFF所有條件另一邊有足夠空間TFTF翻轉(zhuǎn) 不能翻轉(zhuǎn)所有動(dòng)作翻轉(zhuǎn)越界糾正 18接收到翻轉(zhuǎn)信息方塊是否落下不能翻轉(zhuǎn)否是翻轉(zhuǎn)后是否有足夠空間不能翻轉(zhuǎn)否是翻轉(zhuǎn)后是否越界否直接翻轉(zhuǎn)翻轉(zhuǎn)越界糾正是結(jié)束結(jié)束圖4.12 方塊翻轉(zhuǎn)處理流程圖19休眠一定時(shí)間,讓旋轉(zhuǎn)方塊控制線程有得到方塊的機(jī)會(huì)檢測(cè)方塊是否已經(jīng)落下是否能夠消行是休眠時(shí)間結(jié)束旋轉(zhuǎn)方塊控制線程是否得到新方塊是否能夠消行是否否得到新方塊方塊下落開(kāi)始結(jié)束圖4.7 方塊控制線程對(duì)旋轉(zhuǎn)方塊的控制示意圖20第第5章章 系統(tǒng)的具體實(shí)現(xiàn)系統(tǒng)的具體實(shí)現(xiàn)界面是系統(tǒng)之間最直接的交互界面,界

56、面的友好性體現(xiàn)了軟件設(shè)計(jì)的質(zhì)量, 并在很大程度上決定了軟件是否成功。5.15.1界面設(shè)計(jì)界面設(shè)計(jì)5.1.1用戶登陸界面圖用戶登陸界面圖成功界面:21登陸失敗界面:22如圖5.1.1和圖5.1.2所示用戶信息輸入信息是否合法用戶登錄到主界面是彈出錯(cuò)誤信息否輸入登錄界面自動(dòng)跳轉(zhuǎn)驗(yàn)證圖圖5.1.1 用戶登錄模塊框圖用戶登錄模塊框圖圖圖5.15.1 用戶登陸界面用戶登陸界面此JavaScript函數(shù)的作用是檢測(cè)用戶登陸的合法性,并確認(rèn)用戶輸入了合法的登錄名和口令。部分代碼:import java.awt.*;import java.awt.event.*;import javax.swing.*;23

57、import javax.swing.border.*;public class LoginIn extends JFrame JTextField f1; JTextField f2; JButton b1; JButton b2; String power;/表示權(quán)限 String imgePath = e:/workspace/GUI/14.gif; JPanel p5; Image img = Toolkit.getDefaultToolkit().createImage(imgePath); LoginIn() Container cp=getContentPane(); Label

58、 l1=new Label(用戶:); Label l2=new Label(密碼:); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p4=new JPanel(); p5=new JPanel() protected void paintChildren(Graphics g) g.drawImage(img,0,0,this); super.paintChildren(g); 24 ; f1=new JTextField(15); f2=new JPasswordField(1

59、5); b1=new JButton(登錄); b2=new JButton(重置); p1.setBackground(Color.orange); p2.add(l1); p2.add(f1); p2.setBorder(new MatteBorder(0,0,0,0,Color.BLACK); p2.setBackground(Color.ORANGE); p3.add(l2); p3.add(f2); p3.setBackground(Color.ORANGE); p3.setBorder(new MatteBorder(0,0,0,0,Color.BLACK); p4.add(b1)

60、; p4.add(b2); p4.setBorder(new MatteBorder(-3,-3,-3,-3,Color.CYAN); p4.setBackground(Color.ORANGE); p5.setLayout(new FlowLayout(FlowLayout.CENTER,20,20); p5.add(p2); p5.add(p3); p5.add(p4); cp.add(p5,BorderLayout.CENTER); b1.addActionListener(new Enter(); b2.addActionListener(new ReWrite(); addWindowListener(n

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論