項(xiàng)目開(kāi)設(shè)計(jì)(俄羅斯方塊)_第1頁(yè)
項(xiàng)目開(kāi)設(shè)計(jì)(俄羅斯方塊)_第2頁(yè)
項(xiàng)目開(kāi)設(shè)計(jì)(俄羅斯方塊)_第3頁(yè)
項(xiàng)目開(kāi)設(shè)計(jì)(俄羅斯方塊)_第4頁(yè)
項(xiàng)目開(kāi)設(shè)計(jì)(俄羅斯方塊)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、俄羅斯方塊游戲JAVA版項(xiàng)目開(kāi)發(fā)設(shè)計(jì)文檔Ver 1.0編制:駱華 審核:2014年8月1、 項(xiàng)目介紹俄羅斯方塊是一款風(fēng)靡全球的掌上游戲機(jī)和PC機(jī)游戲, 它造成的轟動(dòng)與制造的經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上的一件大事。它由俄羅斯人阿列克謝帕基特諾夫在1984年6月利用空閑時(shí)間所編寫(xiě)的游戲程序,故得此名。俄羅斯方塊的基本規(guī)章是移動(dòng)、旋轉(zhuǎn)和擺放游戲自動(dòng)輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。它看似簡(jiǎn)潔卻變化無(wú)窮,俄羅斯方塊上手極其簡(jiǎn)潔,但是要嫻熟地掌握其中的操作與擺放技巧,難度卻不低。作為家喻戶(hù)曉老少皆宜的大眾游戲,其普及程度可以說(shuō)是史上任何一款游戲都無(wú)法相比的。信任大多數(shù)人都還記得為它癡迷

2、得茶不思飯不想的那個(gè)俄羅斯方塊的時(shí)代。由于俄羅斯方塊具有的教學(xué)性、動(dòng)態(tài)性與知名度,也常常拿來(lái)作為游戲程序設(shè)計(jì)的練習(xí)題材。2、 項(xiàng)目需求 (一) 功能需求運(yùn)行游戲后,可選擇游戲難度,游戲開(kāi)頭后,由程序隨機(jī)產(chǎn)生所定義的圖形,右上角可看到下一個(gè)圖形,無(wú)操作時(shí),方塊豎直緩慢下落,圖形在接觸障礙物之前,可以由鍵盤(pán)掌握向左右下移動(dòng),可通過(guò)空格鍵進(jìn)行翻轉(zhuǎn),可以進(jìn)行暫停、重新開(kāi)頭游戲,當(dāng)某一行被下落的方塊填滿(mǎn)后消除并計(jì)分,難度越大方塊下落速度相對(duì)提高,另外可修改游戲窗體風(fēng)格。(二) 性能需求1、游戲在不同分辨率下應(yīng)能適應(yīng)各種分辨率保證不變形。2、保證游戲性能,在雙核512M內(nèi)存下應(yīng)能流暢運(yùn)行。3、 涉及主要知

3、識(shí)點(diǎn) (一)、開(kāi)發(fā)環(huán)境搭建與配置1、jdk安裝配置2、eclipse安裝配置 (二)、界面布局1、AWT、Swing 2、菜單使用 (三)、游戲方塊 整個(gè)游戲中總共7種方塊樣式,每個(gè)方塊有4種變形,通過(guò)線(xiàn)程掌握由4 * 4 個(gè)方格構(gòu)成的一個(gè)方塊的移動(dòng)、下落以及變形。(四)、游戲畫(huà)布 通過(guò)線(xiàn)程動(dòng)態(tài)轉(zhuǎn)變游戲畫(huà)布的方格顏色,畫(huà)布通過(guò)檢查方格顏色來(lái)體現(xiàn)方塊的移動(dòng) (五)、大事 鍵盤(pán)監(jiān)聽(tīng)大事 (六)、線(xiàn)程 整個(gè)游戲由線(xiàn)程掌握,一輪游戲過(guò)程,實(shí)現(xiàn)了Runnable接口,一輪游戲是一個(gè)大循環(huán),在這個(gè)循環(huán)中,每隔100毫秒;檢查游戲中的當(dāng)前塊是否已經(jīng)到底了,如果沒(méi)有,就連續(xù)等待。如果到底了,就看有沒(méi)有全填滿(mǎn)的

4、行,如果有就刪除它,并為游戲者加分,同時(shí)隨機(jī)產(chǎn)生一新的當(dāng)前塊,讓它自動(dòng)下落。當(dāng)新產(chǎn)生一個(gè)塊時(shí),先檢查畫(huà)布最頂上的一行是否已經(jīng)被占了,如果是,可以推斷Game Over了。 4、 概要設(shè)計(jì)(接受開(kāi)發(fā)模式、框架、模塊劃分、模塊之間通訊設(shè)計(jì)等,本項(xiàng)目無(wú))5、 數(shù)據(jù)庫(kù)設(shè)計(jì) (概念數(shù)據(jù)模型、物理數(shù)據(jù)模型、表、字段、約束、存儲(chǔ)過(guò)程、函數(shù)、視圖等,本項(xiàng)目無(wú))6、 界面設(shè)計(jì)本游戲只包含1個(gè)主界面 游戲菜單下包括開(kāi)頭新游戲、設(shè)置游戲方塊顏色、設(shè)置背景顏色、轉(zhuǎn)變游戲難度等。掌握菜單下包括游戲的暫停、連續(xù)、重新開(kāi)頭以及停止。窗體風(fēng)格菜單下用來(lái)設(shè)置游戲窗體風(fēng)格。關(guān)于菜單下包括幫助和游戲簡(jiǎn)介7、 類(lèi)設(shè)計(jì)本項(xiàng)目包含Ers

5、Block、ErsBlocksGame、ControlPanel、ErsBox 以及GameCanvas 5個(gè)類(lèi),簡(jiǎn)略設(shè)計(jì)如下:(一)ErsBlock類(lèi) 該類(lèi)的主要功能為設(shè)計(jì)游戲方塊類(lèi),繼承自線(xiàn)程類(lèi)(Thread),由 4 * 4 個(gè)方格(ErsBox)構(gòu)成一個(gè)塊,掌握塊的移動(dòng)、下落、變形等。 (二)ErsBlocksGame類(lèi)該類(lèi)的主要功能為游戲主類(lèi),繼承自JFrame類(lèi),負(fù)責(zé)游戲的全局掌握。內(nèi)含 1一個(gè)GameCanvas畫(huà)布類(lèi)的實(shí)例引用, 2一個(gè)保存當(dāng)前活動(dòng)塊(ErsBlock)實(shí)例的引用,3一個(gè)保存當(dāng)前掌握面板(ControlPanel)實(shí)例的引用; 利用線(xiàn)程實(shí)現(xiàn)了一輪游戲過(guò)程,一輪游

6、戲是一個(gè)大循環(huán),在這個(gè)循環(huán)中,每隔100毫秒,檢查游戲中的當(dāng)前塊是否已經(jīng)到底了,如果沒(méi)有,就連續(xù)等待。如果到底了,就看有沒(méi)有全填滿(mǎn)的行,如果有就刪除它,并為游戲者加分,同時(shí)隨機(jī)產(chǎn)生一個(gè)新的當(dāng)前塊,讓它自動(dòng)下落。當(dāng)新產(chǎn)生一個(gè)塊時(shí),先檢查畫(huà)布最頂上的一行是否已經(jīng)被占了,如果是,可以推斷Game Over了。(三)ControlPanel類(lèi)該類(lèi)的主要功能掌握面板類(lèi),繼承自JPanel.上邊安放預(yù)顯窗口、等級(jí)、得分、掌握按鈕,主要用來(lái)掌握游戲進(jìn)程。(四)ErsBox類(lèi)該類(lèi)的主要功能是實(shí)現(xiàn)方格類(lèi),是組成塊的基本元素,用自己的顏色來(lái)表示塊的外觀 (五)GameCanvas類(lèi)該類(lèi)的主要功能是實(shí)現(xiàn)畫(huà)布類(lèi),內(nèi)有

7、行數(shù) * 列數(shù)個(gè)方格類(lèi)實(shí)例。繼承自JPanel類(lèi)。 ErsBlock線(xiàn)程類(lèi)動(dòng)態(tài)轉(zhuǎn)變畫(huà)布類(lèi)的方格顏色,畫(huà)布類(lèi)通過(guò)檢查方格顏色來(lái)體現(xiàn)ErsBlock塊的移動(dòng)情況。8、 技術(shù)難點(diǎn)、解決方案和關(guān)鍵代碼1、 游戲方塊的旋轉(zhuǎn)和移動(dòng)游戲中總共有7種方塊類(lèi)型,每種方塊有4種翻轉(zhuǎn),因此我們?cè)诔绦蛑欣命c(diǎn)陣圖,把4位16進(jìn)制數(shù)按每位換算成一行4位2進(jìn)制數(shù)的結(jié)果矩陣,理解為一個(gè)4*4的矩陣,比如說(shuō)0x04e0轉(zhuǎn)換完后就是0000010011100000其中將0看作空的,1看作方塊的塊,就可以看出正好是長(zhǎng)條形在4*4空間中的橫豎切換/* * 方塊的樣式數(shù)目為7 */private final static int B

8、LOCK_KIND_NUMBER = 7;/* * 每一個(gè)樣式的方塊的反轉(zhuǎn)狀態(tài)種類(lèi)為4 */private final static int BLOCK_STATUS_NUMBER = 4;/* * 分別對(duì)應(yīng)對(duì)7種模型的28種狀態(tài) */public final static int STYLES = / 共28種狀態(tài)0x0f00, 0x4444, 0x0f00, 0x4444, / 長(zhǎng)條型的四種狀態(tài)0x04e0, 0x0464, 0x00e4, 0x04c4, / T型的四種狀態(tài)0x4620, 0x6c00, 0x4620, 0x6c00, / 反Z型的四種狀態(tài)0x2640, 0xc600,

9、0x2640, 0xc600, / Z型的四種狀態(tài)0x6220, 0x1700, 0x2230, 0x0740, / 7型的四種狀態(tài)0x6440, 0x0e20, 0x44c0, 0x8e00, / 反7型的四種狀態(tài)0x0660, 0x0660, 0x0660, 0x0660, / 方塊的四種狀態(tài);方塊的移動(dòng)分為向左、右和下3個(gè)方向,/* * 塊向左移動(dòng)一格 */public void moveLeft() moveTo(y, x - 1);/* * 塊向右移動(dòng)一格 */public void moveRight() moveTo(y, x + 1);/* * 塊向下落一格 */public

10、void moveDown() moveTo(y + 1, x);/* * 將當(dāng)前畫(huà)移動(dòng)到newRow/newCol所指定的位置 * param newRow int, 目的地所在行 * param newCol int, 目的地所在列 * return boolean, true-移動(dòng)成功,false-移動(dòng)失敗 */private synchronized boolean moveTo(int newRow, int newCol) if (!isMoveAble(newRow, newCol) | !moving) return false;earse();y = newRow;x = n

11、ewCol;display();canvas.repaint();return true;對(duì)于方塊的翻轉(zhuǎn),/* * 塊變型 */public void turnNext() for (int i = 0; i BLOCK_KIND_NUMBER; i+) for (int j = 0; j BLOCK_STATUS_NUMBER; j+) if (STYLESij = style) int newStyle = STYLESi(j + 1) % BLOCK_STATUS_NUMBER;turnTo(newStyle);return;/* * 將當(dāng)前塊變成newStyle所指定的塊樣式 * pa

12、ram newStyle int,將要轉(zhuǎn)變成的塊樣式,對(duì)應(yīng)STYLES的28個(gè)值中的一個(gè) * return boolean,true-轉(zhuǎn)變成功,false-轉(zhuǎn)變失敗 */private boolean turnTo(int newStyle) if (!isTurnAble(newStyle) | !moving) return false;earse();int key = 0x8000;for (int i = 0; i boxes.length; i+) for (int j = 0; j = 1;style = newStyle;display();canvas.repaint();r

13、eturn true;2、 游戲中消行和結(jié)束如果游戲畫(huà)布中有全填滿(mǎn)的行,我們就應(yīng)該從畫(huà)布中刪除當(dāng)行,依據(jù)最頂行是否被占來(lái)推斷游戲是否結(jié)束。/* * 檢查畫(huà)布中是否有全填滿(mǎn)的行,如果有就刪除之 */public void checkFullLine() for (int i = 0; i canvas.getRows(); i+) int row = -1;boolean fullLineColorBox = true;for (int j = 0; j 0; i-) for (int j = 0; j cols; j+)boxesij = (ErsBox) boxesi - 1j.clone();score += ErsBlocksGame.PER_LINE_SCORE;scoreForLevelUpdate += ErsBlocksGame.PER_LINE_SCORE;repaint();/* * 依據(jù)最頂行是否被占,推斷游戲是否已經(jīng)結(jié)束了。 * return boolean, true-游戲結(jié)束了,false-游戲未結(jié)束 */private boolean isGameOver() for (int i = 0; i canvas.getCols(); i+) ErsBox box = canvas.get

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論