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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-俄羅斯方塊游戲程序設(shè)計(jì)-文庫吧

2024-11-13 19:50 本頁面


【正文】 個(gè)良好的程序,在編寫之前,必須要制定各種編寫規(guī)范,以便組內(nèi)各成員協(xié)調(diào)工作。當(dāng)然,本游 戲只是一個(gè)小程序,過多的規(guī)范制定顯得沒有必要,但是,也必須制定一個(gè)對(duì)于變量的命名規(guī)則,這有利于設(shè)計(jì)出一個(gè)可讀性高的程序。 本程序變量的命名規(guī)則為: 所有變量一律使用相應(yīng)的英文單詞命名 如果同一類中需要?jiǎng)?chuàng)建多個(gè)同一類型,功能相似的變量,變量的前綴應(yīng)使用統(tǒng)一的英文單詞,后綴為下劃線“ _”加數(shù)字。 比如,從 JButton 對(duì)象創(chuàng)建開始按鈕,可以命名為 :startbutton。再如,創(chuàng)建多個(gè)道具按鈕,可以命名為 toolbutton_1,toolbutton_2 等等。 方法命名盡量使用能夠描述本方法功能的英文單詞 比如,游戲初始化可以用 gameinitial。 類名字命名也應(yīng)當(dāng)使用能夠描述本類功能的英文單詞。 如方塊類,可以用 class block。 游戲總體設(shè)計(jì)分析 Java 為純面向?qū)ο螅?ObjectOriented, OO)的程序語言,它的諸多優(yōu)點(diǎn)在此就不作論述了。從面向?qū)ο蟮挠^念出發(fā),本程序主要可分為以下幾個(gè)模塊: 1 客戶端 GUI 模塊 2 方塊及地圖數(shù)據(jù)模塊 3 音頻文件播放模塊 4 道具使用模塊 中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 8 系統(tǒng)流程結(jié)構(gòu)設(shè)計(jì) 生產(chǎn) 觸發(fā)按鍵事件 功能模塊圖的設(shè)計(jì) 模型層功能模塊圖設(shè)計(jì) 圖形工廠 圖形 障礙物 生產(chǎn)圖形 下落產(chǎn)生障礙 ShapeFactory 圖形工廠 Shape 定時(shí)下落 Ground Controller 處理按鍵事件 處理邏輯 GamePanel 顯示 中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 9 視圖層功能模塊圖設(shè)計(jì) 控制層功能模塊圖設(shè)計(jì) 游戲面板 GamePanel 方塊顯示 障礙物顯示 中央控制器 Controller 類 圖形工廠 生產(chǎn)圖形 顯示面板 顯示圖形 和障礙物 處理按 鍵和鼠 標(biāo)事件 中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 10 俄羅斯方塊流程圖 開始 到達(dá)底部 銷行操作 生成下一個(gè)下墜物 將新生的下墜物代替舊的“下一個(gè)下墜物” 將舊的“ 下一個(gè)下墜物”用作當(dāng)前下墜物 到達(dá)底部 銷行操作 游戲結(jié)束 游戲結(jié)束處理 結(jié)束 下一個(gè)下降單位 中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 11 旋轉(zhuǎn)方塊控制線程工作圖 否 否 是 是 否 是 開始 隨機(jī)休眠一定時(shí)間 休眠時(shí)間結(jié)束 檢測(cè)現(xiàn)有方塊是否已經(jīng)落下 休眠一定時(shí)間 得到新方塊 方塊是否已經(jīng)落下 游戲是否結(jié)束 休眠一定時(shí)間 旋轉(zhuǎn)方塊 結(jié)束 中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 12 5 詳細(xì)設(shè)計(jì) 運(yùn)用的各種類 Shape 類 Void moveLeft(); //左移 Void moveRidgt(); //右移 Void moveDown(); //下移 Void rotatel(); //旋轉(zhuǎn)(變形) Void drawMe(); //顯示 Ground 類 Void accept( Shape); //接受圖形,把圖形變成障礙物 Void drawMe(); //顯示 游戲顯示面板 GamePanel 類 Void display(); //顯示 Shape Factory 類(圖形工廠) Shape getShape(); //生產(chǎn)出不同形狀的圖形 圖形的產(chǎn)生 通過圖形工廠類 ShapeFactory 的 getShape(ShapeListener listener)方法隨機(jī)產(chǎn)生方塊的某種狀態(tài),這里運(yùn)用了工廠設(shè)計(jì)模式,這種設(shè)計(jì)模式是為了實(shí)現(xiàn)高內(nèi)聚低耦合而存在的,這種設(shè)計(jì)模式的通俗解釋就是:想要一個(gè)產(chǎn)品 ,需要讓工廠給生產(chǎn)一個(gè),要告訴工廠要生產(chǎn)什么產(chǎn)品,就把需要生產(chǎn)的這個(gè)產(chǎn)品當(dāng)做參數(shù)傳給工廠類的生產(chǎn)產(chǎn)品的方法,然后根據(jù)傳進(jìn)來的產(chǎn)品,而決定工廠人生產(chǎn)什么產(chǎn)品,產(chǎn)生出來產(chǎn)品后,最后要返回要的這個(gè)東西。 中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 13 方塊的翻轉(zhuǎn)與移動(dòng) 方塊的翻轉(zhuǎn)與移動(dòng)比較 容易實(shí)現(xiàn),方塊移動(dòng)只需要改變方塊的橫坐標(biāo)或縱坐標(biāo),然后重新繪制方塊即可。方塊翻轉(zhuǎn)也只需要改變方塊數(shù)據(jù)第二維 turnstate的值,然后重新繪制方塊即可。但是,這里邊也會(huì)出現(xiàn)一個(gè)問題,這何種時(shí)候,方塊不能再翻轉(zhuǎn)和移動(dòng) 。 方塊的移動(dòng) 很顯然,當(dāng)方塊移動(dòng)到地圖的左右邊界處,或者落下去后,不能再繼續(xù)移動(dòng);另一種情況就是,當(dāng)方塊要移動(dòng)的方向被其他方塊擋住時(shí),方塊不能再移動(dòng)。 確定方塊移動(dòng)的規(guī)則后,接下來就是如何將這種規(guī)則用算法表示的問題了。比如,當(dāng)方塊移動(dòng)的左邊界處時(shí),方塊不能再繼續(xù)往左移動(dòng)了,這個(gè) 時(shí)候,肯定有一個(gè)條件成立,那就是方塊的橫坐標(biāo)必定是小于或者等于零的。 如果方塊的橫坐標(biāo)等于 0,方塊就不能再移動(dòng),那么方塊數(shù)組的第一列至少有一個(gè)值為 1,這種情況比較簡單,但是,如果方塊數(shù)組的第一列全為 0時(shí),也就是說,當(dāng)方塊數(shù)組有 1的那列碰到邊界時(shí),方塊才不能移動(dòng),這個(gè)時(shí)候,首次出現(xiàn) 1 的那列的橫坐標(biāo)為 0,而方塊數(shù)組的橫坐標(biāo)肯定已經(jīng)小于 0了。 假定我們以 x記錄方塊數(shù)組的橫坐標(biāo),以 j記錄方塊不能移動(dòng)時(shí),方塊數(shù)組中首次出現(xiàn) 1 的那列,當(dāng)方塊不能移動(dòng)時(shí), x+j 的值必定是等于 0 的。 同理,當(dāng)方塊到達(dá)右邊界不能移動(dòng)時(shí), 我們可以從方塊數(shù)組的右邊開始檢測(cè),記錄下首先出現(xiàn) 1的那列的值,這個(gè)時(shí)候, x+j 一定是等于 14 的。 隨機(jī)產(chǎn)生一個(gè)數(shù) 隨機(jī)數(shù) 一字形 Z 字形 反 Z 7 字形 反 7 字 倒 T 形 田字形 中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 14 當(dāng)方塊落下后,方塊同樣不能再移動(dòng)。這又分為兩種情況,一種是要墜下的地方還沒有方塊,這個(gè)時(shí)候,只要可以記錄下方塊數(shù)組中最后出現(xiàn) 1的那一行,假定那是第 i行,這樣,只要 y+i 等于 24,就可以認(rèn)定方塊已經(jīng)落到游戲地圖的底部,不能再繼續(xù)下落。 當(dāng)要方塊下邊或者左右有方塊時(shí),可以確定下邊有方塊的那一格在游戲地圖中的縱坐標(biāo)是橫坐標(biāo)或縱坐標(biāo)是 x+j+1 或者 y+i+1,假定那一格的縱坐標(biāo)坐標(biāo)或者橫坐標(biāo)為 y 或 x,那么游戲地圖數(shù) 組中 [x+j+1][y]或者 [x][y+i+1]這個(gè)元素的值必定是 2。 綜合以上幾種情況,我們可以列出方塊移動(dòng)條件判定表,如表 : 表 方塊移動(dòng)條件判定表 1 2 3 4 5 6 7 8 條 件 是否有阻隔 T T T T T T T F x+j=0||gamearea[y+i][x+j+1]=2 T F T T T F T x+j=14||gamearea[y+i][x+j1]=2 F T F T F T T y+i=24||gamearea[y+i+1][x+j]=2 F F F F T T T 動(dòng) 作 左移動(dòng) √ √ √ 右移動(dòng) √ √ √ √ 下移動(dòng) √ √ √ √ √ 方塊的翻轉(zhuǎn) 大多數(shù)的俄羅斯方塊游戲的翻轉(zhuǎn)判定條件都比較簡單,即方塊處在邊界處時(shí)就不能再翻轉(zhuǎn),因?yàn)檫@種時(shí)候翻轉(zhuǎn)會(huì)發(fā)生數(shù)組越界錯(cuò)誤。試想一下,當(dāng)方塊移動(dòng)到邊界處,甚至還沒有到邊界處時(shí),就不能再翻轉(zhuǎn)了,無疑會(huì)給操作帶來大大地不方便性。 方塊翻轉(zhuǎn)的另一個(gè)問題就是,當(dāng)方塊下落過程中,左右兩邊都有方塊,周圍的空間不能再容許它翻轉(zhuǎn),往往很 多游戲沒有注意到這一點(diǎn),這就導(dǎo)致,方塊翻轉(zhuǎn)之后把原來存在的方塊給擠掉了,這個(gè)問題本質(zhì)上也是翻轉(zhuǎn)越界。 為了解決以上問題,游戲設(shè)計(jì)中應(yīng)該增加一個(gè)對(duì)于方塊能否翻轉(zhuǎn)的判定以及翻轉(zhuǎn)越界糾正功能。 1.方塊翻轉(zhuǎn)判定 如上所述,在兩種情況下一種是方塊落下去固定住以后,第二種是周圍的空中南林業(yè)科技大學(xué)本科畢業(yè) 設(shè)計(jì) 俄羅斯方塊游戲程序設(shè)計(jì) 第 頁 15 間不允許它進(jìn)行翻轉(zhuǎn)。 第一種情況好辦,只要參考方塊落下去后不能夠再移動(dòng)的判定即可。 對(duì)于第二種情況,在每次方塊翻轉(zhuǎn)前,必須首先計(jì)算出方塊周圍的空間,如果空間允許則翻轉(zhuǎn),否則,不能翻轉(zhuǎn)。 這里面又出現(xiàn)一個(gè)棘手的問題,因?yàn)槠叻N方塊是不 規(guī)則的,每種方塊要求的翻轉(zhuǎn)空間都是不一樣的,甚至是在它的不同翻轉(zhuǎn)狀態(tài)下,所要求的翻轉(zhuǎn)空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫一個(gè)判定條件,然后根據(jù)當(dāng)前的 blocktype 和 turnstate 值,選擇哪種判定條件進(jìn)行判定,但是這樣做未免過于麻煩。 根據(jù)觀察,不難發(fā)現(xiàn),七種形態(tài)的方塊,長條形的方塊如果以橫條的形態(tài)下落,則只有能夠下落,就能翻轉(zhuǎn),如果以豎條的形態(tài)下落,那么它翻轉(zhuǎn)后所處的位置必須要有 4x1 個(gè)格子的空間才能夠翻轉(zhuǎn);對(duì)于田字形的方塊,只有能夠繼續(xù)下墜,就一定能夠翻轉(zhuǎn),所以 田子型的方塊只要沒有落下,就一直能夠翻轉(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)下落,
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1