亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java的俄羅斯方塊游戲的設(shè)計(jì)與實(shí)現(xiàn)

        2017-05-22 21:23:54高成珍
        關(guān)鍵詞:游戲

        高成珍

        摘要:俄羅斯方塊是一款簡(jiǎn)單有趣的益智類小游戲,通過(guò)對(duì)游戲中包含的元素及其關(guān)系的分析,抽象出相應(yīng)的類和接口,通過(guò)對(duì)游戲過(guò)程的分析,抽象出關(guān)鍵的流程,并通過(guò)Java語(yǔ)言編程實(shí)現(xiàn)。

        關(guān)鍵詞:俄羅斯方塊;Java

        0引言

        俄羅斯方塊是一款經(jīng)久不衰的益智類小游戲,游戲規(guī)則簡(jiǎn)單、有趣,老少皆宜。對(duì)于Java初學(xué)者來(lái)說(shuō)是一個(gè)不錯(cuò)的練習(xí)項(xiàng)目,難度適中,不僅可以檢驗(yàn)知識(shí)的綜合運(yùn)用,提升開(kāi)發(fā)技能,培養(yǎng)面向?qū)ο缶幊趟季S,同時(shí)還可以激發(fā)學(xué)習(xí)興趣,增強(qiáng)自我效能感。

        1俄羅斯方塊游戲中核心元素

        游戲中核心元素包括3個(gè):各種形狀的方塊、底部障礙物以及游戲面板。游戲主要是控制方塊在面板上的移動(dòng)與變化以及障礙物的增加和消除。

        1.1方塊

        經(jīng)典的俄羅斯方塊游戲中方塊主要有7種類型,如圖1所示,每一種類型又有若干種變形,如圖2所示。

        根據(jù)圖2形狀的分析可以得出,所有的方塊都可以用一個(gè)4*4的格子表示,格子有兩種狀態(tài):空白和填充。對(duì)于不同的形狀,填充部分不同而已,所以可以用一個(gè)包含16個(gè)整型元素的一維數(shù)組來(lái)表示一種具體的形狀。當(dāng)需要填充時(shí),對(duì)應(yīng)的位置上的數(shù)字為1,否則位置上的數(shù)字為0。采用二維數(shù)組存儲(chǔ)一種類型的方塊,第一維表示的是第幾種變體,第二維表示具體形狀的數(shù)值。采用三維數(shù)組存儲(chǔ)所有的方塊,第一維表示哪一種類型,第二維表示該類型的第幾種變體,第三維表示具體形狀的數(shù)值。對(duì)于方塊來(lái)說(shuō)除了要知道它的形狀以外,還需要知道它的位置,并且能夠根據(jù)需要進(jìn)行移動(dòng)和變形,所以方塊類(Shape)的設(shè)計(jì)如圖3所示。

        1.2障礙物

        障礙物實(shí)際上就是不能移動(dòng)的方塊組合,障礙物會(huì)隨著游戲執(zhí)行過(guò)程而不斷增加或減少。與方塊類似可以采用一個(gè)二維數(shù)組來(lái)保存障礙物,數(shù)組的大小即為整個(gè)面板中橫向和縱向上格子的個(gè)數(shù),對(duì)于需要填充的格子數(shù)值標(biāo)記為1,空白格子對(duì)應(yīng)的數(shù)值為0。障礙物添加后需要判斷是否超出邊界,如果超出則游戲結(jié)束,同時(shí)需要判斷是否有滿行,有則需要?jiǎng)h除等等,障礙物類(Ground)的關(guān)鍵屬性和方法如圖4所示。

        1.3游戲面板

        游戲面板主要用于顯示方塊以及障礙物,需要指定寬度和高度,為了使程序更為靈活,面板的寬度和高度不指定為具體的數(shù)值,而是以格子為單位,指定包含多少個(gè)格子,通過(guò)靜態(tài)常量指定格子個(gè)數(shù)以及格子的邊長(zhǎng)。游戲面板類的關(guān)鍵屬性和方法如圖5所示。

        2俄羅斯方塊游戲關(guān)鍵流程

        俄羅斯方塊游戲的主要流程為:游戲開(kāi)始后,隨機(jī)生成方塊,啟動(dòng)線程讓方塊定時(shí)下落,監(jiān)聽(tīng)用戶的按鍵操作控制方塊的移動(dòng)和變形,及時(shí)刷新方塊位置,方塊位置變化后需重新判斷是否可以繼續(xù)移動(dòng),如果不能移動(dòng)則將其轉(zhuǎn)換成障礙物。轉(zhuǎn)換后需判斷是否可以消除障礙物,以及是否游戲結(jié)束。具體流程如圖6所示,程序運(yùn)行效果如圖7所示。

        3關(guān)鍵功能分析與設(shè)計(jì)

        3.1如何實(shí)現(xiàn)方塊的移動(dòng)

        方塊移動(dòng)有兩種類型:一種是定時(shí)自由下落;另一種是根據(jù)用戶的按鍵操作進(jìn)行變化,如左移、右移、下移或者旋轉(zhuǎn)。對(duì)于第一種移動(dòng)類型,通過(guò)單獨(dú)啟動(dòng)一個(gè)線程來(lái)完成,線程每隔一定的時(shí)間,執(zhí)行Shape的下移方法,下移后需通知面板及時(shí)刷新。因?yàn)镾hape類和GamePanel面板類不在同一個(gè)文件,二者之間不能直接通信,可借助于中介一控制器Controller。為Shape對(duì)象添加一個(gè)監(jiān)聽(tīng)變化的監(jiān)聽(tīng)器ShapeListener,而Controller實(shí)現(xiàn)了該接口,在創(chuàng)建Controller對(duì)象時(shí)傳遞GamePanel對(duì)象,形狀發(fā)生變化時(shí),會(huì)調(diào)用Controller的相應(yīng)方法,在該方法內(nèi)可調(diào)用GamePanel的顯示方法。對(duì)于第二種移動(dòng)類型,主要是通過(guò)監(jiān)聽(tīng)用戶按鍵的操作,然后根據(jù)所按的鍵,執(zhí)行相應(yīng)的操作(←表示左移,↓表示右移,↓表示下移,↑表示旋轉(zhuǎn)),最后同樣調(diào)用GamePanel的顯示方法,刷新界面。

        3.2方塊與障礙物的轉(zhuǎn)換及消除障礙物

        障礙物實(shí)際上就是不能移動(dòng)的方塊,當(dāng)方塊不能向下移動(dòng)時(shí),就需要將其轉(zhuǎn)換成障礙物,只需獲取方塊的位置,然后將障礙物中該位置對(duì)應(yīng)的值設(shè)置為1,然后重新繪制即可。轉(zhuǎn)換成障礙物后,循環(huán)遍歷每一行數(shù)據(jù),如果一行中所有的數(shù)據(jù)都為1,則表明這一行為滿格,需要消除,只需要將該行上面的所有數(shù)據(jù)集體向下移動(dòng)即可。

        4總結(jié)

        本文從面向?qū)ο缶幊趟枷氤霭l(fā),分析俄羅斯方塊游戲中主要的元素及其關(guān)系,抽象出相應(yīng)的類和接口,整體采用MVC模式,通過(guò)控制器控制對(duì)象間的通信與數(shù)據(jù)傳遞,具有較好的擴(kuò)展性和靈活性。對(duì)于提升初學(xué)者綜合運(yùn)用Java知識(shí)設(shè)計(jì)簡(jiǎn)單的系統(tǒng)具有一定的借鑒意義。

        猜你喜歡
        游戲
        做游戲
        夜間游戲
        游戲
        送信游戲
        數(shù)獨(dú)游戲
        瘋狂的游戲
        飛碟探索(2016年11期)2016-11-14 19:34:47
        爆笑游戲
        第八章直接逃出游戲
        第八章 直接逃出游戲
        游戲五計(jì)算
        日韩精品综合一本久道在线视频 | 人与动牲交av免费| 成人免费视频在线观看| 亚洲AV永久无码精品一区二国| 我的美艳丝袜美腿情缘| 无遮挡1000部拍拍拍免费| 中国内射xxxx6981少妇| 无码国产精品一区二区免费网曝| 国内偷拍视频一区二区| 精品国产sm最大网站| 人人妻人人澡人人爽精品欧美| 啪啪无码人妻丰满熟妇| 日韩精品有码中文字幕| 精品精品久久宅男的天堂| 日韩少妇内射免费播放| 日韩欧美国产亚洲中文| 一区二区三区日本久久| 国产玉足榨精视频在线观看| 天干天干啦夜天干天2017| 91精品国产综合久久青草| 看国产亚洲美女黄色一级片| 久久精品国产清自在天天线| 欧美黑人乱大交| 亚洲天堂中文字幕君一二三四| 激情五月我也去也色婷婷| 一本一本久久aa综合精品| 9999精品视频| 亚洲中文字幕乱码在线视频| 久久婷婷五月综合色奶水99啪| 亚洲国产长腿丝袜av天堂| 无码超乳爆乳中文字幕| 日韩精品免费在线视频一区| 轻点好疼好大好爽视频| 精品国产自产久久久| 国产在线精彩自拍视频| www夜片内射视频在观看视频| 国产亚洲情侣一区二区无| 久久久久久久久高潮无码| 亚洲免费女女在线视频网站| 极品少妇一区二区三区四区| 亚洲制服无码一区二区三区|