JAVA俄羅斯方塊實驗報告_第1頁
JAVA俄羅斯方塊實驗報告_第2頁
JAVA俄羅斯方塊實驗報告_第3頁
JAVA俄羅斯方塊實驗報告_第4頁
JAVA俄羅斯方塊實驗報告_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄一需求分析錯誤!未定義書簽二系統(tǒng)運(yùn)行環(huán)境 2系統(tǒng)功能需求描述: 2四總體設(shè)計 2五系統(tǒng)結(jié)構(gòu)圖 3六程序模塊設(shè)計 3七、實驗總結(jié)體會 15需求分析在個人電腦日益普及的今天, 一些有趣的桌面游戲已經(jīng)成為人們在使用計算機(jī)進(jìn)行工作 或?qū)W習(xí)之余休閑娛樂的首選, 而俄羅斯方塊游戲是人們最熟悉的小游戲之一, 它以其趣味性 強(qiáng),易上手等諸多特點得到了大眾的認(rèn)可, 因此開發(fā)此游戲軟件可滿足人們的一些娛樂的需 求。此俄羅斯方塊游戲可以為用戶提供一個可在普通個人電腦上運(yùn)行的, 界面美觀的, 易于控 制的俄羅斯方塊游戲。二系統(tǒng)運(yùn)行環(huán)境操作系統(tǒng)選擇 Windows XP 版本,運(yùn)行環(huán)境選擇 MyEclipse三系統(tǒng)

2、功能需求描述俄羅斯方塊游戲是一款適合大眾的游戲軟件, 它適合不同年齡的人玩。 本軟件要實現(xiàn)的 功能如下:1. 游戲區(qū):玩家可以在游戲區(qū)中堆積方塊, 并能夠在游戲過程中隨時了解得分情 況。2. 游戲控制:玩家可以通過游戲控制功能來選擇開始新的一局游戲, 暫?;蛲顺?游戲。3. 級別設(shè)置:玩家可以根據(jù)自己的需要自行設(shè)定游戲的開始級別, 級別越高,游 戲速度越快,難度越大。四總體設(shè)計游戲中玩家可以做的操作有:1. 以 90 度為單位旋轉(zhuǎn)方每一格塊。2. 以格子為單位左右移動方塊,讓方塊加速落下。3. 方塊移到區(qū)域最下方或是著地到其他方塊上無法移動時,就會固定在該處, 而新的隨機(jī)圖形會出現(xiàn)在區(qū)域上方開

3、始落下。4. 當(dāng)區(qū)域中某一列橫向格子全部由方塊填滿,則該列會自動消除并成為玩家的 得分。同時刪除的列數(shù)越多,得分指數(shù)上升。5. 當(dāng)固定的方塊堆到區(qū)域最上方,則游戲結(jié)束五系統(tǒng)結(jié)構(gòu)圖六程序模塊設(shè)計6.1用戶界面設(shè)計開始游戲6.2程序代碼設(shè)計package russia;import java.awt.*;import java.awt.eve nt.*;/俄羅斯方塊類class ERS_Block exte nds Frame/*/private static fin al l ong serialVersi onUID = 1L;public static boolea n isPlay=fal

4、se;public static int level=1,score=0;public static TextField scoreField,levelField;public static MyTimer timer;GameCa nvas gameScr;public static void main( Stri ng argus)ERS_Block ers = new ERS_Block(俄羅斯方塊游戲 V1.0 Author:Vi nee nt);Win dowListe ner winiste ner = new Win Liste ner();ers.addWi ndowList

5、e ner(winiste ner);/俄羅斯方塊類的構(gòu)造方法SuppressWar nin gs(deprecati on)ERS_Block(Stri ng title)super(title);setSize(600,480);setLayout (new GridLayout(1,2);gameScr = new GameCanvas(); gameScr.addKeyListener(gameScr); timer = new MyTimer(gameScr); timer.setDaemon(true); timer.start();timer.suspend(); add(gam

6、eScr);Panel rightScr = new Panel(); rightScr.setLayout(new GridLayout(2,1,0,30); rightScr.setSize(120,500);add(rightScr);/ 右邊信息窗體的布局 MyPanel infoScr = new MyPanel(); infoScr.setLayout(new GridLayout(4,1,0,5);infoScr.setSize(120,300); rightScr.add(infoScr);/ 定義標(biāo)簽和初始值Label scorep = new Label(分?jǐn)?shù) :,Labe

7、l.LEFT);Label levelp = new Label(級數(shù) :,Label.LEFT);scoreField = new TextField(8);levelField = new TextField(8); scoreField.setEditable(false); levelField.setEditable(false); infoScr.add(scorep); infoScr.add(scoreField);infoScr.add(levelp); infoScr.add(levelField);scorep.setSize(new Dimension(20,60);

8、scoreField.setSize(new Dimension(20,60);levelp.setSize(new Dimension(20,60); levelField.setSize(new Dimension(20,60);scoreField.setText(0); levelField.setText(1);/ 右邊控制按鈕窗體的布局 MyPanel controlScr = new MyPanel(); controlScr.setLayout(new GridLayout(5,1,0,5);rightScr.add(controlScr);/ 定義按鈕 playButton

9、play_b = new Button(開始游戲 );play_b.setSize(new Dimension(50,200);play_b.addActionListener(new Command(Command.button_play,gameScr); / 定義按鈕 Level UPButton level_up_b = new Button( 提高級數(shù) );level_up_b.setSize(new Dimension(50,200); level_up_b.addActionListener(new Command(Command.button_levelup,gameScr);

10、 / 定義按鈕 Level DownButton level_down_b =new Button(降低級數(shù) );level_down_b.setSize(new Dimension(50,200); level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr);/ 定義按鈕 Level PauseButton pause_b =new Button(游戲暫停 );pause_b.setSize(new Dimension(50,200);pause_b.addActionListener(new Co

11、mmand(Command.button_pause,gameScr); / 定義按鈕 QuitButton quit_b = new Button( 退出游戲 ); quit_b.setSize(new Dimension(50,200);quit_b.addActionListener(new Command(Command.button_quit,gameScr); controlScr.add(play_b);controlScr.add(level_up_b); controlScr.add(level_down_b);controlScr.add(pause_b); control

12、Scr.add(quit_b);setVisible(true); gameScr.requestFocus();/ 重寫 MyPanel 類,使 Panel 的四周留空間 class MyPanel extends Panel/*/private static final long serialVersionUID = 1L; public Insets getInsets() return new Insets(30,50,30,50);/ 游戲畫布類class GameCanvas extends Canvas implements KeyListener /*/private stat

13、ic final long serialVersionUID = 1L; final int unitSize = 30; /小方塊邊長int rowNum; / 正方格的行數(shù) int columnNum; /正方格的列數(shù)int maxAllowRowNum; / 允許有多少行未削int blockInitRow; /新出現(xiàn)塊的起始行坐標(biāo)int blockInitCol; / 新出現(xiàn)塊的起始列坐標(biāo) int scrArr; /屏幕數(shù)組Block b; / 對方快的引用/ 畫布類的構(gòu)造方法GameCanvas() rowNum = 15; columnNum = 10;maxAllowRowNum

14、 = rowNum - 2;b = new Block(this); blockInitRow = rowNum - 1; blockInitCol = columnNum/2 - 2; scrArr = new int 3232;/ 初始化屏幕,并將屏幕數(shù)組清零的方法 void initScr() for(int i=0;irowNum;i+) for (int j=0; jcolumnNum;j+) scrArrij=0; b.reset();repaint();/ 重新刷新畫布方法public void paint(Graphics g) for(int i = 0; i rowNum;

15、 i+) for(int j = 0; j columnNum; j+) drawUnit(i,j,scrArrij);/ 畫方塊的方法public void drawUnit(int row,int col,int type) scrArrrowcol = type;以背景為顏色畫畫正在下落的方塊畫已經(jīng)落下的方法Graphics g = getGraphics(); switch(type) / 表示畫方快的方法 case 0: g.setColor(Color.black);break; / case 1: g.setColor(Color.blue);break; / case 2: g

16、.setColor(Color.magenta);break; /g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true); g.dispose();public Block getBlock()return b; / 返回 block 實例的引用/ 返回屏幕數(shù)組中 (row,col) 位置的屬性值 public int getScrArrXY(int row,int col) if (row = rowNum | col = columnNum) return(-1);else re

17、turn(scrArrrowcol);/ 返回新塊的初始行坐標(biāo)方法 public int getInitRow() return(blockInitRow); / 返回新塊的初始行坐標(biāo) / 返回新塊的初始列坐標(biāo)方法 public int getInitCol() return(blockInitCol); / 返回新塊的初始列坐標(biāo) / 滿行刪除方法void deleteFullLine() int full_line_num = 0;int k = 0;for (int i=0;irowNum;i+) boolean isfull = true;L1:for(int j=0;jcolumnNu

18、m;j+) if(scrArrij = 0) k+;isfull = false; break L1; if(isfull) full_line_num+;if(k!=0 & k-1!=i & !isfull) for(int j = 0; j columnNum; j+) if (scrArrij = 0) drawUnit(k-1,j,0);else drawUnit(k-1,j,2); scrArrk-1j = scrArrij; for(int i = k-1 ;i rowNum; i+) for(int j = 0; j columnNum; j+) drawUnit(i,j,0);

19、scrArrij=0; ERS_Block.score += full_line_num;ERS_Block.scoreField.setText(+ERS_Block.score);/ 判斷游戲是否結(jié)束方法 boolean isGameEnd() for (int col = 0 ; col columnNum; col +) if(scrArrmaxAllowRowNumcol !=0) return true;return false; public void keyTyped(KeyEvent e) public void keyReleased(KeyEvent e)/ 處理鍵盤輸入

20、的方法 public void keyPressed(KeyEvent e) if(!ERS_Block.isPlay) return;switch(e.getKeyCode()case KeyEvent.VK_DOWN:b.fallDown();break; case KeyEvent.VK_LEFT:b.leftMove();break;case KeyEvent.VK_RIGHT:b.rightMove();break; case KeyEvent.VK_SPACE:b.leftTurn();break;/ 處理控制類class Command implements ActionList

21、enerstatic final int button_play = 1; /給按鈕分配編號static final int button_levelup = 2;static final int button_leveldown = 3; static final int button_quit = 4;static final int button_pause = 5; static boolean pause_resume = true; int curButton; / 當(dāng)前按鈕 GameCanvas scr;/ 控制按鈕類的構(gòu)造方法 Command(int button,GameCa

22、nvas scr) curButton = button;this.scr=scr;/ 按鈕執(zhí)行方法 SuppressWarnings(deprecation) public void actionPerformed (ActionEvent e) switch(curButton)case button_play:if(!ERS_Block.isPlay)scr.initScr();ERS_Block.isPlay = true;ERS_Block.score = 0;ERS_Block.scoreField.setText(0);ERS_Block.timer.resume();scr.r

23、equestFocus();break;case button_levelup:if(ERS_Block.level 1)ERS_Block.level-;ERS_Block.levelField.setText(+ERS_Block.level);ERS_Block.score = 0;ERS_Block.scoreField.setText(+ERS_Block.score);scr.requestFocus();break;case button_pause:if(pause_resume)ERS_Block.timer.suspend();pause_resume = false;el

24、seERS_Block.timer.resume();pause_resume = true;scr.requestFocus();break;case button_quit:System.exit(0);/ 方塊類class Block static int pattern = 0x0f00,0x4444,0x0f00,0x4444,/ 用十六進(jìn)至表示,本行表示長條四種狀態(tài) 0x04e0,0x0464,0x00e4,0x04c4,0x4620,0x6c00,0x4620,0x6c00,0x2640,0xc600,0x2640,0xc600,0x6220,0x1700,0x2230,0x07

25、40,0x6440,0x0e20,0x44c0,0x8e00,0x0660,0x0660,0x0660,0x0660 ;int blockType; / int turnState; / int blockState; /塊的模式號( 0-6 ) 塊的翻轉(zhuǎn)狀態(tài)( 0-3 )快的下落狀態(tài)int row,col; / 塊在畫布上的坐標(biāo)GameCanvas scr; / 塊類的構(gòu)造方法Block(GameCanvas scr)this.scr = scr;blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random(

26、) * 1000)%4; blockState = 1;row = scr.getInitRow();col = scr.getInitCol();/ 重新初始化塊,并顯示新塊public void reset()blockType = (int)(Math.random() * 1000)%7; turnState = (int)(Math.random() * 1000)%4; blockState = 1;row = scr.getInitRow();col = scr.getInitCol();dispBlock(1);/ 實現(xiàn) “塊”翻轉(zhuǎn)的方法public void leftTurn

27、() if(assertValid(blockType,(turnState + 1)%4,row,col) dispBlock(0);turnState = (turnState + 1)%4;dispBlock(1);/ 實現(xiàn) “塊”的左移的方法public void leftMove()if(assertValid(blockType,turnState,row,col-1) dispBlock(0);col-; dispBlock(1);/ 實現(xiàn)塊的右移public void rightMove() if(assertValid(blockType,turnState,row,col+1) dispBlock(0);col+;dispBlock(1);/ 實現(xiàn)塊落下的操作的方法 public boolean fallDown() if(blockState = 2) return(false);if(assertValid(blockType,turnState,row

溫馨提示

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

評論

0/150

提交評論