java仿QQ连连看游戏

关于这个项目,真的是花了很多心思在上面,从开始构思,到最后完成,真的是花了整整一个月。大概是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();
  }
  }
 }
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java基于swing实现的连连看代码

    本文实例讲述了java基于swing实现连连看代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: package llkan; import javax.swing.*; import java.awt.*; import java.awt.event.*; /**  * 连连看游戏  * @author Administrator  *2014年10月17日  */ public class MainGame implements ActionListener {     

  • java连连看游戏菜单设计

    本文实例为大家分享了java连连看游戏菜单的具体实现代码,供大家参考,具体内容如下 先写GUI. 首先初始化框架,菜单,按钮,需要把菜单和按钮都添加在框架中.注意添加的顺序,首先要设置菜单,再设置框架,再设置按钮,如果交换了设置菜单和框架的顺序,会导致菜单显示不出,被框架挡住.对菜单设置了三个选项,第一个选项有五个下拉按键,用循环添加,第二个和第三个选项的下拉按键直接添加. GUI代码如下: package gui; import java.awt.Font; import javax.swin

  • java实现连连看游戏

    本文实例为大家分享了java实现连连看游戏的具体代码,供大家参考,具体内容如下 代码会实现共享的,这个是截图 代码: package com.lr.bean; import java.util.Scanner; import java.util.Random; import com.lr.bean.Point; public class Link{ public static void main(String[] args){ Scanner sc=new Scanner(System.in);

  • java仿QQ连连看游戏

    关于这个项目,真的是花了很多心思在上面,从开始构思,到最后完成,真的是花了整整一个月.大概是11月初开始学java swing的时候有的想法,然后开始构思整个思路,相关算法讨论以及调试. 最开始先对连连看基础算法进行测试,就用一般的二维数组,然后就用控制台输入两个点的坐标进行删除,这一步就调试了我整整一个星期,基础算法搞完了 终于开始设计界面了,反正也不知道那时候花了多长时间才把界面给设计好,反正还设计的特别丑(至今也如此). 功能如下: 运行程序后有背景音乐 菜单栏有:重新开始,提示,炸弹,排

  • java仿QQ微信聊天室功能的实现

    话不多说,先上图                                   即时通信系统:可以完成群聊.私人聊天,实时发送和显示聊天信息,完成好友列表,进一步可以带表情,附件发送,聊天信息的传送,等 系统的主要技术socket通信技术,多线程技术,数据库技术. 本系统实现的功能有:1.用户名字登录 2.用户之间的群聊和查看群聊记录3.用户之间的私聊和私聊记录4.动态刷新并显示好友列表5.显示在线人数 6.服务器可以显示用户在线状态 7.能够退出处理. 该程序可以实现局域网的聊天,只要把

  • Java实现简单连连看游戏

    本文实例为大家分享了Java实现连连看游戏的具体代码,供大家参考,具体内容如下 大二时做的Java课程设计,拿了个优秀,用了icon来模拟做了个简单的连连看,代码量不多,仅供参考. 课设要求是实现连连看最基本的功能,所以这里写了个简单的初始界面和经典模式的一个界面. 初始界面 代码如下: public class PictureMatching {     JButton classical = new JButton("经典模式");     JButton about = new

  • Java版仿QQ验证码风格图片验证码

    本文为大家分享了Java版仿QQ验证码风格图片验证码,具体内容如下 功能包括:自定义图片尺寸和字符长度,随机背景颜色和字符颜色,随机字符偏移角度,字符平滑边缘,干扰线,噪点,背景扭曲. 本来想做字符扭曲的,不知道怎的先生成文字再扭曲就报错了,先就这样吧,希望有高手能帮助修正一下. 需要说明的是之所以有几分像QQ的验证码感觉是因为这个Algerian字体,如果系统没有的话需要自行安装,百度搜字体名能下载到,丢系统Fonts文件夹就行. 效果图: package hh.com.util; impor

  • Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEclipse的拖动功能). 源代码如下: package ibees.qq; import java.awt.BorderLayout; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JButton; impo

  • java实现简易连连看小游戏

    本文实例为大家分享了java实现简易连连看小游戏的具体代码,供大家参考,具体内容如下 新手上路,分享一下 直接上代码 package linkgame; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.

  • Android仿QQ聊天撒花特效 很真实

    先看看效果图吧 实现这样的效果,你要知道贝塞尔曲线,何谓贝塞尔曲线?先在这里打个问号 下面就直接写了 1.activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent

  • Java版坦克大战游戏源码示例

    整理文档,搜刮出一个Java版坦克大战游戏的代码,稍微整理精简一下做下分享. package tankwar; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.File; import java.io.FileInputStream; imp

随机推荐