假期閑著無(wú)事,就用一周多的時(shí)間看了百度java吧的一位大神(alwing)發(fā)布的視頻,學(xué)著用java寫(xiě)了一個(gè)俄羅斯方塊,在此就以發(fā)布源代碼以及必要講解的形式來(lái)感謝他的幫助。當(dāng)然我這里也是做了一些改動(dòng),做出來(lái)的程序界面以及功能沒(méi)有和他的完全一樣。
成都創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊(duì),在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕十余年,專(zhuān)業(yè)且經(jīng)驗(yàn)豐富。十余年網(wǎng)站優(yōu)化營(yíng)銷(xiāo)經(jīng)驗(yàn),我們已為成百上千中小企業(yè)提供了成都網(wǎng)站制作、成都做網(wǎng)站解決方案,按需制作網(wǎng)站,設(shè)計(jì)滿意,售后服務(wù)無(wú)憂。所有客戶皆提供一年免費(fèi)網(wǎng)站維護(hù)!
整個(gè)程序運(yùn)行起來(lái)的界面如下所示:
程序包含的功能有:
一、
整個(gè)程序的設(shè)計(jì)如下圖所示,共有七個(gè)包。因?yàn)槌绦蛟鹊脑O(shè)計(jì)是會(huì)連接數(shù)據(jù)庫(kù)保存用戶名稱(chēng)以及分?jǐn)?shù)的,而我的電腦又因?yàn)閿?shù)據(jù)庫(kù)軟件安裝失敗,所以功能上我做了調(diào)整。因此某些包名以及類(lèi)名會(huì)與其本身功能不符。
二、
整個(gè)程序中最重要的界面編程是由UI包中的Layer類(lèi)來(lái)建立的,它定義了一個(gè)方法使一張64乘64像素的圖片運(yùn)用drawImage函數(shù)來(lái)切割、拉伸成預(yù)定的寬度和高度,并使之顯示在指定的坐標(biāo),從而成為一個(gè)窗口。 UI包中的各個(gè)Layer***.java類(lèi)都繼承了Layer類(lèi),分別用來(lái)實(shí)現(xiàn)各個(gè)窗口界面,如游戲主窗口(LayerGame)、等級(jí)窗口(LayerLevel)、分?jǐn)?shù)窗口(LayerPoint)等。此外我還在窗口表面覆蓋了一層半透明的圖片,從而實(shí)現(xiàn)了一種“朦朧感”。
三、
Img類(lèi)是用來(lái)聲明所有的圖片對(duì)象的,我在聲明邊框圖片WINDOW時(shí),又故意寫(xiě)錯(cuò)路徑,從而實(shí)現(xiàn)了無(wú)邊框效果。
四、
下落方塊的繪制也是采用圖片切割的方法
每個(gè)不同顏色的方塊都一樣大,每次使用drawImage函數(shù)來(lái)切割不同顏色的方塊。首先要把游戲主窗口看成是一個(gè)以左上角為原點(diǎn)的坐標(biāo)系,游戲主窗口寬為9,高為16,則右下角的坐標(biāo)應(yīng)該是(15,8),這樣就可以為下落方塊定義坐標(biāo)了。再采用List < Point[] >來(lái)保存下落方塊中各個(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類(lèi)中,實(shí)現(xiàn)了判斷是否能消行,消行操作,鍵盤(pán)相應(yīng)操作等
六、
程序中使用了dom4j-1.6.1.jar和jl1.0.1.jar兩個(gè)額外的jar包。 dom4j-1.6.1.jar用來(lái)讀取xml文件。在config文件夾中有個(gè)cfg.xml文件,當(dāng)中設(shè)置了各個(gè)窗口的大小以及位置。在程序中使用dom4j-1.6.1.jar來(lái)讀取xml數(shù)據(jù),然后根據(jù)這些數(shù)據(jù)來(lái)配置程序界面。因此只要改變了xml中的數(shù)值,就可以改變窗口的大小以及坐標(biāo)。
jl1.0.1.jar則是用來(lái)播放背景音樂(lè)的,這是我自己添加的功能,通過(guò)這個(gè)jar文件提供的方法,可以很簡(jiǎn)單地實(shí)現(xiàn)播放音樂(lè)的功能,具體實(shí)現(xiàn)在MP3Player類(lèi)和Main類(lèi)中,需要在Main類(lèi)中新建一個(gè)線程。 具體參考方法:JavaSwing后臺(tái)播放音樂(lè)
七、
源代碼程序下載:源代碼
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)站標(biāo)題:java實(shí)現(xiàn)俄羅斯方塊
標(biāo)題鏈接:http://jinyejixie.com/article28/iehojp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站排名、用戶體驗(yàn)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)