最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)俄羅斯方塊

 更新時(shí)間:2018年06月27日 09:05:38   作者:葉應(yīng)是葉  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

假期閑著無事,就用一周多的時(shí)間看了百度java吧的一位大神(alwing)發(fā)布的視頻,學(xué)著用java寫了一個(gè)俄羅斯方塊,在此就以發(fā)布源代碼以及必要講解的形式來感謝他的幫助。當(dāng)然我這里也是做了一些改動(dòng),做出來的程序界面以及功能沒有和他的完全一樣。

整個(gè)程序運(yùn)行起來的界面如下所示:

程序包含的功能有:

  • 俄羅斯方塊本身基本的游戲元素
  • 顯示下一輪出現(xiàn)的方塊、當(dāng)前等級(jí)、分?jǐn)?shù)、消行數(shù)等數(shù)值
  • 以值槽形式顯示當(dāng)前等級(jí)到下一等級(jí)的距離
  • 左上角頭像以及背景圖片會(huì)隨著等級(jí)的升高而改變
  • 循環(huán)播放背景音樂

一、

整個(gè)程序的設(shè)計(jì)如下圖所示,共有七個(gè)包。因?yàn)槌绦蛟鹊脑O(shè)計(jì)是會(huì)連接數(shù)據(jù)庫保存用戶名稱以及分?jǐn)?shù)的,而我的電腦又因?yàn)閿?shù)據(jù)庫軟件安裝失敗,所以功能上我做了調(diào)整。因此某些包名以及類名會(huì)與其本身功能不符。

二、

整個(gè)程序中最重要的界面編程是由UI包中的Layer類來建立的,它定義了一個(gè)方法使一張64乘64像素的圖片運(yùn)用drawImage函數(shù)來切割、拉伸成預(yù)定的寬度和高度,并使之顯示在指定的坐標(biāo),從而成為一個(gè)窗口。 UI包中的各個(gè)Layer***.java類都繼承了Layer類,分別用來實(shí)現(xiàn)各個(gè)窗口界面,如游戲主窗口(LayerGame)、等級(jí)窗口(LayerLevel)、分?jǐn)?shù)窗口(LayerPoint)等。此外我還在窗口表面覆蓋了一層半透明的圖片,從而實(shí)現(xiàn)了一種“朦朧感”。

三、

Img類是用來聲明所有的圖片對(duì)象的,我在聲明邊框圖片WINDOW時(shí),又故意寫錯(cuò)路徑,從而實(shí)現(xiàn)了無邊框效果。

四、

下落方塊的繪制也是采用圖片切割的方法

 

每個(gè)不同顏色的方塊都一樣大,每次使用drawImage函數(shù)來切割不同顏色的方塊。首先要把游戲主窗口看成是一個(gè)以左上角為原點(diǎn)的坐標(biāo)系,游戲主窗口寬為9,高為16,則右下角的坐標(biāo)應(yīng)該是(15,8),這樣就可以為下落方塊定義坐標(biāo)了。再采用List < Point[] >來保存下落方塊中各個(gè)小方塊的坐標(biāo)。

下落方塊應(yīng)該是如下七種形狀:

 

則方塊0到方塊6自由下落時(shí)的初始坐標(biāo)應(yīng)是:

TYPE_CONFIG=new ArrayList<Point[]>(7);
TYPE_CONFIG.add(new Point[]{new Point(4,0),new 
 Point(3,0),new Point(5,0),new Point(6,0)});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new 
 Point(3,0),new Point(5,0),new Point(4,1)});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new 
 Point(3,0),new Point(5,0),new Point(3,1)});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new 
 Point(5,0),new Point(3,1),new Point(4,1)});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new 
 Point(5,0),new Point(4,1),new Point(5,1)});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new 
 Point(3,0),new Point(5,0),new Point(5,1)});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new 
 Point(3,0),new Point(4,1),new Point(5,1)});

每一個(gè)方塊都有一個(gè)中心點(diǎn),當(dāng)方塊旋轉(zhuǎn)時(shí),方塊以該中心點(diǎn)位圓心進(jìn)行90°的旋轉(zhuǎn)。 旋轉(zhuǎn)方法如下:

五、

游戲的邏輯控制主要在GameService類中,實(shí)現(xiàn)了判斷是否能消行,消行操作,鍵盤相應(yīng)操作等

六、

程序中使用了dom4j-1.6.1.jar和jl1.0.1.jar兩個(gè)額外的jar包。 dom4j-1.6.1.jar用來讀取xml文件。在config文件夾中有個(gè)cfg.xml文件,當(dāng)中設(shè)置了各個(gè)窗口的大小以及位置。在程序中使用dom4j-1.6.1.jar來讀取xml數(shù)據(jù),然后根據(jù)這些數(shù)據(jù)來配置程序界面。因此只要改變了xml中的數(shù)值,就可以改變窗口的大小以及坐標(biāo)。

jl1.0.1.jar則是用來播放背景音樂的,這是我自己添加的功能,通過這個(gè)jar文件提供的方法,可以很簡單地實(shí)現(xiàn)播放音樂的功能,具體實(shí)現(xiàn)在MP3Player類和Main類中,需要在Main類中新建一個(gè)線程。 具體參考方法:JavaSwing后臺(tái)播放音樂

七、

源代碼程序下載:源代碼

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入解析Java多態(tài)進(jìn)階學(xué)習(xí)

    深入解析Java多態(tài)進(jìn)階學(xué)習(xí)

    java的動(dòng)態(tài)綁定機(jī)制非常重要。這篇文章將帶大家更深入的學(xué)習(xí)一下Java的多態(tài),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-07-07
  • java使用JNA(Java Native Access)調(diào)用dll的方法

    java使用JNA(Java Native Access)調(diào)用dll的方法

    java使用JNA(Java Native Access)調(diào)用windows系統(tǒng)的dll文件的例子
    2013-11-11
  • Java CyclicBarrier源碼層分析與應(yīng)用

    Java CyclicBarrier源碼層分析與應(yīng)用

    這篇文章主要介紹了Java CyclicBarrier的源碼層分析與應(yīng)用,CyclicBarrier也叫同步屏障,可以讓一組線程達(dá)到一個(gè)屏障時(shí)被阻塞,直到最后一個(gè)線程達(dá)到屏障,感興趣的的朋友可以參考下
    2023-12-12
  • ThreadLocal原理及內(nèi)存泄漏原因

    ThreadLocal原理及內(nèi)存泄漏原因

    這篇文章主要介紹了ThreadLocal原理及內(nèi)存泄漏原因,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • springboot jta atomikos實(shí)現(xiàn)分布式事物管理

    springboot jta atomikos實(shí)現(xiàn)分布式事物管理

    這篇文章主要介紹了springboot jta atomikos實(shí)現(xiàn)分布式事物管理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Servlet的兩種創(chuàng)建方式(xml?注解)示例詳解

    Servlet的兩種創(chuàng)建方式(xml?注解)示例詳解

    這篇文章主要為大家介紹了Servlet的兩種創(chuàng)建方式(xml?注解)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 區(qū)塊鏈常用數(shù)據(jù)庫leveldb用java來實(shí)現(xiàn)常規(guī)操作的方法

    區(qū)塊鏈常用數(shù)據(jù)庫leveldb用java來實(shí)現(xiàn)常規(guī)操作的方法

    這篇文章主要介紹了區(qū)塊鏈常用數(shù)據(jù)庫leveldb用java來實(shí)現(xiàn)常規(guī)操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Spring深入刨析聲明式事務(wù)

    Spring深入刨析聲明式事務(wù)

    在spring注解中,使用聲明式事務(wù),需要用到兩個(gè)核心的注解:@Transactional注解和@EnableTransactionManagement注解。將@Transactional注解加在方法上,@EnableTransactionManagement注解加在配置類上
    2022-12-12
  • java使用JWT的方法

    java使用JWT的方法

    這篇文章主要介紹了java使用JWT的方法,JWT是token的一種,一個(gè)JWT字符串包含三個(gè)部分分別是Header、Payload和Signature,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Seata?AT模式啟動(dòng)過程圖文示例詳解

    Seata?AT模式啟動(dòng)過程圖文示例詳解

    這篇文章主要為大家介紹了Seata?AT模式啟動(dòng)過程圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

德钦县| 易门县| 灵石县| 额尔古纳市| 夹江县| 枣强县| 太仓市| 安化县| 五大连池市| 鄯善县| 深泽县| 温州市| 新沂市| 宝丰县| 青州市| 乐平市| 洞头县| 科技| 金秀| 两当县| 凤庆县| 海丰县| 洪湖市| 宜丰县| 杭锦旗| 汉沽区| 文山县| 安徽省| 屏东市| 丹寨县| 奉新县| 志丹县| 平阴县| 宁强县| 临猗县| 泸水县| 张北县| 桐柏县| 西青区| 嘉善县| 改则县|