(Java ) . 1.1 開發(fā)一個俄羅斯方塊游戲。游戲者移動和旋轉(zhuǎn)窗口內(nèi)落下的方塊,方塊在一行堆滿后就巖穗可以消掉,并得到相應(yīng)的分數(shù);如果方塊堆積至窗口頂端,即告負。 1.2 在游戲程序中,我們可以將它看成3 個對象,分別是程序窗體主類對象、方塊數(shù)據(jù)管理對象、控制游戲自動下落的定時器線程對象、三個背景音樂對象。 窗體主類對象: 方塊數(shù)據(jù)管理對象: 控制游戲自動下落的定時器線程對象: 三個背景音樂對象: 1.3 開發(fā)工具:Sun NetBeans IDE 6.1 NetBeans IDE 是一個為軟件開發(fā)者提供的自由、開源的集成開發(fā)環(huán)境。您可以從中獲得您所需要的所有工具,用 Java、C/C++ 甚至是 Ruby 來創(chuàng)建專業(yè)的桌面應(yīng)用程序、企業(yè)應(yīng)用程序、web 和移動應(yīng)用程序。此 IDE 可以在多種平臺上運行,包括 Windows、Linux、Mac OS X 以及 Solaris;它易于安裝且非常方便使用。6.0 發(fā)行版包含了重要的增強功能和新特性,包括完全重寫的編輯器基礎(chǔ)結(jié)構(gòu)、對擴展語言的支持、新的生產(chǎn)率特性,以及一個能讓您根據(jù)實際需求安裝并配置 IDE 的簡化安裝過程。 . 2.1 游戲數(shù)據(jù)與界面顯示相分離,用游戲結(jié)構(gòu)數(shù)據(jù)描述游戲的狀態(tài),玩家操作或游戲自行走一步,程序中都通過粗神卜修改游戲數(shù)據(jù)來體現(xiàn),即每走一步,程序會修改當(dāng)前的游戲數(shù)據(jù),判斷游戲是否結(jié)束了,也是通過對游戲數(shù)據(jù)的分析來作出結(jié)論。游戲界面是根據(jù)當(dāng)時游戲數(shù)據(jù)來繪制的,當(dāng)數(shù)據(jù)改變時,要清除原圖形并重繪。總之,游戲的邏輯設(shè)計是針對游戲數(shù)據(jù),而不是游戲界面。界面只是間接地向玩家顯示結(jié)果。因此,在設(shè)計函數(shù)時,大致分二類:與玩家操作事件有關(guān)的數(shù)據(jù)處理函數(shù),與界面效果有關(guān)的圖形繪制函數(shù)。游戲運行過程由窗體監(jiān)聽到的鍵盤事件控制 主要流程圖如下: 制造新的方塊 方 向鍵 的控 制與方法 IsCanChangeTo() Anthem類 游戲背景音樂當(dāng)游戲開始時啟動 Class RussionGame clearblock() makeblock() moveright() movedown() moveleft() turnleft() turnright() Anthem2 類 按鍵的聲音當(dāng)觸發(fā)方向鍵的方法時響應(yīng) formKeyPressed() 當(dāng)游戲結(jié)束后啟動另一首音樂 定義一個線程類,在后臺自動地按游戲速度,移動方塊。 CheckAndCutLine() IsOver() Anthem3 類 檢查某一行是否為全填充,如是,消掉并返回1 IsHitBottom() 判斷當(dāng)前方塊是否已觸底,并處理 TimerRuner 游戲數(shù)據(jù)管理對象:主要管理著兩方面數(shù)據(jù):方塊的坐標(biāo)數(shù)據(jù)和游戲空間數(shù)據(jù)。用成員數(shù)組變量描述游戲空間狀態(tài),根據(jù)游戲空間狀態(tài)判斷游戲是否結(jié)束。用它的成員變量保存方塊的形狀數(shù)據(jù)及坐標(biāo)數(shù)據(jù),定義當(dāng)方塊走動方塊數(shù)據(jù)變化的處理方法。此外,還把各種游戲?qū)傩詳?shù)據(jù)作為其成員變量。 控制游戲自動下落的定時器線程對象:是一個線程類派生對象,獨立運行,每隔一段時間控制方塊下落下格。 窗體界面主類對象:負責(zé)繪制游戲圖象、包含游戲設(shè)置的各種控件(如:設(shè)置速度的文本框、顯示得分的標(biāo)簽、開始及暫停按鈕),負責(zé)游戲的各種屬性數(shù)據(jù)的讀入及顯示輸出,最重要的是:瞎橋它還是一個鍵盤事件處理類,監(jiān)聽玩家的鍵盤操作,處理鍵盤事件,在鍵盤事件處理函數(shù)中調(diào)用游戲數(shù)據(jù)管理對象的方法,控制游戲的運行。我們還把游戲數(shù)據(jù)管理對象、控制游戲自動下落的定時器線程對象作為它的成員變量。 往面板中加入需要的控件(2 個 Jlable,2 個 JcomboBox,4 個 Jbottun),并布置好它們的位置,并重命名控件對象變量的名稱,如上圖: 2.3 1. 首先對于方塊的構(gòu)造分析,可以用一個三維數(shù)組來表示,方塊總共有四種基本形,其它形狀可由這四種基本形通過旋轉(zhuǎn)得到,如下圖: class RussionBlockGame { final int sp_WIDTH = 20; // final int sp_HIGHT = 20; // final int boxtypes[4][4][2]={ {{-1,0},{0,0},{1,0},{2,0}}, {{-1,0},{0,0},{1,0},{1,-1}}, {{-1,0},{0,0},{1,0},{0,-1}}, {{-1,0},{0,0},{1,0},{-1,-1}} };/* */ int box[4][2]; /* */ int cx, cy; /* */ int type; /* ( 0,1,2,3)*/ int block_box[][]=new int[4][2]; /* */ int block_cx, block_cy; /* */ int block_type; /* ( 0,1,2,3)*/ int gamespace[][] = new int[sp_HIGHT][sp_WIDTH] ; void makeblock()// { block_type = (int)(Math.random()*100)%4;//產(chǎn)生一個1-4 的隨機數(shù) for(int i=0; i4;i++) block_box[i] = types[block_type][i]; block_cx=sp_WIDTH/2; block_cy=0; } HIGHT WIDTH (cx,cy)= (11,4) (WIDTH-1,HIGHT-1) 游戲空間可以看成由sp_WIDTH × sp_HIGHT 個正方形小格子構(gòu)成,每格子都有一個相對于左上角的坐標(biāo)。可以用一個sp_WIDTH × sp_HIGHT 的二維數(shù)組表示游戲空間。如下: int gamespace[sp_WIDTH][sp_HIGHT]; 某格子對應(yīng)的數(shù)組元素的值為1,表示此格子已被方塊填充,為0 表示未被填充。 在游戲空間中,被方塊填充了的格子為深灰色,未被填充的格子為白色(底色),灰色格子觸及空間頂部時,游戲結(jié)束。即gamespace[0](二維數(shù)組第一排)中有元素的值為1 時,游戲結(jié)束。下面是判斷游戲是否結(jié)束的程序: boolean IsGameOver() { boolean flag=false; for(int i=0; i=sp_WIDTH || y=sp_HIGHT|| (y0 gamespace[y][x]==1)) { IsCan = false; break;} } return IsCan; } 4. , 判斷方塊是否已落到底,就是判斷方塊中每個小正方形格的正下方位置是否已被填充或出下界。 如已到底,把方塊所在的位置(格子)填充(對應(yīng) gamespace 1),還要查看是否有某行已被全填充,把被全填充的行消掉,并給用戶加分,程序片段如下: boolean IsHitBottom( ) / { boolean flag =false ; int i, x, y; for (i=0; i4; i++) { x= block_cx + block_box[i][0]; y= block_cy + block_box[i][1] + 1 ; if ( y=sp_HIGHT|| gamespace[y][x]==1) { flag = true; break; } } if( flag ) { for (i=0; i4; i++) { x= block_cx + block_box[i][0] ; y= block_cy + block_box[i][1] ; if(y=0) { gamespace[y][x]=1;} } for (i=0; i4; i++) { y= block_cy + block_box[i][1] ; while(y=0 CheckAndCutLine(y)) m_score += 100; } isplaying = ! IsGameOver(); } return flag; } 開始音樂時已被循環(huán)播放 w1.audioClips.loop(); Anthem2 w2 = new Anthem(); 當(dāng)觸發(fā)到按鍵事件時執(zhí)行formKeyPressed 方法,每當(dāng)系統(tǒng)取得某一個按鍵的鍵碼時程序都會自動執(zhí)行w2.audioClips2.play();直到游戲結(jié)束。 Anthem2 w3 = new Anthem() ; 當(dāng)觸發(fā)到game.IsOver 方法時證明游戲已結(jié)束這時程序會調(diào)用 w1.audioClips.stop(); w3.audioClips3.play(); 背景音樂消失,結(jié)束音樂開始。 6. 游戲窗體的設(shè)計視圖中,選擇“開始游戲”按鈕,再右鍵點擊“開始游戲”按鈕,從菜單中選“事件”->“Action”事件類型->“actionPerformed”接口方法,將轉(zhuǎn)到源視圖中事件處理代碼處,加入我們的處理代碼,使得游戲開始,如下: private void jButton_startActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=true; this.requestFocusInWindow(); new TimerRuner(this); } 用同樣的方法編寫“暫停游戲”、“結(jié)束游戲”、“退出游戲”的點擊事件處理代碼,代碼如下: private void jButton_stopActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=false; } private void jButton_overActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=false; game.cleargamespace(); } private void jButton_exitActionPerformed(java.awt.event.ActionEvent evt) { game.isplaying=false; System.exit(0); } 2.4 功能: 具有等級功能,不同的等級游戲的難度不一樣; 具有分數(shù)功能,消行可以得到分數(shù); 具有聲音,有背景音和執(zhí)行不同的操作出現(xiàn)不同的聲音; 具有設(shè)置功能,可以用來設(shè)置初始等級、開始行數(shù)、按鍵設(shè)置等。 3. /number2 方塊向下 /number4:方塊向下 /number3:方塊向右 PageDown 方塊向右翻傳 End 方塊向左傳 Start 游戲開始 背景音樂的開關(guān) Stop 暫停游戲 over 停止游戲 Speed:調(diào)整速度 :選擇方塊的背景色(默認為淺藍) 程序運行結(jié)果大部分按照預(yù)期設(shè)計一樣,但背景色的改變有時響應(yīng)過慢,而且每次打開音樂后必須重新按下start 鍵,這是該游戲的缺陷之一。鑒于此,已作出部分修正,雖然還沒有達到游戲更加人性化,但基本上能滿足游戲的多方面的需要了。

安陸網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
當(dāng)前名稱:俄羅斯java程序代碼 eclipse俄羅斯方塊代碼
文章鏈接:http://chinadenli.net/article20/dspjgco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、定制網(wǎng)站、做網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)