版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> Java 課 程 設(shè) 計</p><p><b> 題目:俄羅斯方塊</b></p><p><b> 目錄</b></p><p> 一. 需求分析.......................................................2</p><p
2、> 1.1開發(fā)背景...................................................... 2</p><p> 1.2設(shè)計目的...................................................... 2</p><p> 1.3功能需求...................................
3、................... 2</p><p> 1.4開發(fā)環(huán)境............................................... ...... 2</p><p> 二.軟件概要設(shè)計.................................................... 3</p><p> 2.1
4、設(shè)計思想..................................................... 3</p><p> 2.2 系統(tǒng)架構(gòu)......................................................3</p><p> 2.3 模塊劃分..........................................
5、............3</p><p> 三.詳細(xì)設(shè)計.........................................................4</p><p> 3.1 事件處理.......................................................4</p><p> 3.2 界面設(shè)計.
6、...................................... ..............4</p><p> 3.3 系統(tǒng)流程.................................... .................4</p><p> 3.4 游戲畫布類..............................................
7、......5</p><p> 3.5 方塊類........................................................9</p><p> 3.6 方塊的消除....................................................8</p><p> 四.軟件運行測試........
8、.............................................10</p><p> 五.課程設(shè)計總結(jié)及心得體會.......................................... 12</p><p> 六.參考文獻(xiàn)... .....................................................12<
9、/p><p> 附錄:重要代碼.............................. ........................13</p><p><b> 一.需求分析</b></p><p><b> 1.1開發(fā)背景</b></p><p> Java是現(xiàn)在全球最時髦的開發(fā)工具
10、之一,它擁有一套龐大且完善的類庫,內(nèi)置了其他語言需要靠庫甚至是操作系統(tǒng)才能支持的功能。Java的產(chǎn)生與流行是InterNet發(fā)展的客觀要求。如今越來越多的應(yīng)用程序是于Java開發(fā)的,用Java開發(fā)的應(yīng)用程序可在任何計算平臺上安全地運行。Java作為一個分布式的,面向?qū)ο蟮某绦蛟O(shè)計方法,可以讓位于任何地方的任何計算機(jī)使用網(wǎng)絡(luò)上的的應(yīng)用程序??梢哉fJava是一個萬能的開發(fā)平臺,用Java編程已經(jīng)成為一種趨勢。</p><
11、p><b> 1.2設(shè)計目的</b></p><p> 通過本次課程設(shè)計了解和掌握J(rèn)DK開發(fā)環(huán)境以及Eclipse等集成開發(fā)環(huán)境,鞏固所學(xué)的Java知識及其編程機(jī)制。了解JAVA程序開發(fā)流程,學(xué)會構(gòu)思比較復(fù)雜的課題的設(shè)計思想;,能合理的利用本學(xué)期所掌握的多線程、類、GUI等知識編寫一個較為復(fù)雜的Java應(yīng)用軟件。掌握面向?qū)ο蟪绦蛟O(shè)計的有關(guān)概念和開發(fā)方法,鍛煉大家團(tuán)隊合作開發(fā)精神。&
12、lt;/p><p><b> 1.3功能需求</b></p><p> 本課程設(shè)計的目標(biāo)是設(shè)計一個名為《俄羅斯方塊》的游戲軟件,實現(xiàn)其界面初始化,程序運行,退出,和相應(yīng)數(shù)據(jù)處理。能實現(xiàn)游戲的基本功能,類似下落、轉(zhuǎn)向、平移、得分累加和計數(shù)等,并在規(guī)定的時間內(nèi)達(dá)到課題所需要實現(xiàn)的功能及要求。</p><p><b> 1.4開發(fā)環(huán)境&l
13、t;/b></p><p> 操作系統(tǒng):Microsoft Windows XP</p><p> 程序語言:Java </p><p> 開 發(fā) 包:Java(TM) 2 Standard Edition (5.0)</p><p> Sun Micro. J2ME Wireless Tool Kit 2.2</p&
14、gt;<p> IDE: Eclipse 3.41</p><p><b> 二 .軟件概要設(shè)計</b></p><p><b> 2.1設(shè)計思想</b></p><p> 1).使用Jpanel框架,并添加按鈕、文本框等對象,用布局管理器定義各個對象的分布。</p><p&
15、gt; 2).設(shè)計一個二維數(shù)組來表示方塊,默認(rèn)為不顯示,游戲過程中通過SetVisible來顯示方塊。</p><p> 3).設(shè)計一個設(shè)計定時線程來控制方塊下落速度。</p><p> 4).設(shè)計七種形狀的防快,每種形狀定義四種形態(tài)來實現(xiàn)方塊變換。</p><p> 5).每個方塊落到底后判斷能否消層和游戲是否結(jié)束。</p><p>
16、;<b> 2.2系統(tǒng)架構(gòu)</b></p><p> 主要包含方塊類,游戲畫布類,處理控制類,定時線程,模塊構(gòu)造,頁面布局</p><p><b> 2.3 模塊化分</b></p><p> 根據(jù)需求分析要實現(xiàn)的系統(tǒng)功能,可以得出系統(tǒng)的模塊圖:</p><p><b> 三.詳
17、細(xì)設(shè)計</b></p><p><b> 3.1事件處理</b></p><p> 在frame框架中設(shè)置各種對象,使用addActionListener添加監(jiān)聽。例如:gameScr.addKeyListener(gameScr);然后使用public void actionPerformed(ActionEvent e)和public void m
18、ouseClicked(MouseEvent e)實現(xiàn)按鈕和鼠標(biāo)點擊事件。</p><p><b> 3.2界面設(shè)計</b></p><p><b> 游戲基本界面圖</b></p><p><b> 3.3系統(tǒng)流程</b></p><p><b> 游戲畫面
19、流程圖</b></p><p><b> 游戲算法流程圖</b></p><p><b> 3.4 游戲畫布類</b></p><p> 游戲畫布類,繼承自Canvas類,游戲的主要代碼,用于實現(xiàn)方塊在畫布上顯示</p><p> class GameCanvas extends
20、 Canvas implements KeyListener { </p><p> final int unitSize = 25; // 小方塊邊長 </p><p> int rowNum; // 正方格的行數(shù) </p><p> int columnNum; // 正方格的列數(shù) </p><p> int ma
21、xAllowRowNum; // 允許有多少行未消 </p><p> int blockInitRow; // 新出現(xiàn)塊的起始行坐標(biāo) </p><p> int blockInitCol; // 新出現(xiàn)塊的起始列坐標(biāo) </p><p> int[][] scrArr; // 屏幕數(shù)組 </p><p> Block b
22、; // 對方快的引用 </p><p> GameCanvas() { </p><p> rowNum = 18; </p><p> columnNum = 12; </p><p> maxAllowRowNum = rowNum - 2; </p><p> b = new Blo
23、ck(this); </p><p> blockInitRow = rowNum - 1; </p><p> blockInitCol = columnNum / 2 - 2; </p><p> scrArr = new int[32][32]; </p><p><b> } </b>
24、</p><p> // 初始化屏幕,并將屏幕數(shù)組清零的方法 </p><p> void initScr() { </p><p> for (int i = 0; i < rowNum; i++) </p><p> for (int j = 0; j < columnNum; j++) </p&
25、gt;<p> scrArr[i][j] = 0; </p><p> b.reset(); </p><p> repaint(); </p><p><b> } </b></p><p> // 重新刷新畫布方法 </p><p> public
26、 void paint(Graphics g) { </p><p> for (int i = 0; i < rowNum; i++) </p><p> for (int j = 0; j < columnNum; j++) </p><p> drawUnit(i, j, scrArr[i][j]); </p>
27、<p><b> } </b></p><p> // 畫方塊的方法 </p><p> public void drawUnit(int row, int col, int type) { </p><p> scrArr[row][col] = type; </p><p> Gr
28、aphics g = getGraphics(); </p><p> switch (type) { // 表示畫方快的方法 </p><p> case 0: </p><p> g.setColor(Color.black); </p><p> break; // 以背景為顏色畫 </p>&
29、lt;p> case 1: </p><p> g.setColor(Color.green); </p><p> break; // 畫正在下落的方塊 </p><p> case 2: </p><p> g.setColor(Color.gray); </p><p> b
30、reak; // 畫已經(jīng)落下的方法 </p><p><b> } </b></p><p> g.fill3DRect(col * unitSize, getSize().height - (row + 1) * unitSize, </p><p> unitSize, unitSize, true); </p&
31、gt;<p> g.dispose(); </p><p><b> } </b></p><p><b> } </b></p><p><b> }</b></p><p><b> 3.5方塊類</b></
32、p><p> 方塊類,定義了七種形狀的方塊,每種形狀有四種狀態(tài),實現(xiàn)用鍵盤控制方塊的下落,移動,轉(zhuǎn)換形狀等</p><p> class Block { </p><p> static int[][] pattern = { </p><p> { 0x0f00, 0x4444, 0x0f00, 0x4444 },//本行表示長
33、條四種狀態(tài) </p><p> { 0x04e0, 0x0464, 0x00e4, 0x04c4 }, </p><p> { 0x4620, 0x6c00, 0x4620, 0x6c00 }, </p><p> { 0x2640, 0xc600, 0x2640, 0xc600 }, </p><p> { 0x62
34、20, 0x1700, 0x2230, 0x0740 }, </p><p> { 0x6440, 0x0e20, 0x44c0, 0x8e00 }, </p><p> { 0x0660, 0x0660, 0x0660, 0x0660 } }; </p><p> int blockType; </p><p> i
35、nt turnState; </p><p> int blockState; </p><p> int row, col; </p><p> GameCanvas scr; </p><p> Block(GameCanvas scr) { </p><p> this.scr = scr
36、; </p><p> blockType = (int) (Math.random() * 1000) % 7; </p><p> turnState = (int) (Math.random() * 1000) % 4; </p><p> blockState = 1; </p><p> row = scr.
37、getInitRow(); </p><p> col = scr.getInitCol(); </p><p><b> } </b></p><p> public void reset() { </p><p> blockType = (int) (Math.random() * 1000)
38、 % 7; </p><p> turnState = (int) (Math.random() * 1000) % 4; </p><p> blockState = 1; </p><p> row = scr.getInitRow(); </p><p> col = scr.getInitCol(); &l
39、t;/p><p> dispBlock(1); </p><p><b> }</b></p><p> public void leftTurn() { </p><p> if (assertValid(blockType, (turnState + 1) % 4, row, col)) { <
40、/p><p> dispBlock(0); </p><p> turnState = (turnState + 1) % 4; </p><p> dispBlock(1); </p><p><b> } </b></p><p><b> } </b&g
41、t;</p><p> public void leftMove() { </p><p> if (assertValid(blockType, turnState, row, col - 1)) { </p><p> dispBlock(0); </p><p><b> col--; </b&g
42、t;</p><p> dispBlock(1); </p><p><b> } </b></p><p><b> } </b></p><p> public void rightMove() { </p><p> if (assertV
43、alid(blockType, turnState, row, col + 1)) { </p><p> dispBlock(0); </p><p><b> col++; </b></p><p> dispBlock(1); </p><p><b> } </b>
44、;</p><p><b> } </b></p><p> public boolean fallDown() { </p><p> if (blockState == 2) </p><p> return (false); </p><p> if (assertV
45、alid(blockType, turnState, row - 1, col)) { </p><p> dispBlock(0); </p><p><b> row--; </b></p><p> dispBlock(1); </p><p> return (true); </
46、p><p> } else { </p><p> blockState = 2; </p><p> dispBlock(2); </p><p> return (false); </p><p><b> } </b></p><p><
47、;b> } </b></p><p> // 判斷是否正確的方法 </p><p> boolean assertValid(int t, int s, int row, int col) { </p><p> int k = 0x8000; </p><p> for (int i = 0; i
48、 < 4; i++) { </p><p> for (int j = 0; j < 4; j++) { </p><p> if ((int) (pattern[t][s] & k) != 0) { </p><p> int temp = scr.getScrArrXY(row - i, col + j); </p
49、><p> if (temp < 0 || temp == 2) </p><p> return false; </p><p><b> } </b></p><p> k = k >> 1; </p><p><b> } </b&
50、gt;</p><p><b> } </b></p><p> return true; </p><p><b> } </b></p><p><b> } </b></p><p><b> 3.6方塊的消除&
51、lt;/b></p><p> 實現(xiàn)方塊滿行是刪除該行,并改變分?jǐn)?shù)輸出窗口的值</p><p> void deleteFullLine() { </p><p> int full_line_num = 0; </p><p> int k = 0; </p><p> for (int
52、i = 0; i < rowNum; i++) { </p><p> boolean isfull = true; </p><p> L1: for (int j = 0; j < columnNum; j++) </p><p> if (scrArr[i][j] == 0) { </p><p>&l
53、t;b> k++; </b></p><p> isfull = false; </p><p> break L1; </p><p><b> } </b></p><p> if (isfull) </p><p> full_line_nu
54、m++; </p><p> if (k != 0 && k - 1 != i && !isfull) </p><p> for (int j = 0; j < columnNum; j++) { </p><p> if (scrArr[i][j] == 0) </p><p>
55、 drawUnit(k - 1, j, 0); </p><p><b> else </b></p><p> drawUnit(k - 1, j, 2); </p><p> scrArr[k - 1][j] = scrArr[i][j]; </p><p><b> } <
56、;/b></p><p><b> } </b></p><p> for (int i = k - 1; i < rowNum; i++) { </p><p> for (int j = 0; j < columnNum; j++) { </p><p> drawUnit(i,
57、 j, 0); </p><p> scrArr[i][j] = 0; </p><p><b> } </b></p><p><b> } </b></p><p> ELS.score += full_line_num; </p><p>
58、 ELS.scoreField.setText("" + ELS.score); </p><p><b> } </b></p><p><b> 四.軟件測試運行</b></p><p><b> 1.游戲開始運行</b></p><p&
59、gt; 2.增加難度并填滿一行后,消去該行,分?jǐn)?shù)增加</p><p> 3.列被填滿,彈出游戲結(jié)束窗口</p><p> 五.課程設(shè)計總結(jié)及體會</p><p> 本次課程設(shè)計花費了小組成員一周的時間來完成。從設(shè)計開始選擇課題到最終完成課程設(shè)計,小組成員分工明確,相互合作,按時完成了相關(guān)任務(wù)。通過這次的實驗,我們學(xué)習(xí)到了很多Java編程的知識,同時對這學(xué)期的
60、課本所學(xué)知識有了進(jìn)一步鞏固.特別是多線程,AWT組件和事件等能更熟練的運用.</p><p> 這次實驗過后,我們發(fā)現(xiàn),動手比看書更能獲取實際有用的知識.很多知識,在書本上看似很有道理,可是這些知識在與實際情況結(jié)合起來往往就會出現(xiàn)書本上沒見過的情況,或者說之前的理解與實際的使用是截然不同的.所以,真理是從實踐中得知的,而且也只有實踐才能檢驗真理.而這次試驗也加強(qiáng)了我們這些方面的理解能力,對書面上的東西實際操作在
61、具體項目上有了一個更加清晰的認(rèn)識。我們還意識到一個大的程序,在寫代碼前,一定要有良好的需求分析和結(jié)構(gòu)設(shè)計,應(yīng)該占整個程序設(shè)計的大部分時間,一個好的程序,分析設(shè)計應(yīng)該要非常充分,這樣才不至于代碼寫了一半才發(fā)現(xiàn)很多錯誤。在具體代碼操作之前的設(shè)計規(guī)劃與構(gòu)建才是一個優(yōu)秀的程序設(shè)計的靈魂。</p><p> 設(shè)計過程中,我們另一個大的一個體會就是合作的好處,通過互相幫助,大大的提高了工作的效率。同時我們也發(fā)現(xiàn)了自己的不足
62、之處。對于很多自己以為很熟悉的東西,在細(xì)節(jié)上的把握有許多不足;有些想當(dāng)然,認(rèn)為它應(yīng)該是這樣,而忽略的事實。這也讓我們明白,做事細(xì)心是必須的,所謂細(xì)節(jié)決定成敗!</p><p> 程序還有很多不足,在今后的日子里,我們會虛心向老師同學(xué)請教,盡自己最大的努力做到最好。</p><p><b> 六.參考文獻(xiàn)</b></p><p> [1].
63、《Java程序設(shè)計之網(wǎng)絡(luò)編程》,李芝興,楊瑞龍著,清華大學(xué)出版社</p><p> [2].《Java語言與面向?qū)ο蟪绦蛟O(shè)計》,印旻編著,清華大學(xué)出版社 </p><p> [3].《Java程序設(shè)計實用教程》,朱站立、沈偉編著,電子工業(yè)出版社</p><p><b> 附錄:重要代碼</b></p><p&
64、gt; class GameCanvas extends Canvas implements KeyListener { </p><p> final int unitSize = 25; // 小方塊邊長 </p><p> int rowNum; // 正方格的行數(shù) </p><p> int columnNum; // 正方格的列數(shù)
65、</p><p> int maxAllowRowNum; // 允許有多少行未消 </p><p> int blockInitRow; // 新出現(xiàn)塊的起始行坐標(biāo) </p><p> int blockInitCol; // 新出現(xiàn)塊的起始列坐標(biāo) </p><p> int[][] scrArr; // 屏幕數(shù)組 &
66、lt;/p><p> Block b; // 對方快的引用 </p><p> GameCanvas() { </p><p> rowNum = 18; </p><p> columnNum = 12; </p><p> maxAllowRowNum = rowNum - 2; </
67、p><p> b = new Block(this); </p><p> blockInitRow = rowNum - 1; </p><p> blockInitCol = columnNum / 2 - 2; </p><p> scrArr = new int[32][32]; </p><p
68、><b> } </b></p><p> // 初始化屏幕,并將屏幕數(shù)組清零的方法 </p><p> void initScr() { </p><p> for (int i = 0; i < rowNum; i++) </p><p> for (int j = 0; j &
69、lt; columnNum; j++) </p><p> scrArr[i][j] = 0; </p><p> b.reset(); </p><p> repaint(); </p><p><b> } </b></p><p> // 重新刷新畫布方法
70、</p><p> public void paint(Graphics g) { </p><p> for (int i = 0; i < rowNum; i++) </p><p> for (int j = 0; j < columnNum; j++) </p><p> drawUnit(i, j,
71、scrArr[i][j]); </p><p><b> } </b></p><p> // 畫方塊的方法 </p><p> public void drawUnit(int row, int col, int type) { </p><p> scrArr[row][col] = type
72、; </p><p> Graphics g = getGraphics(); </p><p> switch (type) { // 表示畫方快的方法 </p><p> case 0: </p><p> g.setColor(Color.black); </p><p> brea
73、k; // 以背景為顏色畫 </p><p> case 1: </p><p> g.setColor(Color.green); </p><p> break; // 畫正在下落的方塊 </p><p> case 2: </p><p> g.setColor(Color.gray
74、); </p><p> break; // 畫已經(jīng)落下的方法 </p><p><b> } </b></p><p> g.fill3DRect(col * unitSize, getSize().height - (row + 1) * unitSize, </p><p> unitSiz
75、e, unitSize, true); </p><p> g.dispose(); </p><p><b> } </b></p><p> public Block getBlock() { </p><p> return b; // 返回block實例的引用 </p>
76、<p><b> } </b></p><p> // 返回屏幕數(shù)組中(row,col)位置的屬性值 </p><p> public int getScrArrXY(int row, int col) { </p><p> if (row < 0 || row >= rowNum || col &l
77、t; 0 || col >= columnNum) </p><p> return (-1); </p><p><b> else </b></p><p> return (scrArr[row][col]); </p><p><b> } </b></
78、p><p> // 返回新塊的初始行坐標(biāo)方法 </p><p> public int getInitRow() { </p><p> return (blockInitRow); // 返回新塊的初始行坐標(biāo) </p><p><b> } </b></p><p> //
79、 返回新塊的初始列坐標(biāo)方法 </p><p> public int getInitCol() { </p><p> return (blockInitCol); // 返回新塊的初始列坐標(biāo) </p><p><b> } </b></p><p> public void reportGame
80、Over() {</p><p> JOptionPane.showMessageDialog(this, "Game Over!請繼續(xù)努力");</p><p><b> }</b></p><p> // 滿行刪除方法 </p><p> void deleteFullLine() {
81、 </p><p> int full_line_num = 0; </p><p> int k = 0; </p><p> for (int i = 0; i < rowNum; i++) { </p><p> boolean isfull = true; </p><p>
82、 L1: for (int j = 0; j < columnNum; j++) </p><p> if (scrArr[i][j] == 0) { </p><p><b> k++; </b></p><p> isfull = false; </p><p> break L1;
83、 </p><p><b> } </b></p><p> if (isfull) </p><p> full_line_num++; </p><p> if (k != 0 && k - 1 != i && !isfull) </p><
84、p> for (int j = 0; j < columnNum; j++) { </p><p> if (scrArr[i][j] == 0) </p><p> drawUnit(k - 1, j, 0); </p><p><b> else </b></p><p> dra
85、wUnit(k - 1, j, 2); </p><p> scrArr[k - 1][j] = scrArr[i][j]; </p><p><b> } </b></p><p><b> } </b></p><p> for (int i = k - 1; i <
86、; rowNum; i++) { </p><p> for (int j = 0; j < columnNum; j++) { </p><p> drawUnit(i, j, 0); </p><p> scrArr[i][j] = 0; </p><p><b> } </b>&l
87、t;/p><p><b> } </b></p><p> ELS.score += full_line_num; </p><p> ELS.scoreField.setText("" + ELS.score); </p><p><b> } </b>
88、;</p><p> boolean isGameEnd() { </p><p> for (int col = 0; col < columnNum; col++) { </p><p> if (scrArr[maxAllowRowNum][col] != 0){</p><p> reportGameOver()
89、;</p><p> return true;</p><p><b> } </b></p><p><b> } </b></p><p> return false;</p><p><b> } </b></p>
90、<p> public void keyTyped(KeyEvent e) { </p><p><b> } </b></p><p> public void keyReleased(KeyEvent e) { </p><p><b> } </b></p><
91、;p> public void keyPressed(KeyEvent e) { </p><p> if (!ELS.isPlay) </p><p> return; </p><p> switch (e.getKeyCode()) { </p><p> case KeyEvent.VK_DOWN:
92、 </p><p> b.fallDown(); </p><p><b> break; </b></p><p> case KeyEvent.VK_LEFT: </p><p> b.leftMove(); </p><p><b> break; &
93、lt;/b></p><p> case KeyEvent.VK_RIGHT: </p><p> b.rightMove(); </p><p><b> break; </b></p><p> case KeyEvent.VK_UP: </p><p> b.
94、leftTurn(); </p><p><b> break; </b></p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p&g
95、t; class Command implements ActionListener { </p><p> static final int button_play = 1; </p><p> static final int button_levelup = 2; </p><p> static final int button_leve
96、ldown = 3; </p><p> static final int button_quit = 4; </p><p> static final int button_pause = 5; </p><p> static boolean pause_resume = true; </p><p> int
97、curButton; </p><p> GameCanvas scr; </p><p> Command(int button, GameCanvas scr) { </p><p> curButton = button; </p><p> this.scr = scr; </p><p&g
98、t;<b> } </b></p><p> // 按鈕執(zhí)行方法 </p><p> public void actionPerformed(ActionEvent e) { </p><p> switch (curButton) { </p><p> case button_play:
99、 </p><p><b> { </b></p><p> ELS.isPlay = true; </p><p> ELS.score = 0; </p><p> ELS.scoreField.setText("0"); </p><p> EL
100、S.timer.resume(); </p><p> scr.initScr(); </p><p><b> } </b></p><p> scr.requestFocus(); </p><p><b> break; </b></p><p&g
101、t; case button_levelup: </p><p> if (ELS.level < 10) { </p><p> ELS.level++; </p><p> ELS.levelField.setText("" + ELS.level); </p><p> ELS.sco
102、re = 0; </p><p> ELS.scoreField.setText("" + ELS.score); </p><p><b> } </b></p><p> scr.requestFocus(); </p><p><b> break; <
103、;/b></p><p> case button_leveldown: </p><p> if (ELS.level > 1) { </p><p> ELS.level--; </p><p> ELS.levelField.setText("" + ELS.level); <
104、;/p><p> ELS.score = 0; </p><p> ELS.scoreField.setText("" + ELS.score); </p><p><b> } </b></p><p> scr.requestFocus(); </p><p
105、><b> break; </b></p><p> case button_pause: </p><p> if (pause_resume) { </p><p> ELS.timer.suspend(); </p><p> pause_resume = false; <
106、/p><p><b> return;</b></p><p> } else { </p><p> ELS.timer.resume(); </p><p> pause_resume = true; </p><p><b> } </b><
107、/p><p> scr.requestFocus(); </p><p><b> break; </b></p><p> case button_quit: </p><p> System.exit(0); </p><p><b> } </b&g
108、t;</p><p><b> } </b></p><p><b> } </b></p><p><b> //方塊類 </b></p><p> class Block { </p><p> static int[][]
109、 pattern = { </p><p> { 0x0f00, 0x4444, 0x0f00, 0x4444 },// 用十六進(jìn)至表示,本行表示長條四種狀態(tài) </p><p> { 0x04e0, 0x0464, 0x00e4, 0x04c4 }, </p><p> { 0x4620, 0x6c00, 0x4620, 0x6c00 }, &
110、lt;/p><p> { 0x2640, 0xc600, 0x2640, 0xc600 }, </p><p> { 0x6220, 0x1700, 0x2230, 0x0740 }, </p><p> { 0x6440, 0x0e20, 0x44c0, 0x8e00 }, </p><p> { 0x0660, 0x066
111、0, 0x0660, 0x0660 } }; </p><p> int blockType; </p><p> int turnState; </p><p> int blockState; </p><p> int row, col; </p><p> GameCanvas sc
112、r; </p><p> Block(GameCanvas scr) { </p><p> this.scr = scr; </p><p> blockType = (int) (Math.random() * 1000) % 7; </p><p> turnState = (int) (Math.random()
113、* 1000) % 4; </p><p> blockState = 1; </p><p> row = scr.getInitRow(); </p><p> col = scr.getInitCol(); </p><p><b> } </b></p><p>
114、 public void reset() { </p><p> blockType = (int) (Math.random() * 1000) % 7; </p><p> turnState = (int) (Math.random() * 1000) % 4; </p><p> blockState = 1; </p>
115、<p> row = scr.getInitRow(); </p><p> col = scr.getInitCol(); </p><p> dispBlock(1); </p><p><b> }</b></p><p> public void leftTurn() { &
116、lt;/p><p> if (assertValid(blockType, (turnState + 1) % 4, row, col)) { </p><p> dispBlock(0); </p><p> turnState = (turnState + 1) % 4; </p><p> dispBlock(1);
117、 </p><p><b> } </b></p><p><b> } </b></p><p> public void leftMove() { </p><p> if (assertValid(blockType, turnState, row, col - 1)) {
118、 </p><p> dispBlock(0); </p><p><b> col--; </b></p><p> dispBlock(1); </p><p><b> } </b></p><p><b> } </b
119、></p><p> public void rightMove() { </p><p> if (assertValid(blockType, turnState, row, col + 1)) { </p><p> dispBlock(0); </p><p><b> col++; </
120、b></p><p> dispBlock(1); </p><p><b> } </b></p><p><b> } </b></p><p> public boolean fallDown() { </p><p> if (block
121、State == 2) </p><p> return (false); </p><p> if (assertValid(blockType, turnState, row - 1, col)) { </p><p> dispBlock(0); </p><p><b> row--; </
122、b></p><p> dispBlock(1); </p><p> return (true); </p><p> } else { </p><p> blockState = 2; </p><p> dispBlock(2); </p><p>
123、 return (false); </p><p><b> } </b></p><p><b> } </b></p><p> // 判斷是否正確的方法 </p><p> boolean assertValid(int t, int s, int row, int c
124、ol) { </p><p> int k = 0x8000; </p><p> for (int i = 0; i < 4; i++) { </p><p> for (int j = 0; j < 4; j++) { </p><p> if ((int) (pattern[t][s] & k
125、) != 0) { </p><p> int temp = scr.getScrArrXY(row - i, col + j); </p><p> if (temp < 0 || temp == 2) </p><p> return false; </p><p><b> } </b&
126、gt;</p><p> k = k >> 1; </p><p><b> } </b></p><p><b> } </b></p><p> return true; </p><p><b> } </b&g
127、t;</p><p> // 同步顯示的方法 </p><p> public synchronized void dispBlock(int s) { </p><p> int k = 0x8000; </p><p> for (int i = 0; i < 4; i++) { </p>&l
128、t;p> for (int j = 0; j < 4; j++) { </p><p> if (((int) pattern[blockType][turnState] & k) != 0) { </p><p> scr.drawUnit(row - i, col + j, s); </p><p><b> }
129、 </b></p><p> k = k >> 1; </p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p><b
130、> } </b></p><p><b> //定時線程 </b></p><p> class MyTimer extends Thread { </p><p> GameCanvas scr; </p><p> public MyTimer(GameCanvas scr
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 課程設(shè)計---俄羅斯方塊
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- c課程設(shè)計--俄羅斯方塊
- 俄羅斯方塊課程設(shè)計報告
- 俄羅斯方塊課程設(shè)計報告
- 簡單俄羅斯方塊課程設(shè)計
- java俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計論文
- arm課程設(shè)計俄羅斯方塊
- 課程設(shè)計--俄羅斯方塊設(shè)計報告
- c_課程設(shè)計-俄羅斯方塊
- c++俄羅斯方塊課程設(shè)計
- 俄羅斯方塊游戲課程設(shè)計報告
- java課程設(shè)計--俄羅斯方塊游戲
評論
0/150
提交評論