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(); } } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
mybatisplus 复合主键(多主键) CRUD示例详解
这篇文章主要介绍了mybatisplus 复合主键(多主键) CRUD实例详解,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-03-03Java基于ShardingSphere实现分库分表的实例详解
ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目, 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景,对ShardingSphere分库分表相关知识感兴趣的朋友一起看看吧2022-03-03
最新评论