freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于java的俄羅斯方塊的設(shè)計(jì)和實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2025-04-03 09:45 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 {0x0660, 0x0660, 0x0660, 0x0660}, // 方塊的四種狀態(tài) }。 13 以下為與數(shù)組相對(duì)應(yīng)的方塊樣式截圖。 ? 長(zhǎng)條型的四種狀態(tài) 圖 43 長(zhǎng)條型狀態(tài)截圖 ? 39。T39。型的四種狀態(tài) 圖 44 T型狀態(tài)截圖 ? 反 39。Z39。型的四種狀態(tài) 圖 45 反 Z型狀態(tài)截圖 ? 39。Z39。型的四種狀態(tài) 圖 46 Z型狀態(tài)截圖 14 ? 39。739。型的四種狀態(tài) 圖 47 7型狀態(tài)截圖 ? 反 39。739。型的四種狀態(tài) 圖 48 反 7型狀態(tài)截圖 ? 方塊的四種狀態(tài) 圖 49 方塊狀態(tài)截圖 方塊移動(dòng)、旋轉(zhuǎn)設(shè)計(jì) 方塊的翻轉(zhuǎn)與移動(dòng)比較容易實(shí)現(xiàn),方 塊移動(dòng)只需要改變方塊的橫坐標(biāo)或縱坐標(biāo),然后重新繪制方塊即可。方塊翻轉(zhuǎn)也只需要改變背景數(shù)組的值,重新繪制方塊即可。 本游戲方塊下落時(shí),進(jìn)行動(dòng)態(tài)繪制,實(shí)現(xiàn) Cloneable 接口 , 以指示 () 方法可以合法地對(duì)該類(lèi)實(shí)例進(jìn)行按字段復(fù)制。 方塊的操作類(lèi) BlockOperation 繼承Thread 類(lèi),重寫(xiě) run()方法,以實(shí)現(xiàn)方塊的動(dòng)態(tài)正確下落。當(dāng)然,在線(xiàn)程中要判定方塊是處于 moving 狀態(tài)還是 pausing狀態(tài)。 public void run() { //moving判定方塊是否在動(dòng)態(tài)下落 while (moving) { 15 try { //betweenleveltime指示相鄰等級(jí)之間相差時(shí)間 sleep(betweenleveltime * ( level + flatgene))。 } catch (InterruptedException ie) { ()。 } //pausing判定游戲是否處于暫停狀態(tài) if (!pausing) moving = (moveTo(y + 1, x) amp。amp。 moving)。 //moving是在等待的 100毫秒間, moving沒(méi)被改變 }} 當(dāng)然,在游戲中還要判定方塊移動(dòng)的邊界問(wèn)題, 比如,一個(gè)方塊在它左邊 正好差一個(gè)格子的空間才能夠翻轉(zhuǎn),但是它的右邊恰好有一個(gè)格子的空間,這種情況,如果方塊不能夠翻轉(zhuǎn),就不方便用戶(hù)操作,如果能夠翻轉(zhuǎn),就會(huì)發(fā)生越界,將已經(jīng)存在的方塊擠占掉。要想實(shí)現(xiàn)翻轉(zhuǎn)又不發(fā)生越界,那么,就應(yīng)該在方塊翻轉(zhuǎn)后把它往右邊移動(dòng)一個(gè)格子,然后再繪制方塊,這樣,方塊就不會(huì)擠占掉其它已經(jīng)固定住的方塊了,以下解決越界問(wèn)題。 1方塊翻轉(zhuǎn)判定 在兩種情況可能發(fā)生越界,一種是方塊落下去固定住以后,第二種是周?chē)目臻g不允許它進(jìn)行翻轉(zhuǎn)。 第一種情況只需要參考方塊落下去后不能夠再移動(dòng)的判定即可。 對(duì)于第二種情況,在每次方 塊翻轉(zhuǎn)前,必須首先計(jì)算出方塊周?chē)目臻g,如果空間允許則翻轉(zhuǎn)。否則,不能翻轉(zhuǎn)。 因?yàn)槠叻N方塊是不規(guī)則的,每種方塊要求的翻轉(zhuǎn)空間都是不一樣的,甚至是在它的不同翻轉(zhuǎn)狀態(tài)下,所要求的翻轉(zhuǎn)空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫(xiě)一個(gè)判定條件,但是這樣做未免過(guò)于麻煩。 根據(jù)觀察,不難發(fā)現(xiàn),七種形態(tài)的方塊,長(zhǎng)條形的方塊如果以橫條的形態(tài)下落,則只要能夠下落,就能翻轉(zhuǎn),如果以豎條的形態(tài)下落,那么它翻轉(zhuǎn)后所處的位置必須要有4x1 個(gè)格子的空間才能夠翻轉(zhuǎn)。對(duì)于田字形的方塊,只有能夠繼續(xù)下墜,就一定能夠 翻轉(zhuǎn),所以田字型的方塊只要沒(méi)有落下,就一直能夠翻轉(zhuǎn)。而其它五種形態(tài)的方塊,又有一個(gè)共同點(diǎn),就是它們都有兩種翻轉(zhuǎn)狀態(tài)橫向占三個(gè)格子的空間,豎直方向占兩個(gè)空間,另外兩種翻轉(zhuǎn)狀態(tài)橫向占兩個(gè)格子的空間,豎直方向占三個(gè)格子空間,如果他們是以橫向占三個(gè)格子的狀態(tài)下落,那么只要能下落,就一定能夠翻轉(zhuǎn),如果是以橫向兩個(gè)格子的狀態(tài)下落,那么在翻轉(zhuǎn)后,周?chē)仨氁?3x2 個(gè)格子的空間。 16 所以,方塊翻轉(zhuǎn)的判定,要分三種情況,第一種情況是方塊落下去后不能翻轉(zhuǎn);第二種情況是對(duì)豎直狀態(tài)出現(xiàn)的長(zhǎng)條形的方塊進(jìn)行翻轉(zhuǎn)判定;第三種情況是對(duì)除長(zhǎng)條 形和田字形之外的其它五種以橫向占兩個(gè)格子的狀態(tài)出現(xiàn)的方塊進(jìn)行翻轉(zhuǎn)判定。 何種情況下方塊能夠翻轉(zhuǎn)的問(wèn)題解決了,接下來(lái),我們就應(yīng)該解決方塊翻轉(zhuǎn)后所處的位置的問(wèn)題了,因?yàn)橹挥惺孪戎婪綁K翻轉(zhuǎn)后所處的位置,才能夠?qū)δ莻€(gè)位置的空間范圍進(jìn)行判定,判定它是否能夠容納方塊。 可以確定的是,無(wú)論方塊怎么翻轉(zhuǎn),都處在方塊數(shù)組中,也就是說(shuō)方塊必定是在游戲地圖中某一 4x4 個(gè)格子的空間范圍內(nèi)。 方塊數(shù)組在游戲主界面中的坐標(biāo)是確定的,不確定的是方塊翻轉(zhuǎn)后到底處在方塊數(shù)組的哪個(gè)位置,為了解決這個(gè)問(wèn)題,我們可以限定方塊在方塊數(shù)組中的存儲(chǔ)原 則是靠左、靠上,這樣,無(wú)論翻轉(zhuǎn)怎么翻轉(zhuǎn),方塊數(shù)組中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數(shù)組中的位置,也就可以得知方塊翻轉(zhuǎn)后在游戲地圖中的位置了。 假定方塊數(shù)組的橫縱坐標(biāo)是 x 和 y,那么,這個(gè)位置就是,長(zhǎng)條形的方塊翻轉(zhuǎn)后所處的那一行是游戲地圖的第 y行,所占的列是第 x 到 x+3 列,長(zhǎng)條形和田字形以外的五種方塊翻轉(zhuǎn)后的所占的行數(shù)是游戲地圖的第 y和第 y+1行,所占的列是第 x到 x+2 列。 所以,如果以上空間有空格子,方塊就能夠翻轉(zhuǎn)。 2翻轉(zhuǎn)越界糾正 只要方塊翻轉(zhuǎn)后所處的空間足夠,方塊就能夠翻轉(zhuǎn),但是,如 果方塊翻轉(zhuǎn)后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢? 方塊在邊界處時(shí),翻轉(zhuǎn)后不僅可能翻出地圖外,還可能發(fā)生數(shù)組越界,當(dāng)然,只需要將地圖數(shù)組定義得大一些,就能夠避免數(shù)組越界錯(cuò)誤,對(duì)于方塊越界,如果在它的另一邊有足夠空間,那么,就應(yīng)該把方塊往另一個(gè)方向移動(dòng)適當(dāng)?shù)膯挝?,糾正方塊越界錯(cuò)誤。如圖 410 方塊翻轉(zhuǎn)流程圖所示,方塊翻轉(zhuǎn)需要經(jīng)三次判定:是否已經(jīng)下落到底部、翻轉(zhuǎn)后是否有足夠空間、翻轉(zhuǎn)后是否越界。 17 開(kāi) 始接 收 到 翻 轉(zhuǎn) 信 息方 塊 是 否 落 下翻 轉(zhuǎn) 后 是 否 有足 夠 空 間翻 轉(zhuǎn) 后 是 否 越界翻 轉(zhuǎn) 越 界 糾 正結(jié) 束否是是不 能 翻 轉(zhuǎn)不 能 翻 轉(zhuǎn)直 接 翻 轉(zhuǎn)是否否 410 方塊翻轉(zhuǎn)處理流程圖 玩家操作鍵 盤(pán)實(shí)現(xiàn)方塊的移動(dòng)、旋轉(zhuǎn),代碼引進(jìn) ControlKeyListener 類(lèi)繼承KeyAdapter 類(lèi)進(jìn)行鍵盤(pán)監(jiān)聽(tīng)功能的實(shí)現(xiàn)。 KeyAdapter 類(lèi)繼承自 Object 類(lèi),實(shí) 現(xiàn)KeyListener 接口,用來(lái) 接收鍵盤(pán)事件的抽象適配器類(lèi)。此 類(lèi)中的方法為空。此類(lèi)存在的目的是方便創(chuàng)建偵聽(tīng)器對(duì)象。擴(kuò)展此類(lèi)即可創(chuàng)建 KeyEvent 偵聽(tīng)器并重寫(xiě)所需事件的方法 ,即是 ControlKeyListener 類(lèi)。 使用 ControlKeyListener 可創(chuàng)建偵聽(tīng)器對(duì)象,然后使用組件的 addKeyListener 方法向該組件注冊(cè)此偵聽(tīng)器對(duì)象。當(dāng)按下、釋放或鍵入某個(gè)鍵時(shí),將調(diào)用該偵聽(tīng)器對(duì)象中的相應(yīng)方法,并將 KeyEvent 傳遞給相應(yīng)的方法 。實(shí)現(xiàn)代碼如下: 18 private class ControlKeyListener extends KeyAdapter { public void keyPressed(KeyEvent ke) { if (!()) return。 BlockOperation blockope = ()。 switch (()) { case : ()。 break。 case : ()。 break。 case : ()。 break。 case : ()。 break。 default: break。}}} 控制面板模塊 菜單欄模塊設(shè)計(jì) 菜單欄中有“游戲”、“背景”、“控制”、“幫助”四個(gè)菜單選項(xiàng)?!坝螒颉边x項(xiàng)又分“新游戲”、“提高等級(jí)”、“降低等級(jí)”、“退出”四個(gè)選項(xiàng)。“背景”選項(xiàng)又分“前景色”、“背景色”,下分若干種顏色?!翱刂啤边x項(xiàng)分“開(kāi)始”、“暫?!薄ⅰ爸匦麻_(kāi)始”、“停止”?!皫椭边x項(xiàng)分“游戲幫助”、“關(guān)于”。相關(guān)截圖如圖 41圖 41圖 41圖 414 所示。 19 411 菜單欄“游戲”選項(xiàng) 412 菜單欄“背景”選項(xiàng) 413 菜單欄“控制”選項(xiàng) 414 菜單欄“幫助”選項(xiàng) 1“新游戲”的按鈕功能為實(shí)現(xiàn)游戲畫(huà)布的重新繪制,類(lèi)似 reset 的功能。該按鈕的監(jiān)聽(tīng)實(shí)現(xiàn)代碼如下 : // 新游戲 按鈕添加監(jiān)聽(tīng) (new ActionListener(){ public void actionPerformed(ActionEvent ae) { //停止游戲 stopGame()。 //讓游戲 “復(fù)位 ”到初始狀態(tài) reset()。 //設(shè)置游戲難度 setLevel(initlevel)。 } })。 20 2“提高等級(jí)”、“降低等級(jí)”按鈕用來(lái)手動(dòng)調(diào)節(jié)游戲的等級(jí),從而改變方塊下落的速度。 “退出”按鈕控制游戲隨時(shí)退出,終止游戲。 3“背景”按鈕中的“前景色”、“背景色”又有“黑色”、“白色”、“紅色”、“藍(lán)色”等選項(xiàng),根據(jù)選項(xiàng)可更改主界面和預(yù)顯窗口的背景色以及方塊的顏色。玩家可根據(jù)個(gè)人喜好,更改游戲窗口顏色,方 便,快捷。 4“控制”選項(xiàng)的“開(kāi)始”子選項(xiàng)控制游戲的開(kāi)始,點(diǎn)擊按鈕,方塊開(kāi)始下落。 5“幫助”按鈕中“游戲幫助”選項(xiàng),點(diǎn)擊可彈出對(duì)話(huà)框顯示游戲幫助信息,點(diǎn)擊6“關(guān)于”按鈕顯示與游戲軟件本身相關(guān)信息,具體信息如圖所示: 控制面板按鈕設(shè)計(jì) 本游戲控制面板中包含得分統(tǒng)計(jì)、等級(jí)統(tǒng)計(jì)、最高分記錄統(tǒng)計(jì)等字段, 其中的 TextField 控件均由游戲本身統(tǒng)計(jì)給出,玩家不能私自編輯。本游戲的游戲規(guī)則為每消一行得 10 分,每增加 100 分上升一個(gè)等級(jí),初始得分為 0,初始等級(jí)為 1,“最高分記錄”記錄游戲的目前最高 分記錄。 以下給出得分、等級(jí)更新字段的代碼: //當(dāng)一行被游戲者疊滿(mǎn)后,將此行清除,并為游戲者加分 // row int, 要清除的行,是由 BlockPaintesGame類(lèi)計(jì)算的 // synchronized設(shè)置同步 public synchronized void removeLine(int row) { // 繪制方塊 for (int i = row。 i 0。 i) { for (int j = 0。 j cols。 j++) boxes[i][j] = (BlockPaint) boxes[i 1][j].clone()。 } // 每次消行加 10分 score += 。 // 等級(jí)更新 scoreForLevelUpdate += 。 // 重繪畫(huà)布 repaint()。} 控制面板中按鈕的功能在 中已給出代碼,在此不再贅述。 21 5 系統(tǒng)的測(cè)試運(yùn)行 測(cè)試的意義及注意事項(xiàng) 軟件測(cè)試是軟件設(shè)計(jì)過(guò)程中極其重要的一個(gè)環(huán)節(jié),是保證軟件的質(zhì)量的重要保障。測(cè)試的方法的好壞會(huì)直接影響到軟件的好壞,進(jìn)行軟件測(cè)試可以找出其中的錯(cuò)誤、不足并加以改進(jìn),從而得到一個(gè)高效、可靠的系統(tǒng)。 軟件應(yīng)從多角度進(jìn)行測(cè)試和分析,這樣才能找出其中錯(cuò)誤的地方。測(cè)試的時(shí)間最好找一些與設(shè)計(jì)系統(tǒng)無(wú)關(guān)的人員,或者分析人員。因?yàn)樵陂_(kāi)發(fā)軟件的時(shí)候,開(kāi)發(fā)人員已經(jīng)形成了自己的思維定勢(shì),在測(cè)試的時(shí)候始終受到這種思想的束縛,很難找出其中的錯(cuò)誤而與設(shè)計(jì)無(wú)關(guān)的人員和那些分析人員很容易找出錯(cuò)誤所在。 在程序調(diào)試過(guò)程中一定要耐心仔細(xì),一個(gè)細(xì)微的 錯(cuò)誤將會(huì)導(dǎo)致整個(gè)功能不能實(shí)現(xiàn)導(dǎo)致浪費(fèi)很多的時(shí)間去修改。應(yīng)在以下幾方面加以注意: 1語(yǔ)法錯(cuò)誤 語(yǔ)法錯(cuò)誤是經(jīng)常碰到的錯(cuò)誤。例如,命令拼寫(xiě)錯(cuò)誤或傳遞給函數(shù)的參數(shù)不正確都將產(chǎn)生錯(cuò)誤。語(yǔ)法錯(cuò)誤可能導(dǎo)致不能繼續(xù)編寫(xiě)代碼。 2邏輯錯(cuò)誤 邏輯錯(cuò)誤通??赡苁菨撛诤碗y以檢測(cè)的。當(dāng)有因鍵入錯(cuò)誤或程序邏輯流程引起的邏輯錯(cuò)誤,可能會(huì)成功運(yùn)行,但產(chǎn)生的結(jié)果卻是錯(cuò)的。例如,當(dāng)本應(yīng)使用小于符號(hào)比較數(shù)值,但卻使用了大于符號(hào)時(shí),那么將返回不正確的結(jié)果。 3運(yùn)行時(shí)錯(cuò)誤 運(yùn)行時(shí)錯(cuò)誤是在執(zhí)行過(guò)程中指令試圖執(zhí)行不可能的動(dòng)作而導(dǎo)致的,必須糾正 運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤,這樣才能保證軟件運(yùn)行的可靠性。 本游戲在開(kāi)發(fā)過(guò)程中采用了多種有效措施進(jìn)行測(cè)試以保證軟件質(zhì)量,對(duì)本游戲進(jìn)行了邊界處旋轉(zhuǎn)、方塊翻轉(zhuǎn)越界等方面的測(cè)試,極大的保證了軟件質(zhì)量和出錯(cuò)幾率。但是系統(tǒng)中可能還存在著一些其他的錯(cuò)誤和缺陷,因此,游戲必須要經(jīng)過(guò)反復(fù)的運(yùn)行測(cè)試,盡最大量將 bug減到最少。 游戲代碼、算法的測(cè)試 1寫(xiě) get()方法時(shí)需要有返回值,但是程序中沒(méi)有寫(xiě) return 語(yǔ)
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1