java仿QQ连连看游戏

时间:2021-11-01 04:07:23

关于这个项目,真的是花了很多心思在上面,从开始构思,到最后完成,真的是花了整整一个月。大概是11月初开始学java swing的时候有的想法,然后开始构思整个思路,相关算法讨论以及调试。

最开始先对连连看基础算法进行测试,就用一般的二维数组,然后就用控制台输入两个点的坐标进行删除,这一步就调试了我整整一个星期,基础算法搞完了 终于开始设计界面了,反正也不知道那时候花了多长时间才把界面给设计好,反正还设计的特别丑(至今也如此)。

功能如下:

运行程序后有背景音乐
菜单栏有:重新开始,提示,炸弹,排行榜等功能。
还有关闭背景音乐,设置游戏等级,查看游戏帮助这几项功能
游戏有得分以及倒计时功能。

其实这游戏做的就是仿qq连连看,连图片和背景声音都是来自qq连连看。

本篇博客不是教程,但提供源码,这只是写给自己看,说说自己关于写这个游戏的领悟而已。

由于是刚开始接触java gui就开始动手写游戏,结果好多东西都在走弯路,后来才知道明明可以用awt swt 等等插件进行拖拽式编程,我还傻傻的一个代码一个代码的敲出程序界面,还一个像素一个像素的调试来使得整体界面美观, 不过总体来说现在多走点弯路,以后就少走点弯路了嘛,教训总是要吸取的,只有把常见的bug都经历了一遍,以后开发才会有意的绕开那些bug。

最让人头疼的就是java线程那一块,之前一直没接触过这种东西,学校的课又迟迟没上到那,最终还是得花个时间好好的看了下线程,由于开发那个游戏的时候我还没开始写博客,因此也没将那个项目的细节写进来。看来以后开发项目还是要吧细节以及思路都记下来,免得以后工作了自己都不知道自己写的什么意思。

程序运行界面如下:

java仿QQ连连看游戏

java仿QQ连连看游戏

仿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