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