关于这个项目,真的是花了很多心思在上面,从开始构思,到最后完成,真的是花了整整一个月。大概是11月初开始学java swing的时候有的想法,然后开始构思整个思路,相关算法讨论以及调试。
最开始先对连连看基础算法进行测试,就用一般的二维数组,然后就用控制台输入两个点的坐标进行删除,这一步就调试了我整整一个星期,基础算法搞完了 终于开始设计界面了,反正也不知道那时候花了多长时间才把界面给设计好,反正还设计的特别丑(至今也如此)。
功能如下:
运行程序后有背景音乐
菜单栏有:重新开始,提示,炸弹,排行榜等功能。
还有关闭背景音乐,设置游戏等级,查看游戏帮助这几项功能
游戏有得分以及倒计时功能。
其实这游戏做的就是仿qq连连看,连图片和背景声音都是来自qq连连看。
本篇博客不是教程,但提供源码,这只是写给自己看,说说自己关于写这个游戏的领悟而已。
由于是刚开始接触java gui就开始动手写游戏,结果好多东西都在走弯路,后来才知道明明可以用awt swt 等等插件进行拖拽式编程,我还傻傻的一个代码一个代码的敲出程序界面,还一个像素一个像素的调试来使得整体界面美观, 不过总体来说现在多走点弯路,以后就少走点弯路了嘛,教训总是要吸取的,只有把常见的bug都经历了一遍,以后开发才会有意的绕开那些bug。
最让人头疼的就是java线程那一块,之前一直没接触过这种东西,学校的课又迟迟没上到那,最终还是得花个时间好好的看了下线程,由于开发那个游戏的时候我还没开始写博客,因此也没将那个项目的细节写进来。看来以后开发项目还是要吧细节以及思路都记下来,免得以后工作了自己都不知道自己写的什么意思。
程序运行界面如下:
仿qq连连看代码比较多,不方便帖上来,于是我打包发送然后留下传送门去领取。
传送门如下: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){ //构造函数
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(" 分数");
// content = new jlabel("这是显示排行内容的窗口");
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[] = { "名次" , "姓名" , "分数" };
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 ] = "分数" ;
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( "关闭" );
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();
}
}
}
}
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/chance2015/article/details/50453246