版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 關(guān)于設(shè)計(jì)文檔詳細(xì)說(shuō)明書 -俄羅斯方塊的實(shí)現(xiàn)一、實(shí)現(xiàn)此游戲的軟件,即開(kāi)發(fā)環(huán)境:jcreator;二、目 的:為游戲愛(ài)好者設(shè)計(jì)的一套娛樂(lè)軟件。三、開(kāi)發(fā)人員: 四、具體模塊劃分如下(功能簡(jiǎn)要說(shuō)明):1、 ersblocksgame.java: 游戲主類,繼承自jframe類,負(fù)責(zé)游戲的全局控制。 內(nèi)含: 1、一個(gè)gamecanvas畫布類的實(shí)例引用, 2、一個(gè)保存當(dāng)前活動(dòng)塊(ersblock)實(shí)例的引用, 3、一個(gè)保存當(dāng)前控制面板(controlpanel)實(shí)例的引用 ersbox.java: 方格類,是組成塊的基本元素,用自己的顏色來(lái)表示塊的外觀。 2、 controlpanel.java: 控
2、制面板類,繼承自jpanel.上邊安放預(yù)顯窗口、等級(jí)、得分、控制按鈕主要用來(lái)控制游戲進(jìn)程。 3、 ersblock.java: 塊類,繼承自線程類(thread),由 4 * 4 個(gè)方格(ersbox)構(gòu)成一個(gè)塊控制塊的移動(dòng)、下落、變形等 4、 gamecanvas.java: 畫布類,內(nèi)有 * 個(gè)方格類實(shí)例。繼承自jpanel類。ersblock線程類動(dòng)態(tài)改變畫布類的方格顏色,畫布類通過(guò)檢查方格顏色來(lái)體現(xiàn)ersblock塊的移動(dòng)情況。 五、具體模塊功能的實(shí)現(xiàn):(1)、 ersblockgame類說(shuō)明(游戲主類,繼承自jframe類,負(fù)責(zé)游戲的全局控制): import java.awt.*;
3、 import javax.swing.*; import java.awt.event.*; ersblockgame中用到的方法具體說(shuō)明如下: 1、main() -程序入口函數(shù); 2、ersblockgame() -構(gòu)造函數(shù),初始化窗體界面; a、setsize() -窗口大小 b、setlocation()-利用屏幕和主窗體的大小差值,使窗口居中; c、createmenu()-建立并設(shè)置窗口菜單; 依次添加: 菜單欄-bar 菜單項(xiàng)-mgame,mcontrol,mwindowstyle 子菜單- mgame-minewgame,misetblockcolor,misetbackcol
4、or,miturnharder,miturneasier,miexit; mcontrol-miplay,mipause,miresume,mistop; mwindowstyle-miaswindows,miasmotif,miasmetal 依次添加各子菜單的事件監(jiān)聽(tīng)器: minewgame-新游戲 a、stopgame()-先停止原來(lái)的游戲(判斷ersblock類對(duì)象block是否為空,如不為空,即調(diào)用它的pausemove()方法,即stoping為ture); b、reset() -重新還原狀態(tài)(分別調(diào)用ctrlpanel.reset()控制面板復(fù)位和canvas.reset()畫布
5、復(fù)位); c、setlevel() -設(shè)置級(jí)別為初始值為5 misetblockcolor-設(shè)置活動(dòng)的方塊的色(jcolorchooser.showdialog選擇顏色對(duì)話框) misetbackcolor-設(shè)置畫布的背景色(同上) miturnharder-設(shè)置高一級(jí)的級(jí)別(getlevel()與max_level的比較,再調(diào)用setlevel() miturneasier-設(shè)低一級(jí)的級(jí)別(getlevel()與min_level的比較,再調(diào)用setlevel() miexit -退出 miplay-開(kāi)始游戲(調(diào)用playgame()=this.play()=this.reset()=新建線
6、程并啟動(dòng)start()=調(diào)用game(此類實(shí)現(xiàn)runnable接口)的run()方法=判斷block是否為空,判斷checkfullline()是否有滿行,判斷游戲是否結(jié)束;隨機(jī)產(chǎn)生畫布類的方塊類型和控制面板類的方塊類型) mipause-停止游戲(調(diào)用pausegame() miresume-喚醒游戲(調(diào)用resumegame()=判斷ersblock類對(duì)象block是否為空,如不為空,即調(diào)用它的resumemove()方法,即stoping為false) mistop-停止游戲(調(diào)用stopgame()=判斷ersblock類對(duì)象block是否為空,如不為空,即調(diào)用它的stopmove()
7、方法,即moving為false) miaswindows-設(shè)置為windows界面(調(diào)用this.setwindowstyle(),再調(diào)用canvas,ctrlpanel的fanning() miasmotif -設(shè)置為motif界面(同上) miasmetal -設(shè)置為metal界面(同上) mguanyu -關(guān)于對(duì)話框; d、canvas -創(chuàng)建畫布類對(duì)象(調(diào)用canvas的構(gòu)造函數(shù)); e、ctrlpanel -創(chuàng)建控制面板類對(duì)象(調(diào)用ctrlpanel的構(gòu)造函數(shù)); f、addwindowlistener-添加窗口適配器(調(diào)用stopgame(); g、addcomponentlis
8、tener-添加組件適配器(調(diào)用canvas.fanning(); h、show() -顯示窗體; i、canvas.fanning() -根據(jù)窗口的大小,自動(dòng)調(diào)整方格的尺寸; j、以下為外部類調(diào)用的方法: isplaying()-判斷游戲是否還在進(jìn)行; getcurblock()-得到當(dāng)前活動(dòng)的塊; getcanvas()-得到當(dāng)前畫布; getscore()-得到游戲積分; getscoreforlevelupdate()-得到自上次升級(jí)以來(lái)的游戲積分,升級(jí)以后,此積分清零; levelupdate()-當(dāng)分?jǐn)?shù)累計(jì)到一定的數(shù)量時(shí),升一次級(jí); reportgameover()-報(bào)告游戲結(jié)束了
9、; 2、內(nèi)部類:game methord: checkfullline()-檢查是否有全填滿的行; run() -游戲啟動(dòng)之處; isgameover() -判斷游戲是否已經(jīng)結(jié)束; a、reportgameover()-報(bào)告游戲結(jié)束了; 3、內(nèi)部類:aboutdialog-顯示關(guān)于對(duì)話框; (2)、ersbox類的說(shuō)明:(方格類,是組成塊的基本元素,用自己的顏色來(lái)表示塊的外觀) ersbox中用到的方法具體說(shuō)明如下: 1、ersbox()-方格類的構(gòu)造函數(shù),接受一個(gè)布爾值,判斷是否用前景色來(lái)添叢方塊 2、clone() -cloneable接口的抽象方法在此實(shí)現(xiàn) 3、setsize()-設(shè)置方
10、格的尺寸 4、getsize()-得到此方格的尺寸 5、iscolorbox()-判斷是否用前景色來(lái)表現(xiàn)此方塊 6、setcolor-設(shè)置方格的顏色(3)、controlpanel類: import javaz.swing.*;import javax.swing.border.border;import javax.swing.border.etchedborder;import java.awt.*;import java.awt.event.*;包含的參數(shù):private jtextfield tflevel = new jtextfield( + ersblocksgame.defau
11、lt_level),tfscore = new jtextfield(0);定義兩個(gè)文本域分別用來(lái)顯示游戲級(jí)別和得分。private jbutton btplay = new jbutton(play), btpause = new jbutton(pause),btstop = new jbutton(stop), btturnlevelup = new jbutton(turn hard),btturnleveldown = new jbutton(turn easy);定義五個(gè)按鈕private jpanel pltip = new jpanel(new borderlayout();定
12、義預(yù)制窗口面版()private tippanel pltipblock = new tippanel(); 定義預(yù)制窗口類的一個(gè)實(shí)例private jpanel plinfo = new jpanel(new gridlayout(4, 1);定義游戲級(jí)別和得分的面版(4行1列)private jpanel plbutton = new jpanel(new gridlayout(5, 1);定義按鈕面版(5行1列)private timer timer;定義timer類的一個(gè)對(duì)象。private ersblocksgame game;定義ersblocksgame類的一個(gè)實(shí)例。privat
13、e border border = new etchedborder(etchedborder.raised, color.white, new color(148, 145, 140);定義面版的邊框。包含的方法:a、controlpanel:類的構(gòu)造函數(shù)繼承面版類(布局方式為網(wǎng)格布局3行1列)用來(lái)擺放:按鈕(btplay、btpause、btstop、btturnlevelup、btturnleveldown)、文本域(tflevel、 tfscore)、預(yù)顯框(border)及按鈕的監(jiān)聽(tīng)事件。按鈕的監(jiān)聽(tīng)事件包括: addkeylistener(new controlkeylistener
14、():調(diào)用內(nèi)部類ontrolkeylistener btplay.addactionlistener:btplay按鈕的監(jiān)聽(tīng)事件,調(diào)用ersblocksgame類的playgame方法。開(kāi)始一個(gè)游戲。 btpause.addactionlistener:btpause按鈕的監(jiān)聽(tīng)事件,調(diào)用ersblocksgame類的pausegame方法。通過(guò)判斷按鈕的文字實(shí)現(xiàn)游戲暫停和游戲繼續(xù)。 btstop.addactionlistener:btstop按鈕的監(jiān)聽(tīng)事件,調(diào)用ersblocksgame類的stopgame方法 btturnlevelup.addactionlistener:提高級(jí)別按鈕的監(jiān)
15、聽(tīng)事件,通過(guò)tflevel文本域顯示的級(jí)別與ersblocksgame類的變量max_level比較,小于則加1 btturnleveldown.addactionlistener:降低級(jí)別按鈕的監(jiān)聽(tīng)事件,通過(guò)tflevel文本域顯示的級(jí)別判斷l(xiāng)evel是否大于1,大于1則減1。 addcomponentlistener(new componentadapter():組建監(jiān)聽(tīng)事件。當(dāng)預(yù)顯窗口改變大小時(shí)調(diào)用tippanel類的fanning()方法。 初始化timer:b、settipstyle(int style):設(shè)置預(yù)顯窗口中方塊的樣式,對(duì)應(yīng)ersblock類的styles中的28個(gè)值。調(diào)
16、用tippanel類的setstyle(style)方法。將style參數(shù)傳遞給setstyle.c、unsettipstyle():清空預(yù)制面版。調(diào)用tippanel類的unsetstyle()方法。d、getlevel():取得用戶設(shè)置的游戲等級(jí)(level)。返回level得值。(被主函數(shù)調(diào)用)e、setlevel(int level):讓用戶修改游戲難度等級(jí)。(被主函數(shù)調(diào)用)f、setpalynuttonenable(boolean enable):設(shè)置開(kāi)始按鈕的狀態(tài)。ture為可用 ,false為不可用。g、setpausebuttonlable(boolean pause):設(shè)置暫
17、停按鈕的狀態(tài)。(被主函數(shù)調(diào)用)h、setbtturnlevelupenable(boolean enable):設(shè)置“選擇級(jí)別”按鈕的狀態(tài)。ture為可用 ,false為不可用。(被主函數(shù)調(diào)用)i、setbtturnleveldownenable(boolean enable):設(shè)置“選擇級(jí)別”按鈕的狀態(tài)。ture為可用 ,false為不可用。(被主函數(shù)調(diào)用)j、reset():重置控制面版,將游戲積分清零,預(yù)顯窗口清空。k、fanning():重新計(jì)算tippanel里的boxes里的小框的大小,調(diào)用tippanel類的fanning()方法。當(dāng)游戲的窗體改變大小及風(fēng)格時(shí)調(diào)用次方法。tipp
18、anel為內(nèi)部類,繼承面版類。包含的參數(shù):private color backcolor = color.darkgray, frontcolor = color.lightgray;定義兩種顏色,backcolor為背景色(暗黑色),frontcolor為前景色(亮色)。private ersbox boxes =new ersboxersblock.boxes_rowsersblock.boxes_cols;定義一個(gè)ersbox類的對(duì)象數(shù)組boxes,初始化為4行4列private int style, boxwidth, boxheight;定義三個(gè)整型變量(style:表示方塊的類型;
19、boxwidth:表示小方格的寬度;boxheight:表示小方格的高度)private boolean istiled = false;包含的方法:a、tippanel():預(yù)顯窗口類構(gòu)造函數(shù).初始化預(yù)顯窗口,設(shè)置預(yù)顯窗口的行數(shù)和列數(shù)。b、tippanel(color backcolor,color frontcolor):預(yù)顯窗口類構(gòu)造函數(shù),backcolor為窗口的被景色,frontcolor為窗口的前景色(方塊的顏色)。c、setstyle(int style):設(shè)置預(yù)顯窗口的方塊式樣。接收controlpanel類的settipstyle(style)方法傳遞過(guò)來(lái)的style的值。d
20、、paintcomponent(graphics g):覆蓋jcomponent類的函數(shù),畫組建。e、fanning():根據(jù)窗口的大小,自動(dòng)調(diào)整方格的尺寸。boxwidth值為預(yù)顯窗口的大小除以列數(shù),boxheight值為預(yù)顯窗口的大小除以行數(shù)。內(nèi)部類:controlkeylistener繼承keyadapter實(shí)現(xiàn)方塊的移動(dòng)及變形。首先判斷ersblocksgame類的isplaying ()方法的值ture繼續(xù)執(zhí)行,false返回。當(dāng)isplaying()的值為true時(shí)用switch.case方法檢查玩家按下的是哪個(gè)鍵:vk_down:下鍵為向下移動(dòng),調(diào)用ersblock類的moved
21、own方法。vk_left:左鍵為向左移動(dòng),調(diào)用ersblock類的moveleft方法。vk_right:右鍵為向右移動(dòng),調(diào)用ersblock類的moveright方法。vk_up:上鍵為方塊變形,調(diào)用ersblock類的turnnext方法。(4)、ersblock-塊類final static int boxes_rows = 4/設(shè)置靜態(tài)變量boxes_rows=4-方格所占行數(shù)final static int boxes_cols = 4/設(shè)置靜態(tài)變量boxes_rows=4-方格所占列數(shù)final static int level_flatness_gene = 3/設(shè)置各級(jí)之間速
22、度的差額final static int between_levels_degress_time = 50/相近的兩級(jí)之間,塊每下落一行的時(shí)間差別為多少(毫秒)final static int block_kind_number = 7/方塊的樣式數(shù)目為7final static int block_status_number = 4/每一個(gè)樣式的方塊的反轉(zhuǎn)狀態(tài)種類為4final static int styles = / 共28種狀態(tài)0x0f00, 0x4444, 0x0f00, 0x4444, / 長(zhǎng)條型的四種狀態(tài)0x04e0, 0x0464, 0x00e4, 0x04c4, / t型的四
23、種狀態(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)建立對(duì)象gamecanvas canvasersbox boxes = new ersboxboxes_rowsboxes_cols;設(shè)置參數(shù) style x ylevel構(gòu)造函數(shù)
24、,產(chǎn)生一個(gè)特定的塊 style 塊的樣式,對(duì)應(yīng)styles的28個(gè)值中的一個(gè) y 起始位置,左上角在canvas中的坐標(biāo)行 x 起始位置,左上角在canvas中的坐標(biāo)列 level 游戲等級(jí),控制塊的下落速度 canvas 畫板構(gòu)造函數(shù)ersblock()/用于改變位置時(shí)設(shè)定方格變換方塊顏色的位置線程類的run()函數(shù)覆蓋,下落塊,直到塊不能再下落moveleft()/塊向左移動(dòng)一格moveright()/塊向右移動(dòng)一格movedown()/塊向下落一格turnnext()/改變方格形狀pausemove()/暫停塊的下落,對(duì)應(yīng)游戲暫停resumemove()/繼續(xù)塊的下落,對(duì)應(yīng)游戲繼ears
25、e()/將當(dāng)前塊從畫布的對(duì)應(yīng)位置移除,要等到下次重畫畫布時(shí)才能反映出來(lái)display()/讓當(dāng)前塊放置在畫布的對(duì)應(yīng)位置上,要等到下次重畫畫布時(shí)才能看見(jiàn)ismoveable/當(dāng)前塊能否移動(dòng)到newrow/newcol所指定的位置 newrow int, 目的地所在行 newcol int, 目的地所在列 boolean, true-能移動(dòng),false-不能isturnable(int newstyle)/前塊能否變成newstyle所指定的塊樣式,主要是要考慮 邊界以及被其它塊擋住、不能移動(dòng)的情況 newstyle int,希望改變的塊樣式,對(duì)應(yīng)styles的28個(gè)值中的一個(gè) boolean,t
26、rue-能改變,false-不能改變 turnto(int newstyle)/將當(dāng)前塊變成newstyle所指定的塊樣式 newstyle int,將要改變成的塊樣式,對(duì)應(yīng)styles的28個(gè)值中的一個(gè) boolean,true-改變成功,false-改變失敗(5)、類:gamecanvas;包:swing,awt,swing.border.etchedborder;構(gòu)造函數(shù): gamecanvas(int rows, int cols) gamecanvas(int rows, int cols,backcolor,frontcolor) 定義一個(gè)整型的行和整型的列作為數(shù)組ersbox的參
27、數(shù),用于得到整個(gè)畫布。 里面的setborder(new etchedborder( etchedborder.raised, color.white, new color(148, 145, 140)用于設(shè)置畫布的邊框 設(shè)置畫布的前景色和背景色成員函數(shù): fanning() - 根據(jù)窗口大小自動(dòng)調(diào)整方格尺寸,將值賦給boxheight,boxwidth 在主函數(shù)里調(diào)用 getbackgroundcolor() - 得到背景顏色,返回backcolor getblockcolor() - 設(shè)置方塊顏色,返回frontcolor getbox(int row, int col) - 得到某一行某
28、一列的方格引用 getcols() - 得到方格列數(shù) getrows() - 得到方格行數(shù) getscore() - 得到成績(jī) getscoreforlevelupdate() - 得到上一次升級(jí)后的積分 在主函數(shù) public int getscoreforlevelupdate() if (canvas != null) return canvas.getscoreforlevelupdate();return 0; 調(diào)用 paintcompontent(graphics g) - 覆蓋jcomponent類的函數(shù),畫組件。 removeline(int row) - 清除填滿的行,由主函
29、數(shù)調(diào)用 reset() - 重置畫布:積分清零,升級(jí)后的積分清零將方塊的顏色設(shè)為假 在主函數(shù)里調(diào)用 resetscoreforlevelupdate( ) - 升級(jí)后將上一次升級(jí)以來(lái)的積分清零 scoreforlevelupdate -= ersblocksgame.per_level_score;這句話 利用主函數(shù)里的public final static int per_level_score = per_line_score * 20; 給scoreforlevelupdate重新賦值 setbackgroundcolor(color backcolor) - 設(shè)置背景顏色變量: backcolor - 設(shè)置背景色,返回給getbackgroundcolor() boxheight - 方塊的高度 boxwidth - 方塊的寬度 boxes - 數(shù)組變量得到畫布的行和列 cols - 畫布的列 frontcolor - 設(shè)置前景色 rows - 畫布的行 score - 成績(jī)積分 scoreforlevelupdate - 每次升級(jí)后的積分類流程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省南昌市2026屆九年級(jí)上學(xué)期期末測(cè)試道德與法治試卷(含答案)
- 黑龍江省齊齊哈爾市部分學(xué)校2025-2026學(xué)年高一上學(xué)期1月期末英語(yǔ)試卷(含答案)
- 福建省寧德市2025-2026學(xué)年高三上學(xué)期期末考試語(yǔ)文試題(含答案)
- 馬上有喜市-2026馬年游園打卡、年貨大集
- 有限空間作業(yè)安全培訓(xùn)
- 鋼柱安裝技術(shù)操作要領(lǐng)
- 鋼結(jié)構(gòu)工程驗(yàn)收標(biāo)準(zhǔn)解析
- 2026年銅陵市中醫(yī)醫(yī)院招聘5名護(hù)理人員筆試備考試題及答案解析
- 2026廣州銀行人才招聘筆試備考題庫(kù)及答案解析
- 2026廣東佛山市順德區(qū)均安鎮(zhèn)國(guó)資企業(yè)副總經(jīng)理崗位招聘4人備考考試試題及答案解析
- 食品生產(chǎn)余料管理制度
- 2026年浦發(fā)銀行社會(huì)招聘?jìng)淇碱}庫(kù)必考題
- 專題23 廣東省深圳市高三一模語(yǔ)文試題(學(xué)生版)
- 2026年時(shí)事政治測(cè)試題庫(kù)100道含完整答案(必刷)
- 2025年CFA二級(jí)公司估值真題試卷(含答案)
- 2026年肉類零食市場(chǎng)調(diào)查報(bào)告
- 高考成語(yǔ)積累+(語(yǔ)序不當(dāng))病句修改訓(xùn)練小紙條(原卷版)-2026年高考語(yǔ)文一輪復(fù)習(xí)講練測(cè)
- 產(chǎn)權(quán)無(wú)償劃轉(zhuǎn)協(xié)議書
- 2025《義務(wù)教育體育與健康課程標(biāo)準(zhǔn)(2022年版)》測(cè)試題庫(kù)及答案
- 裝配式建筑可行性研究報(bào)告
- 新人教部編版一年級(jí)下冊(cè)生字表全冊(cè)描紅字帖可打印
評(píng)論
0/150
提交評(píng)論