最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java仿QQ連連看游戲

 更新時(shí)間:2019年01月05日 09:43:50   作者:chance2015  
這篇文章主要為大家詳細(xì)介紹了java仿QQ連連看游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

關(guān)于這個(gè)項(xiàng)目,真的是花了很多心思在上面,從開始構(gòu)思,到最后完成,真的是花了整整一個(gè)月。大概是11月初開始學(xué)java swing的時(shí)候有的想法,然后開始構(gòu)思整個(gè)思路,相關(guān)算法討論以及調(diào)試。

最開始先對(duì)連連看基礎(chǔ)算法進(jìn)行測(cè)試,就用一般的二維數(shù)組,然后就用控制臺(tái)輸入兩個(gè)點(diǎn)的坐標(biāo)進(jìn)行刪除,這一步就調(diào)試了我整整一個(gè)星期,基礎(chǔ)算法搞完了 終于開始設(shè)計(jì)界面了,反正也不知道那時(shí)候花了多長(zhǎng)時(shí)間才把界面給設(shè)計(jì)好,反正還設(shè)計(jì)的特別丑(至今也如此)。

功能如下:

運(yùn)行程序后有背景音樂
菜單欄有:重新開始,提示,炸彈,排行榜等功能。
還有關(guān)閉背景音樂,設(shè)置游戲等級(jí),查看游戲幫助這幾項(xiàng)功能
游戲有得分以及倒計(jì)時(shí)功能。

其實(shí)這游戲做的就是仿qq連連看,連圖片和背景聲音都是來(lái)自qq連連看。

本篇博客不是教程,但提供源碼,這只是寫給自己看,說(shuō)說(shuō)自己關(guān)于寫這個(gè)游戲的領(lǐng)悟而已。

由于是剛開始接觸java GUI就開始動(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)總是要吸取的,只有把常見的bug都經(jīng)歷了一遍,以后開發(fā)才會(huì)有意的繞開那些bug。

最讓人頭疼的就是java線程那一塊,之前一直沒接觸過(guò)這種東西,學(xué)校的課又遲遲沒上到那,最終還是得花個(gè)時(shí)間好好的看了下線程,由于開發(fā)那個(gè)游戲的時(shí)候我還沒開始寫博客,因此也沒將那個(gè)項(xiàng)目的細(xì)節(jié)寫進(jìn)來(lái)??磥?lái)以后開發(fā)項(xiàng)目還是要吧細(xì)節(jié)以及思路都記下來(lái),免得以后工作了自己都不知道自己寫的什么意思。

程序運(yùn)行界面如下:

仿QQ連連看代碼比較多,不方便帖上來(lái),于是我打包發(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("  分?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

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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java多線程之等待隊(duì)列DelayQueue詳解

    Java多線程之等待隊(duì)列DelayQueue詳解

    這篇文章主要介紹了Java多線程之等待隊(duì)列DelayQueue詳解,    DelayQueue被稱作"等待隊(duì)列"或"JDK延遲隊(duì)列",存放著實(shí)現(xiàn)了Delayed接口的對(duì)象,對(duì)象需要設(shè)置到期時(shí)間,當(dāng)且僅當(dāng)對(duì)象到期,才能夠從隊(duì)列中被取走(并非一定被取走),需要的朋友可以參考下
    2023-12-12
  • Java輸出通過(guò)InetAddress獲得的IP地址數(shù)組詳細(xì)解析

    Java輸出通過(guò)InetAddress獲得的IP地址數(shù)組詳細(xì)解析

    由于byte被認(rèn)為是unsigned byte,所以最高位的1將會(huì)被解釋為符號(hào)位,另外Java中存儲(chǔ)是按照補(bǔ)碼存儲(chǔ),所以1000 0111會(huì)被認(rèn)為是補(bǔ)碼形式,轉(zhuǎn)換成原碼便是1111 0001,轉(zhuǎn)換成十進(jìn)制數(shù)便是-121
    2013-09-09
  • 一篇文章教帶你了解Java Spring之自動(dòng)裝配

    一篇文章教帶你了解Java Spring之自動(dòng)裝配

    今天小編就為大家分享一篇關(guān)于Spring中的自動(dòng)裝配,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-09-09
  • 深入解析Java中ThreadLocal線程類的作用和用法

    深入解析Java中ThreadLocal線程類的作用和用法

    ThreadLocal為解決多線程程序的并發(fā)問題提供了一種新的思路,ThreadLocal并不是一個(gè)Thread,而是Thread的局部變量,本文就來(lái)深入解析Java中ThreadLocal線程類的作用和用法.
    2016-05-05
  • Java中的CompletableFuture使用解析

    Java中的CompletableFuture使用解析

    這篇文章主要介紹了Java中的CompletableFuture使用解析,為什么CompletableFuture要定制化線程池,因?yàn)槟J(rèn)的線程池是ForkJoinPool,這個(gè)線程池的最大線程數(shù)默認(rèn)是你的電腦的線程數(shù)數(shù)減1,假如我線程電腦是4核8線程的,ForkJoinPool的最大線程數(shù)就是7,需要的朋友可以參考下
    2024-01-01
  • SpringBoot特點(diǎn)之依賴管理和自動(dòng)裝配(實(shí)例代碼)

    SpringBoot特點(diǎn)之依賴管理和自動(dòng)裝配(實(shí)例代碼)

    在使用SpringBoot的時(shí)候,會(huì)自動(dòng)將Bean裝配到IoC容器中,操作也很簡(jiǎn)單,今天小編給大家介紹下SpringBoot特點(diǎn)之依賴管理和自動(dòng)裝配的知識(shí),感興趣的朋友一起看看吧
    2022-03-03
  • 如何實(shí)現(xiàn)在IDEA中導(dǎo)入一個(gè)模塊

    如何實(shí)現(xiàn)在IDEA中導(dǎo)入一個(gè)模塊

    這篇文章主要介紹了如何實(shí)現(xiàn)在IDEA中導(dǎo)入一個(gè)模塊方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Spring AI TikaDocumentReader詳解

    Spring AI TikaDocumentReader詳解

    TikaDocumentReader是SpringAI中用于從多種格式文檔中提取文本內(nèi)容的組件,支持PDF、DOC/DOCX、PPT/PPTX和HTML等格式,它在構(gòu)建知識(shí)庫(kù)、文檔處理和數(shù)據(jù)清洗等任務(wù)中非常有用
    2025-01-01
  • java7 新I/O知識(shí)點(diǎn)詳解

    java7 新I/O知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家整理的是關(guān)于java7 新I/O知識(shí)點(diǎn)詳解,有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • JAVA簡(jiǎn)單分組的算法實(shí)現(xiàn)

    JAVA簡(jiǎn)單分組的算法實(shí)現(xiàn)

    本文介紹了“JAVA簡(jiǎn)單分組的算法實(shí)現(xiàn)”,需要的朋友可以參考一下
    2013-03-03

最新評(píng)論

宁波市| 沈丘县| 海原县| 宁晋县| 报价| 博乐市| 拜城县| 绵阳市| 碌曲县| 广东省| 蒙城县| 阜宁县| 邢台县| 防城港市| 定安县| 余干县| 多伦县| 松潘县| 宁都县| 和顺县| 营山县| 鄂托克旗| 岐山县| 福清市| 曲沃县| 上林县| 平泉县| 庆云县| 大理市| 常州市| 岑溪市| 迭部县| 宁晋县| 唐河县| 蓬安县| 大同县| 五大连池市| 从化市| 商洛市| 怀仁县| 邵武市|