關(guān)于這個(gè)項(xiàng)目,真的是花了很多心思在上面,從開(kāi)始構(gòu)思,到最后完成,真的是花了整整一個(gè)月。大概是11月初開(kāi)始學(xué)java swing的時(shí)候有的想法,然后開(kāi)始構(gòu)思整個(gè)思路,相關(guān)算法討論以及調(diào)試。
最開(kāi)始先對(duì)連連看基礎(chǔ)算法進(jìn)行測(cè)試,就用一般的二維數(shù)組,然后就用控制臺(tái)輸入兩個(gè)點(diǎn)的坐標(biāo)進(jìn)行刪除,這一步就調(diào)試了我整整一個(gè)星期,基礎(chǔ)算法搞完了 終于開(kāi)始設(shè)計(jì)界面了,反正也不知道那時(shí)候花了多長(zhǎng)時(shí)間才把界面給設(shè)計(jì)好,反正還設(shè)計(jì)的特別丑(至今也如此)。
功能如下:
運(yùn)行程序后有背景音樂(lè)
菜單欄有:重新開(kāi)始,提示,炸彈,排行榜等功能。
還有關(guān)閉背景音樂(lè),設(shè)置游戲等級(jí),查看游戲幫助這幾項(xiàng)功能
游戲有得分以及倒計(jì)時(shí)功能。
其實(shí)這游戲做的就是仿qq連連看,連圖片和背景聲音都是來(lái)自qq連連看。
本篇博客不是教程,但提供源碼,這只是寫給自己看,說(shuō)說(shuō)自己關(guān)于寫這個(gè)游戲的領(lǐng)悟而已。
由于是剛開(kāi)始接觸java gui就開(kāi)始動(dòng)手寫游戲,結(jié)果好多東西都在走彎路,后來(lái)才知道明明可以用awt swt 等等插件進(jìn)行拖拽式編程,我還傻傻的一個(gè)代碼一個(gè)代碼的敲出程序界面,還一個(gè)像素一個(gè)像素的調(diào)試來(lái)使得整體界面美觀, 不過(guò)總體來(lái)說(shuō)現(xiàn)在多走點(diǎn)彎路,以后就少走點(diǎn)彎路了嘛,教訓(xùn)總是要吸取的,只有把常見(jiàn)的bug都經(jīng)歷了一遍,以后開(kāi)發(fā)才會(huì)有意的繞開(kāi)那些bug。
最讓人頭疼的就是java線程那一塊,之前一直沒(méi)接觸過(guò)這種東西,學(xué)校的課又遲遲沒(méi)上到那,最終還是得花個(gè)時(shí)間好好的看了下線程,由于開(kāi)發(fā)那個(gè)游戲的時(shí)候我還沒(méi)開(kāi)始寫博客,因此也沒(méi)將那個(gè)項(xiàng)目的細(xì)節(jié)寫進(jìn)來(lái)??磥?lái)以后開(kāi)發(fā)項(xiàng)目還是要吧細(xì)節(jié)以及思路都記下來(lái),免得以后工作了自己都不知道自己寫的什么意思。
程序運(yùn)行界面如下:
仿qq連連看代碼比較多,不方便帖上來(lái),于是我打包發(fā)送然后留下傳送門去領(lǐng)取。
傳送門如下:java編寫連連看
部分代碼:
rankingbar.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
import java.awt.*; import javax.swing.border.*; import java.net.*; import javax.swing.text.html.*; import javax.swing.event.*; import javax.swing.*; import java.awt.event.*; public class rankingbar extends jframe{ jbutton confirm,cancel,test; jpanel top,center,bottom; jlabel name,score,content; jtable table; object t[][]; string strname; int uscore; rankingbar(string strname, int uscore){ //構(gòu)造函數(shù) this .strname = strname; this .uscore = uscore; top = new jpanel(); center = new jpanel(); bottom = new jpanel(); confirm = new jbutton( "確定" ); cancel = new jbutton( "取消" ); // // name = new jlabel(" 姓名"); // score = new jlabel(" 分?jǐn)?shù)"); // content = new jlabel("這是顯示排行內(nèi)容的窗口"); table = new jtable( 10 , 2 ); init_windows(); dimension screensize = toolkit.getdefaulttoolkit().getscreensize(); this .setlocation( ( int ) (screensize.width - 420 ) / 2 , ( int ) (screensize.height - 360 ) / 2 ); this .setresizable( false ); this .setsize( new dimension( 250 , 250 )); this .settitle( "排行榜" ); setvisible( true ); this .setresizable( false ); //禁止用戶改變窗體大小 setdefaultcloseoperation(jframe.exit_on_close); } private void init_windows() { // setlayout(new borderlayout()); //上部初始化 // top_init(); //中間初始化 center_init(); //底部初始化 bottom_init(); } private void center_init() { //初始化中間 jtable table; object t[][]; object sname[] = { "名次" , "姓名" , "分?jǐn)?shù)" }; int cnt = 0 ; string s[] = { "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" }; t = new object[ 11 ][ 3 ]; t[ 0 ][ 0 ] = "排名" ; t[ 0 ][ 1 ] = "姓名" ; t[ 0 ][ 2 ] = "分?jǐn)?shù)" ; for ( int i = 1 ;i < 11 ;i++){ for ( int j = 0 ;j < 3 ;j++){ if (j == 1 ){ t[i][j] = "null" ; } else if (j == 0 ){ t[i][j] = s[cnt++]; } else { t[i][j] = "0" ; } } } t[ 1 ][ 1 ] = strname; t[ 1 ][ 2 ] = "" + uscore + "" ; table = new jtable(t,sname); add(table,borderlayout.center); table.enable( false ); } //private void top_init() { //初始化上端 // // top.setlayout(new gridlayout()); // top.add(name); // top.add(score); // add(top,borderlayout.north); // } private void bottom_init() { //底部初始化 bottom.add(confirm); confirm.addactionlistener( new actionlistener() { public void actionperformed(actionevent e) { setvisible( false ); } }); bottom.add(cancel); cancel.addactionlistener( new actionlistener() { public void actionperformed(actionevent e) { system.exit( 0 ); } }); add(bottom,borderlayout.south); } //public static void main(string arg[]){ // // new rankingbar("吳承潛",100); // } } |
help.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.text.html.*; /** * <p>title: kyodai</p> * <p>description: 連連看java版</p> * <p>copyright: copyright (c) 2004</p> * <p>company: www.wuhantech.com</p> * @author zhangjian * @version 1.0 */ public class help extends jdialog implements hyperlinklistener { jscrollpane scrollpane = new jscrollpane(); jeditorpane helppane = new jeditorpane(); border border1; jpanel panel1 = new jpanel(); jbutton close = new jbutton(); border border2; public help(jframe frame) throws headlessexception { super (frame, true ); try { jbinit(); } catch (exception e) { e.printstacktrace(); } dimension screensize = toolkit.getdefaulttoolkit().getscreensize(); this .setlocation( ( int ) (screensize.width - 420 ) / 2 , ( int ) (screensize.height - 360 ) / 2 ); this .setresizable( false ); this .setsize( new dimension( 420 , 360 )); this .settitle( "游戲幫助" ); setvisible( true ); this .setresizable( false ); //禁止用戶改變窗體大小 setdefaultcloseoperation(jframe.exit_on_close); } // public static void main(string args[]){ // new help(null); // } private void jbinit() throws exception { border2 = borderfactory.createcompoundborder(borderfactory.createlineborder(color.lightgray, 1 ),borderfactory.createemptyborder( 2 , 10 , 2 , 10 )); this .setsize( new dimension( 420 , 360 )); this .settitle( "help" ); border1 = borderfactory.createemptyborder(); urlclassloader urlloader = (urlclassloader) this .getclass().getclassloader(); url url = null ; url = urlloader.findresource( "help.htm" ); helppane.setpage(url); helppane.seteditable( false ); helppane.addhyperlinklistener( this ); scrollpane.sethorizontalscrollbarpolicy(jscrollpane. horizontal_scrollbar_never); scrollpane.setverticalscrollbarpolicy(jscrollpane. vertical_scrollbar_as_needed); scrollpane.setborder(border1); close.setbackground(color.white); close.setborder(border2); close.setactioncommand( "jbutton1" ); close.settext( "關(guān)閉" ); close.addactionlistener( new actionlistener() { public void actionperformed(actionevent e) { setvisible( false ); } }); panel1.setbackground(color.white); this .getcontentpane().add(scrollpane, borderlayout.center); this .getcontentpane().add(panel1, borderlayout.south); scrollpane.getviewport().add(helppane, null ); panel1.add(close, null ); } public void hyperlinkupdate(hyperlinkevent e) { if (e.geteventtype() == hyperlinkevent.eventtype.activated) { jeditorpane pane = (jeditorpane) e.getsource(); if (e instanceof htmlframehyperlinkevent) { htmlframehyperlinkevent evt = (htmlframehyperlinkevent) e; htmldocument doc = (htmldocument) pane.getdocument(); doc.processhtmlframehyperlinkevent(evt); } else { try { pane.setpage(e.geturl()); } catch (throwable t) { t.printstacktrace(); } } } } } |
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/chance2015/article/details/50453246