項(xiàng)目開設(shè)計(jì)(俄羅斯方塊).doc
《項(xiàng)目開設(shè)計(jì)(俄羅斯方塊).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《項(xiàng)目開設(shè)計(jì)(俄羅斯方塊).doc(15頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
俄羅斯方塊游戲JAVA版 項(xiàng)目開發(fā)設(shè)計(jì)文檔 Ver 1.0 編制:駱華 審核: 2014年8月 1、 項(xiàng)目介紹 俄羅斯方塊是一款風(fēng)靡全球的掌上游戲機(jī)和PC機(jī)游戲, 它造成的轟動(dòng)與創(chuàng)造的經(jīng)濟(jì)價(jià)值可以說是游戲史上的一件大事。它由俄羅斯人阿列克謝帕基特諾夫在1984年6月利用空閑時(shí)間所編寫的游戲程序,故得此名。俄羅斯方塊的基本規(guī)則是移動(dòng)、旋轉(zhuǎn)和擺放游戲自動(dòng)輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。它看似簡(jiǎn)單卻變化無窮,俄羅斯方塊上手極其簡(jiǎn)單,但是要熟練地掌握其中的操作與擺放技巧,難度卻不低。作為家喻戶曉老少皆宜的大眾游戲,其普及程度可以說是史上任何一款游戲都無法相比的。相信大多數(shù)人都還記得為它癡迷得茶不思飯不想的那個(gè)俄羅斯方塊的時(shí)代。由于俄羅斯方塊具有的教學(xué)性、動(dòng)態(tài)性與知名度,也經(jīng)常拿來作為游戲程序設(shè)計(jì)的練習(xí)題材。 2、 項(xiàng)目需求 (一) 功能需求 運(yùn)行游戲后,可選擇游戲難度,游戲開始后,由程序隨機(jī)產(chǎn)生所定義的圖形,右上角可看到下一個(gè)圖形,無操作時(shí),方塊豎直緩慢下落,圖形在接觸障礙物之前,可以由鍵盤控制向左右下移動(dòng),可通過空格鍵進(jìn)行翻轉(zhuǎn),可以進(jìn)行暫停、重新開始游戲,當(dāng)某一行被下落的方塊填滿后消除并計(jì)分,難度越大方塊下落速度相對(duì)提高,另外可修改游戲窗體風(fēng)格。 (二) 性能需求 1、游戲在不同分辨率下應(yīng)能適應(yīng)各種分辨率保證不變形。 2、保證游戲性能,在雙核512M內(nèi)存下應(yīng)能流暢運(yùn)行。 3、 涉及主要知識(shí)點(diǎn) (一)、開發(fā)環(huán)境搭建與配置 1、jdk安裝配置 2、eclipse安裝配置 (二)、界面布局 1、AWT、Swing 2、菜單使用 (三)、游戲方塊 整個(gè)游戲中總共7種方塊樣式,每個(gè)方塊有4種變形,通過線程控制由4 * 4 個(gè)方格構(gòu)成的一個(gè)方塊的移動(dòng)、下落以及變形。 (四)、游戲畫布 通過線程動(dòng)態(tài)改變游戲畫布的方格顏色,畫布通過檢查方格顏色來體現(xiàn)方塊的移動(dòng) (五)、事件 鍵盤監(jiān)聽事件 (六)、線程 整個(gè)游戲由線程控制,一輪游戲過程,實(shí)現(xiàn)了Runnable接口,一輪游戲是一個(gè)大循環(huán),在這個(gè)循環(huán)中,每隔100毫秒;檢查游戲中的當(dāng)前塊是否已經(jīng)到底了,如果沒有,就繼續(xù)等待。如果到底了,就看有沒有全填滿的行,如果有就刪除它,并為游戲者加分,同時(shí)隨機(jī)產(chǎn)生一新的當(dāng)前塊,讓它自動(dòng)下落。當(dāng)新產(chǎn)生一個(gè)塊時(shí),先檢查畫布最頂上的一行是否已經(jīng) 被占了,如果是,可以判斷Game Over了。 4、 概要設(shè)計(jì) (采用開發(fā)模式、框架、模塊劃分、模塊之間通訊設(shè)計(jì)等,本項(xiàng)目無) 5、 數(shù)據(jù)庫設(shè)計(jì) (概念數(shù)據(jù)模型、物理數(shù)據(jù)模型、表、字段、約束、存儲(chǔ)過程、函數(shù)、視圖等,本項(xiàng)目無) 6、 界面設(shè)計(jì) 本游戲只包含1個(gè)主界面 游戲菜單下包括開始新游戲、設(shè)置游戲方塊顏色、設(shè)置背景顏色、改變游戲難度等。 控制菜單下包括游戲的暫停、繼續(xù)、重新開始以及停止。 窗體風(fēng)格菜單下用來設(shè)置游戲窗體風(fēng)格。 關(guān)于菜單下包括幫助和游戲簡(jiǎn)介 7、 類設(shè)計(jì) 本項(xiàng)目包含ErsBlock、ErsBlocksGame、ControlPanel、ErsBox 以及GameCanvas 5個(gè)類,具體設(shè)計(jì)如下: (一)ErsBlock類 該類的主要功能為設(shè)計(jì)游戲方塊類,繼承自線程類(Thread),由 4 * 4 個(gè)方格(ErsBox)構(gòu)成一個(gè)塊,控制塊的移動(dòng)、下落、變形等。 (二)ErsBlocksGame類 該類的主要功能為游戲主類,繼承自JFrame類,負(fù)責(zé)游戲的全局控制。內(nèi)含 1一個(gè)GameCanvas畫布類的實(shí)例引用, 2一個(gè)保存當(dāng)前活動(dòng)塊(ErsBlock)實(shí)例的引用, 3一個(gè)保存當(dāng)前控制面板(ControlPanel)實(shí)例的引用; 利用線程實(shí)現(xiàn)了一輪游戲過程,一輪游戲是一個(gè)大循環(huán),在這個(gè)循環(huán)中,每隔100毫秒,檢查游戲中的當(dāng)前塊是否已經(jīng)到底了,如果沒有,就繼續(xù)等待。如果到底了,就看有沒有全填滿的行,如果有就刪除它,并為游戲者加分,同時(shí)隨機(jī)產(chǎn)生一個(gè)新的當(dāng)前塊,讓它自動(dòng)下落。 當(dāng)新產(chǎn)生一個(gè)塊時(shí),先檢查畫布最頂上的一行是否已經(jīng)被占了,如果是,可以判斷Game Over了。 (三)ControlPanel類 該類的主要功能控制面板類,繼承自JPanel.上邊安放預(yù)顯窗口、等級(jí)、得分、控制按鈕,主 要用來控制游戲進(jìn)程。 (四)ErsBox類 該類的主要功能是實(shí)現(xiàn)方格類,是組成塊的基本元素,用自己的顏色來表示塊的外觀 (五)GameCanvas類 該類的主要功能是實(shí)現(xiàn)畫布類,內(nèi)有行數(shù) * 列數(shù)個(gè)方格類實(shí)例。繼承自JPanel類。 ErsBlock線程類動(dòng)態(tài)改變畫布類的方格顏色,畫布類通過檢查方格顏色來體現(xiàn)ErsBlock塊的移動(dòng)情況。 8、 技術(shù)難點(diǎn)、解決方案和關(guān)鍵代碼 1、 游戲方塊的旋轉(zhuǎn)和移動(dòng) 游戲中總共有7種方塊類型,每種方塊有4種翻轉(zhuǎn),因此我們?cè)诔绦蛑欣命c(diǎn)陣圖,把4位16進(jìn)制數(shù)按每位換算成一行4位2進(jìn)制數(shù)的結(jié)果矩陣,理解為一個(gè)4*4的矩陣,比如說0x04e0轉(zhuǎn)換完后就是 0000 0100 1110 0000 其中將0看作空的,1看作方塊的塊,就可以看出正好是長(zhǎng)條形在4*4空間中的橫豎切換 /** * 方塊的樣式數(shù)目為7 */ private final static int BLOCK_KIND_NUMBER = 7; /** * 每一個(gè)樣式的方塊的反轉(zhuǎn)狀態(tà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, 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 void moveDown() { moveTo(y + 1, x); } /** * 將當(dāng)前畫移動(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 = newCol; 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 (STYLES[i][j] == style) { int newStyle = STYLES[i][(j + 1) % BLOCK_STATUS_NUMBER]; turnTo(newStyle); return; } } } } /** * 將當(dāng)前塊變成newStyle所指定的塊樣式 * @param newStyle int,將要改變成的塊樣式,對(duì)應(yīng)STYLES的28個(gè)值中的一個(gè) * @return boolean,true-改變成功,false-改變失敗 */ 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 < boxes[i].length; j++) { boolean isColor = ((newStyle & key) != 0); boxes[i][j].setColor(isColor); key >>= 1; } } style = newStyle; display(); canvas.repaint(); return true; } 2、 游戲中消行和結(jié)束 如果游戲畫布中有全填滿的行,我們就應(yīng)該從畫布中刪除當(dāng)行,根據(jù)最頂行是否被占來判斷游戲是否結(jié)束。 /** * 檢查畫布中是否有全填滿的行,如果有就刪除之 */ public void checkFullLine() { for (int i = 0; i < canvas.getRows(); i++) { int row = -1; boolean fullLineColorBox = true; for (int j = 0; j < canvas.getCols(); j++) { if (!canvas.getBox(i, j).isColorBox()) { fullLineColorBox = false; break; } } if (fullLineColorBox) { row = i--; canvas.removeLine(row); } } } /** * 當(dāng)一行被游戲者疊滿后,將此行清除,并為游戲者加分 * @param row int, 要清除的行,是由ErsBoxesGame類計(jì)算的 */ public synchronized void removeLine(int row) { for (int i = row; i > 0; i--) { for (int j = 0; j < cols; j++) boxes[i][j] = (ErsBox) boxes[i - 1][j].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.getBox(0, i); if (box.isColorBox()) return true; } return false; } 9、 參考資料 1、 http://www.docin.com/p-304555640.html 俄羅斯方塊需求分析 2、 http://wenku.baidu.com/link?url=e07lO7mcb4f_tzFRQXveVjow0R4otowq9ROZLL5aoANQBUG3VlE0z0kYpBOuxtowHUISeTL8lepul-hSyDoixn49aWnLq3HBvqsBs-a875S 基JAVA的俄羅斯方塊游戲開發(fā) 3、 http://image.baidu.com/i?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word 多線編程 4、 http://wenku.baidu.com/link?url=Hh_oYQfhalWzjDX2HHWbtOCHCTKkAb_1J2RuO2u_oLZNk5eTvEyFD-nneOCKFMIh_iscam9rtu6_aZo1RFiyEb7PdOuozLwwgYU4NLUGuMm 俄羅斯方塊設(shè)計(jì)文檔- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 項(xiàng)目 開設(shè) 俄羅斯方塊
鏈接地址:http://www.820124.com/p-8402394.html