java仿QQ連連看游戲
關(guān)于這個項目,真的是花了很多心思在上面,從開始構(gòu)思,到最后完成,真的是花了整整一個月。大概是11月初開始學java swing的時候有的想法,然后開始構(gòu)思整個思路,相關(guān)算法討論以及調(diào)試。
最開始先對連連看基礎(chǔ)算法進行測試,就用一般的二維數(shù)組,然后就用控制臺輸入兩個點的坐標進行刪除,這一步就調(diào)試了我整整一個星期,基礎(chǔ)算法搞完了 終于開始設(shè)計界面了,反正也不知道那時候花了多長時間才把界面給設(shè)計好,反正還設(shè)計的特別丑(至今也如此)。
功能如下:
運行程序后有背景音樂
菜單欄有:重新開始,提示,炸彈,排行榜等功能。
還有關(guān)閉背景音樂,設(shè)置游戲等級,查看游戲幫助這幾項功能
游戲有得分以及倒計時功能。
其實這游戲做的就是仿qq連連看,連圖片和背景聲音都是來自qq連連看。
本篇博客不是教程,但提供源碼,這只是寫給自己看,說說自己關(guān)于寫這個游戲的領(lǐng)悟而已。
由于是剛開始接觸java GUI就開始動手寫游戲,結(jié)果好多東西都在走彎路,后來才知道明明可以用awt swt 等等插件進行拖拽式編程,我還傻傻的一個代碼一個代碼的敲出程序界面,還一個像素一個像素的調(diào)試來使得整體界面美觀, 不過總體來說現(xiàn)在多走點彎路,以后就少走點彎路了嘛,教訓總是要吸取的,只有把常見的bug都經(jīng)歷了一遍,以后開發(fā)才會有意的繞開那些bug。
最讓人頭疼的就是java線程那一塊,之前一直沒接觸過這種東西,學校的課又遲遲沒上到那,最終還是得花個時間好好的看了下線程,由于開發(fā)那個游戲的時候我還沒開始寫博客,因此也沒將那個項目的細節(jié)寫進來??磥硪院箝_發(fā)項目還是要吧細節(jié)以及思路都記下來,免得以后工作了自己都不知道自己寫的什么意思。
程序運行界面如下:


仿QQ連連看代碼比較多,不方便帖上來,于是我打包發(fā)送然后留下傳送門去領(lǐng)取。
傳送門如下: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){ //構(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(" 分數(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[] = {"名次","姓名","分數(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] = "分數(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
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();
}
}
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java輸出通過InetAddress獲得的IP地址數(shù)組詳細解析
由于byte被認為是unsigned byte,所以最高位的1將會被解釋為符號位,另外Java中存儲是按照補碼存儲,所以1000 0111會被認為是補碼形式,轉(zhuǎn)換成原碼便是1111 0001,轉(zhuǎn)換成十進制數(shù)便是-1212013-09-09
Spring AI TikaDocumentReader詳解
TikaDocumentReader是SpringAI中用于從多種格式文檔中提取文本內(nèi)容的組件,支持PDF、DOC/DOCX、PPT/PPTX和HTML等格式,它在構(gòu)建知識庫、文檔處理和數(shù)據(jù)清洗等任務(wù)中非常有用2025-01-01

