基于JAVA的连连看游戏设计与实现

合集下载

基于java的连连看游戏

基于java的连连看游戏

基于JAVA的《连连看》游戏一引言《连连看》游戏在网上种类非常多,比如《水果连连看》,《宠物连连看》等等,虽然版本各种各样,但是其基本玩法,或者说基本算法是相同的,就是显示一些图标,让用户依次去点击两个图标,如果这两个图标相同,并且这两个图标通过直线可以相连,或者通过直角相连,或者通过双折线相连就可以消掉,消掉所有图标即为胜利。

如图1所示:图1 正在进行中的连连看游戏通过该游戏的制作,我们可以对Java的基础语法、Java图形界面以与简单的算法设计有一个比较全面的了解。

二设计要求为了避免叙述的繁琐,我们只实现连连看游戏的基本功能,如下:●制作如图1所示的游戏界面,尽量做到美观大方,使用方便●当两个图标相同,且通过直线相连、直角相连、双折线相连时,能够消掉图标●能够让游戏随时暂停,然后继续●当游戏进行到一定程度,无法消除剩余图标时,要能够提供重排功能对图标进行重排,从而让游戏继续进行三实现思路我们先讲一下程序中的几个难点,主要是说清楚具体的实现思路,具体的代码会在文后给出,大家可以参考。

1、界面设计需要实现如图2所示的界面:图 2 连连游戏界面整个界面分为三个区域:菜单区、功能区、游戏区。

首先在窗体上放置三个面板JPanel,分别存放三个区域,如图3所示:图3 界面的设计系统菜单区放置菜单即可,用户游戏区放置一个8*9的按钮数组来构成游戏界面,用户交互区放置开始,暂停等功能按钮以与提示信息。

2、生成游戏区运行程序后,游戏区并不显示按钮数组,当点击开始按钮后,再自动生成。

在生成按钮时要求按钮上的图案是随机的,且每个图案必须是偶数,否则会出现无法消除的按钮。

如何实现呢?我们可以这样考虑:假设有12个图片,把图片名字按照数字序号从0到11命名;假设游戏区共72个按钮,那么产生36个12以内的随机数字(每个随机数字代表一个图片),放入一个ArrayList中,最后使用ArrayList的addAll方法对已经产生的36个随机数字复制一份,这样就获得了72个随机数字,并且是成对的。

基于java的连连看游戏设计与实现的研究报告

基于java的连连看游戏设计与实现的研究报告

基于java的连连看游戏设计与实现的研究报告随着信息化时代的发展和互联网的普及,网络游戏成为现代生活的重要组成部分之一,连连看游戏作为其中的佼佼者一直深受玩家们的喜爱。

本次研究以Java语言为基础,设计并实现了一款基于图形用户界面的连连看游戏,从游戏设计、编程实现以及测试三个方面进行详细介绍。

一、游戏设计该连连看游戏设计的基础是二维数组。

玩家通过鼠标点击选择两个同样的图片,连接它们的线路不能经过其他图标,且路径短优先。

游戏共18个关卡,每个关卡的难度依次递增,并拥有不同主题的图片素材。

二、编程实现该游戏使用Java Swing绘制图形用户界面,整个游戏主要包括五个类:Main、Game、Node、Action、Panel。

1.Main类:主要作用为程序入口。

通过创建Game对象启动游戏。

2.Game类:游戏类。

在该类中主要完成游戏的初始化、监听器、关卡切换、连通性判断等操作。

3.Node类:节点类。

主要用于表示每一个图标,包括坐标以及图标种类等信息。

4.Action类:动作类。

主要用于计算玩家所选的两点是否可以连通。

5.Panel类:面板类。

界面主要交由Panel完成。

在该类中完成了界面布局、游戏信息展示等工作。

三、测试在游戏的测试过程中,主要测试了游戏的各个关卡能否正常切换和连通性判断能否正常运行。

此外,还通过在不同操作系统和不同分辨率下的测试,保证了游戏适用性和兼容性。

四、总结本次研究成功地设计并实现了一款基于Java的连连看游戏。

通过该游戏的设计与实现过程,进一步深入了解了Java编程语言以及Swing界面库的应用与优势。

最终测试结果表明,该游戏在各种操作系统和分辨率下均表现出良好的兼容性和适用性,可供广大玩家使用。

但仍有一些不足之处,需要进一步完善和优化。

在本次基于Java的连连看游戏设计与实现研究中,我们对玩家游戏数据进行了收集与分析。

具体数据如下:1. 游戏总胜利次数:1022. 最高得分:97633. 游戏失败次数:464. 游戏累计时间:20小时15分通过对这些游戏数据的分析,我们可以得出以下结论:1. 游戏整体受欢迎度较高,玩家胜利次数较多。

基于Java的“连连看”游戏

基于Java的“连连看”游戏

功 能 区面 板
游 戏 区面 板
4 . 2 菜 单
菜 单 的 功 能 均没 有 实 现 .读 者 可 以 自行 添 加 :
J B u t t o n [ ] [ J J L a b e I
J L a b e l
Ti me r
d o t s t i m e s t r
J Bu t t o n
s t a r t
开 始 按 钮
J Me n u me n u G a me=n e w J Me n u ( ” 游戏“ ) : J Me n u me n u Se t= n e w J Me n u ( ” 设置“ ) :
J Me n u me n u H e l p= n e w J Me n u ( “ 帮助” ) :
t h i s . s e t S i z e ( 7 8 0 , 5 0 0 ) ;
t h i s . s e t T i t l e ( “ 连连看游戏” ) :
t h i s . S e t D e f a u l t C I o s e Op e r a t i o n ( J F r a me . E X I L ON — C L OS E ) : a d d my Me n u 0 ; / / 添 加 菜 单 a d d F u n c t i o n P a n e I ( ) : ∥添 力 口 功台 E 区
表 2 L i n k Ga me类 中的 方 法
方 法 名 方 法 功 能
I ma g e l c o n ( “ i ma g e / 2 . g i f “ ) ) ) : me n u He l p . a d d S e p a r a t o r ( ) :

连连看游戏java课程设计

连连看游戏java课程设计

连连看游戏java课程设计一、课程目标知识目标:1. 理解Java语言中面向对象编程的基本概念,如类、对象、继承、封装等;2. 学会使用Java编写连连看游戏的界面布局和逻辑控制;3. 掌握运用Java集合框架处理游戏数据结构;4. 了解Java事件处理机制,并能应用于游戏交互。

技能目标:1. 能够运用面向对象的方法设计游戏类和对象,实现游戏功能;2. 独立编写连连看游戏的界面和逻辑代码,完成一个完整的Java游戏项目;3. 学会使用集合框架优化游戏数据存储和访问;4. 提高问题分析、程序设计和调试能力。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发创造力和创新能力;2. 培养学生合作学习、分享交流的良好习惯,提高团队协作能力;3. 强化学生的逻辑思维能力,提高解决实际问题的能力;4. 培养学生面对挑战时的积极态度,勇于克服困难,持续优化和完善自己的作品。

课程性质:本课程为信息技术学科选修课程,以项目为导向,注重实践操作和团队合作。

学生特点:学生具备一定的Java编程基础,对游戏开发有浓厚兴趣,具有较强的动手能力和创新能力。

教学要求:结合实际项目需求,引导学生运用所学知识解决问题,注重培养学生的编程能力和团队协作能力,提高学生的综合素质。

通过本课程的学习,使学生能够独立完成一个连连看游戏的Java课程设计。

二、教学内容1. 面向对象编程基础复习:复习Java中类与对象、继承、封装等基本概念,参考教材第二章。

2. 游戏界面设计:学习使用Java的Swing库设计连连看游戏界面,包括菜单、按钮、网格布局等,结合教材第四章。

- 界面组件及布局管理器;- 事件监听器和处理机制;- 图形和图标的使用。

3. 游戏逻辑实现:学习实现游戏核心逻辑,如数据结构设计、游戏规则、配对消除等,参考教材第六章。

- 集合框架的使用;- 算法实现(如查找、排序);- 游戏流程控制。

4. 游戏对象设计:设计游戏中的对象类,如卡片类、游戏引擎类等,运用封装、继承等面向对象原则,参考教材第三章。

基于Java的图片连连看游戏设计研究

基于Java的图片连连看游戏设计研究

基于Java的图片连连看游戏设计研究基于Java的图片连连看游戏设计研究摘要:连连看(Link Up)游戏是一款经典的益智游戏,通过消除相同的图案来获得分数。

本文基于Java编程语言,对连连看游戏的设计进行深入研究。

通过实现游戏的基本功能和特色功能,对游戏进行优化和改进,提升游戏的用户体验。

通过实践验证,本设计具有一定的可行性和实用性。

1. 引言连连看游戏是一种非常受欢迎的益智游戏,其规则简单,操作容易上手。

随着移动互联网的快速发展,游戏市场越来越庞大。

设计一款基于Java的图片连连看游戏,可以满足用户对游戏的需求,同时也是提升自己编程能力的学习机会。

2. 游戏的基本功能设计2.1 游戏界面设计游戏主界面分为游戏区和得分区。

游戏区由多个方格组成,每个方格里面有一张图案,玩家需要通过点击两个相同的图案来消除它们。

得分区显示玩家的得分、剩余时间和游戏关卡等信息。

2.2 游戏规则设计游戏开始时,系统会随机生成一定数量的图案并填充到游戏区中。

玩家需要通过连接相同的图案来消除它们,直到清空游戏区中所有的图案。

连接两个图案的连线只能是水平或垂直直线,并且在连线路径上不能有其他图案阻挡。

玩家每消除一对图案,得分增加,游戏关卡随之升级。

如果无法连接两个图案,玩家可以使用提示功能获取一定的帮助。

3. 游戏特色功能设计3.1 计时功能游戏设置了一个倒计时器,玩家需要在规定的时间内完成游戏。

当倒计时为0时,游戏结束,系统会显示玩家的得分和游戏结束画面。

3.2 关卡功能游戏设计了多个关卡,每个关卡的游戏难度和图案数量都不同。

玩家需要通过完成前一关卡的要求才能解锁下一关卡。

3.3 提示功能当玩家遇到无法连接的图案时,可以使用提示功能,系统会自动给出可以连接的图案,并帮助玩家找到解决方案。

4. 游戏的优化与改进4.1 性能优化在游戏的设计过程中,需要考虑到游戏的性能问题。

通过合理的算法设计和资源管理,减少游戏的内存占用和运行时的开销,提高游戏的运行速度和流畅度。

基于Java的连连看游戏设计与实现毕业设计中期检查表

基于Java的连连看游戏设计与实现毕业设计中期检查表
指导教师意见游戏功能已经基本实现实现简单的关卡并进行了时间限定中期检查合格论文内容部分基本完成进行论文的格式修改和细节加工
大学
学生姓名
班级பைடு நூலகம்
指导教师
设计(论文)题目
基于Java的连连看游戏设计及实现








1.系统框架和主要功能涉及到的代码全部完成,项目可正常运行。
2.根据软件系统开发流程和相关规范,论文已完成近80%的内容。
签字:
年月日
注:学院、系、教研室应对毕业设计(论文)进行抽查,并给出具体意见。






1.检查源代码是否出现逻辑顺序错误。
2.检查布局是否合理。
3.必要时添加新组件。
指导教师意见
游戏功能已经基本实现,实现简单的关卡,并进行了时间限定,中期检查合格,论文内容部分基本完成,进行论文的格式修改和细节加工。基本符合任务书中的要求进度。
签字:
年月日
系或教研室意见
签字:
年月日
学院意见
3.项目基本功能已实现。
是否符合任务书要求进度








1.完善游戏界面,优化用户使用体验。
2.完善论文内容,使层次清晰明了,叙述流畅,规范排版。
能否按期完成设计
















1.在windowclassical风格下文本标签的文字不能正常显示。
2.计时器和“开始”按钮之间没有很好的关联,当进入游戏界面时,不点击“开始”按钮游戏会自动开始。

基于Java的连连看游戏设计研究

基于Java的连连看游戏设计研究

1、游戏平衡性:为了保持游戏 的公平性和挑战性,需要合理设 置不同难度等级的关卡
2、图片识别算法:连连看游戏 需要识别相同的图片并进行连接
实际应用
本游戏的Java实现可以广泛应用于各种平台,如PC、移动设备和嵌入式设备。 此外,该游戏的设计思路和算法也可以应用于其他类型的连连看游戏,如文字连 连看、图形连连看等。因此,本研究的实际应用前景广阔。
谢谢观看
总结
本次演示对基于Java的图片连连看游戏设计进行了深入研究,分析了玩家需 求和开发者需求,阐述了具体的游戏设计方法,探讨了可能遇到的难点和挑战, 并展示了实际应用效果。本研究的成果不仅为其他连连看游戏开发者提供了有价 值的参考,也有助于推动Java游戏开发领域的发展。
在未来的研究中,可以进一步拓展连连看游戏的玩法和内容,提升游戏的趣 味性和挑战性,同时不断优化算法和程序性能,为玩家带来更好的游戏体验。
3、计时器
为了控制游戏的进行,我们需要创建一个计时器。我们可以使用Java Timer 类来创建一个定时器,每隔一段时间就更新游戏状态。
四、测试与优化
完成游戏的基本设计与实现后,我们需要进行一系列测试和优化工作。首先, 我们需要测试游戏的稳定性和正确性,确保所有的图案都可以正确地生成和显示。 其次,我们需要测试游戏的性能,确保在各种不同配置的计算机上都可以流畅地 运行游戏。最后,我们还需要对游戏的界面进行优化,以提供更好的用户体验。
参考内容
一、引言
在当今的计算机时代,越来越多的计算机用户开始应用程序和游戏的开发。 其中,连连看游戏是一种广受欢迎的休闲游戏,它主要考验玩家的观察力和反应 速度。Java作为一种流行的编程语言,被广泛应用于各种应用程序和游戏的开发。 本次演示将详细介绍如何使用Java设计和实现一个简单的连连看游戏。

JAVA连连看

JAVA连连看

1概 述
1.1 前 言
电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、 辅助设计、图形图像处理、教育培训以及游戏娱乐等。Windows 系统的推出使 电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训 练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满 了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不 得不开发适合自己特殊需求的软件。Java 语言作为一种面向对象的编程语言, 具有分布式,可移植,高性能,多线程等特点。通过系统的学习,人们就可以 使用它开发出功能齐全,满足特殊需求的应用程序。Java 语言易学易用,对 学习者掌握技能,开拓思维都有很大的帮助。这次课程设计,正好将学过的 Java 语言中的各种技术综合起来,用 My eclipse 开发工具编写一个小游戏, 既对自己学过的技能进行一次检验,也能系统地将学过的知识复习巩固。
学会Java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。 进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面设计、Java多线程编程、Applet 程序的设计、文件和网络输入输出流编程、Java数据库编程等。通过亲自动手写程序,一方面 拓展知识面,一方面锻炼调试能力。

流程的目的。


这个游戏是用图形界面实现的,通过编译解释后,出现


一个图形界面。界面是由若干个小方格组成的,每一个小方

格里有一个动物,如果在一个边上有相同的动物,连续点击
它们就会消失,同时界面上正上方的分数就会自动加分。游
戏还设有开始、继续、暂停、退出、帮助、再来一局的功能,
方便游戏操作。
姓名

JAVA连连看课程设计报告

JAVA连连看课程设计报告

滨江学院实验报告||实验名称JAVA小游戏(连连看)设计课程名称智能手机程序设计| |专业班级:信息工程1班学生姓名:车宇翔学号:20112309002指导教师:高超学期:2013-2014(2)成绩:【选题背景】:连连看游戏经验,玩法简单,休闲,益智,趣味,广受欢迎。

【选题目的】:学会JAVA程序开发的环境搭建与配置,并在实际运用中学习和掌握JAVA程序开发的全过程。

进一步熟悉掌握JAVA程序设计语音的基础内容,如用户图形界面设计、JAVA多线程编程、JAVA数据库编程等。

通过亲自动手写程序,拓展知识面,锻炼调试能力。

【系统分析与设计】:功能分析:实现连连看的基本游戏功能和重置、提示、消除功能设计:通过对图片的调用以及设置是否可见来完成连连看的效果【课程设计中碰到的问题及解决方案】:1.不知道如何进行对数组中两个元素是否可以消除的判断2.时间条的动态表现解决方案:1.对每个相同图案进行循环判断,直到找出满足条件的情况boolean verticalMatch(Point a, Point b) // 竖线上的判断boolean horizonMatch(Point a, Point b) // 横线上的判断2.为了保证动画过程和游戏过程的平行运行,因此将动画分离成一个独立的控件,并且要保证动画有自己单独的线程来运行。

当每次用户的分数发生变化时,我们可以使用setScore(int l, int c) 方法同步分数显示的动画效果。

【程序输出结果】:游戏开始【程序代码】:ImageFactorypackage nicholas.game.kyodai;import javax.swing.ImageIcon;import .*;public class ImageFactory {private static ImageFactory imagefactory;private static ImageIcon images[];private ImageFactory() {images = new ImageIcon[54];URLClassLoader loader = (URLClassLoader)getClass().getClassLoader();for(int i=0;i<39;i++) {images[i] = new ImageIcon(getClass().getResource("images/"+i+".gif"));}images[39] = new ImageIcon(getClass().getResource("images/dots.gif"));images[40] = new ImageIcon(getClass().getResource("images/ico.gif"));images[41] = new ImageIcon(getClass().getResource("images/topbar.gif"));images[42] = new ImageIcon(getClass().getResource("images/splash.gif"));images[43] = new ImageIcon(getClass().getResource("images/sico.gif"));}public ImageIcon getImageicon(int i) {return images[i];}public static synchronized ImageFactory getInstance() {if(imagefactory != null) {return imagefactory;} else {imagefactory = new ImageFactory();return imagefactory;}}}KyodaiGridpackage nicholas.game.kyodai;import java.awt.*;import javax.swing.*;public class KyodaiGrid extends JLabel {private int xpos;private int ypos;public KyodaiGrid(int x, int y) {xpos = x;ypos = y;this.setHorizontalAlignment(SwingConstants.CENTER);}public int getXpos() {return xpos;}public int getYpos() {return ypos;}public boolean isPassable() {return !isVisible();}}LevelInfopackage nicholas.game.kyodai;import java.io.Serializable;public class LevelInfo implements Serializable {//xBound为行号,yBound为列号private int xBound;private int yBound;public LevelInfo() {xBound = 16;yBound = 9;}public LevelInfo(int x, int y){xBound = x;yBound = y;}public int getXBound() {return xBound;}public int getYBound() {return yBound;}}MainFrame.javapackage nicholas.game.kyodai;import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import nicholas.swing.AboutDialog;import nicholas.swing.JSplashWindow;public class MainFrame extends JFrame implements ActionListener {private JMenuItem aboutItem;//菜单栏private JMenuItem exitItem;private JMenuItem startItem;private JMenuItem optionItem;private JMenuItem tipItem;private JMenuItem refreshItem;private JMenuItem logItem;private JMenuItem bombItem;private JMenuItem pauseItem;private MainPanel mainPanel;//完成主要功能private LevelInfo levelInfo;public MainFrame() {super("连连看");levelInfo = new LevelInfo();//设定游戏大小setMenuBar();//设置菜单setUI();setIconImage(ImageFactory.getInstance().getImageicon(43).getImage());setSize(650,520);Dimension screen = getToolkit().getScreenSize();setLocation((screen.width-getSize().width)/2,(screen.height-getSize().height)/2);this.setVisible(true);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}private void setMenuBar() {JMenu fileMenu = new JMenu("游戏(G)");JMenu helpMenu = new JMenu("帮助(H)");JMenu contMenu = new JMenu("辅助(C)");fileMenu.setMnemonic('G');helpMenu.setMnemonic('H');contMenu.setMnemonic('C');startItem = new JMenuItem("开局(N)");startItem.setMnemonic('N');startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0));pauseItem = new JMenuItem("暂停(P)");pauseItem.setMnemonic('P');pauseItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAUSE,0));refreshItem = new JMenuItem("刷新(R)");refreshItem.setMnemonic('R');refreshItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));tipItem = new JMenuItem("提示(T)");tipItem.setMnemonic('T');tipItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));optionItem = new JMenuItem("选项(O)...");optionItem.setMnemonic('O');logItem = new JMenuItem("排行榜(B)...");logItem.setMnemonic('B');exitItem = new JMenuItem("退出(X)");exitItem.setMnemonic('X');aboutItem = new JMenuItem("关于(A)...");aboutItem.setMnemonic('A');aboutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));bombItem = new JMenuItem("炸弹(M)");bombItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,0));bombItem.setMnemonic('M');startItem.addActionListener(this);pauseItem.addActionListener(this);refreshItem.addActionListener(this);tipItem.addActionListener(this);optionItem.addActionListener(this);logItem.addActionListener(this);exitItem.addActionListener(this);aboutItem.addActionListener(this);bombItem.addActionListener(this);fileMenu.add(startItem);fileMenu.add(pauseItem);contMenu.add(refreshItem);contMenu.add(bombItem);contMenu.add(tipItem);fileMenu.addSeparator();fileMenu.add(exitItem);helpMenu.add(aboutItem);helpMenu.add(contMenu);JMenuBar bar = new JMenuBar();bar.add(fileMenu);bar.add(helpMenu);setJMenuBar(bar);}private void setUI() {mainPanel = new MainPanel(levelInfo);getContentPane().add(mainPanel,BorderLayout.CENTER); }public static void main(String args[]) {MainFrame application = new MainFrame();}private void showAboutDialog() {String s1="作者:车宇翔";String s2="邮箱: 531608022@";String s3="Have Fun!!";TextArea ta=new TextArea();ta.setText(s1+"\n"+"\n"+"\n"+s2+"\n"+"\n"+"\n"+s3);ta.setEditable(false);JFrame f=new JFrame("关于");f.setLocation(300, 300);f.setSize(200,200);f.add(ta);f.setBackground(new Color(200,120,150));f.setResizable(false);f.setVisible(true);}public void actionPerformed(ActionEvent ae) { if(ae.getSource()==startItem) {mainPanel.restart();} else if(ae.getSource()==pauseItem) {mainPanel.setPaused(!mainPanel.isPaused());} else if(ae.getSource()==exitItem) {System.exit(0);} else if(ae.getSource()==aboutItem) {showAboutDialog();} else if(ae.getSource()==bombItem) {eBomb();} else if(ae.getSource()==refreshItem) {mainPanel.refresh();} else if(ae.getSource()==tipItem) {mainPanel.showNext();}}}MainPanel.javapackage nicholas.game.kyodai;import java.awt.*;import java.awt.event.*;import java.util.Vector;import javax.swing.*;import javax.swing.border.Border;import nicholas.game.kyodai.*;public class MainPanel extends JPanel {private int BOMB = 5;private int BOMBP = 200;private int REFRESH = 4;private int REFRP = 250;private int TIP = 7;private int TIPP = 120;private int PROGRESS = 1200;private int xBound;private int yBound;private int pcount;private int score;private int refreshcount;private int bombcount;private int tipcount;private LevelInfo levelInfo; private GridMouseAdapter gma; private KyodaiGrid grid[][]; private KyodaiGrid nexts, nexte;private Border selectedBorder; private Border opaqueBorder; private Border tipBorder;private Vector path[];private Thread pthread;private JProgressBar progress; private JLabel scoreLabel; private JLabel refreshLabel; private JLabel bombLabel;private JLabel tipLabel;private JPanel gridPanel;private boolean wingame;public MainPanel(LevelInfo li) {super(new BorderLayout());levelInfo = li;path = new Vector[3];path[0] = new Vector();path[1] = new Vector();path[2] = new Vector();setBackground(Color.black);gma = new GridMouseAdapter();opaqueBorder = BorderFactory.createLineBorder(getBackground());//selectedBorder = BorderFactory.createLineBorder(Color.red);selectedBorder = BorderFactory.createLineBorder(Color.red);tipBorder = BorderFactory.createLineBorder(Color.green);setGridPanel();setStatusPanel();}/***设置状态面板*/private void setStatusPanel() {wingame = false;JPanel panel = new JPanel();panel.setBackground(Color.black);JLabel label = new JLabel("剩余时间:");label.setForeground(Color.white);panel.add(label);progress = new JProgressBar(0,PROGRESS);//时间条显示progress.setValue(PROGRESS);progress.setPreferredSize(new Dimension(400,20));progress.setForeground(Color.blue);progress.setBorderPainted(false);panel.add(progress);score = 0;scoreLabel = new JLabel(""+score);scoreLabel.setForeground(Color.yellow);scoreLabel.setFont(new Font("Dialog",Font.BOLD,25));scoreLabel.setHorizontalAlignment(SwingConstants.RIGHT);scoreLabel.setPreferredSize(new Dimension(100,20));panel.add(scoreLabel);add(panel,BorderLayout.NORTH);panel = new JPanel();panel.setBackground(Color.black);label = new JLabel("剩余提示:");label.setForeground(Color.yellow);panel.add(label);tipcount = TIP;tipLabel = new JLabel(""+tipcount);tipLabel.setForeground(Color.green);panel.add(tipLabel);label = new JLabel("剩余炸弹:");label.setForeground(Color.yellow);panel.add(label);bombcount = BOMB;bombLabel = new JLabel(""+bombcount);bombLabel.setForeground(Color.green);panel.add(bombLabel);label = new JLabel("可用刷新:");label.setForeground(Color.yellow);panel.add(label);refreshcount = REFRESH;refreshLabel = new JLabel(""+refreshcount);refreshLabel.setForeground(Color.green);panel.add(refreshLabel);add(panel,BorderLayout.SOUTH);pthread = new ProgressThread();pthread.start();}private void setGridPanel() {//完成布局gridPanel = new JPanel();gridPanel.setBackground(getBackground());xBound = levelInfo.getXBound()+2;yBound = levelInfo.getYBound()+2;gridPanel.setLayout(new GridLayout(yBound,xBound,0,0));grid = new KyodaiGrid[yBound][xBound];int count = 0;int sub = levelInfo.getXBound()*levelInfo.getYBound()/4;KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];for(int y=0;y<yBound;y++) {for(int x=0;x<xBound;x++) {grid[y][x] = new KyodaiGrid(x, y);if(x==0||x==(xBound-1)||y==0||y==(yBound-1)) {grid[y][x].setIcon(ImageFactory.getInstance().getImageicon(39));grid[y][x].setVisible(false);} else {grid[y][x].setIcon(ImageFactory.getInstance().getImageicon(count%sub));grid[y][x].setBorder(opaqueBorder);grid[y][x].addMouseListener(gma);temp[count] = grid[y][x];count++;}gridPanel.add(grid[y][x]);}}JPanel t = new JPanel();t.setBackground(Color.black);t.add(gridPanel);add(t,BorderLayout.CENTER);shuffle(temp, count);}/***开始新游戏*/public void restart() {//重新开始resetStatusPanel();resetGridPanel();}/***重置面板状态和游戏图标*/private void resetStatusPanel() {wingame = false;score = 0;scoreLabel.setText(""+score);bombcount = BOMB;bombLabel.setText(""+bombcount);refreshcount = REFRESH;refreshLabel.setText(""+refreshcount);tipcount = TIP;tipLabel.setText(""+tipcount);progress.setValue(PROGRESS);pthread.resume();}private void resetGridPanel() {int count = 0;int sub = (xBound-2)*(yBound-2)/4;KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];for(int y=1;y<yBound-1;y++) {for(int x=1;x<xBound-1;x++){grid[y][x].setIcon(ImageFactory.getInstance().getImageicon(count%sub));grid[y][x].setBorder(opaqueBorder);grid[y][x].setVisible(true);temp[count] =grid[y][x];count++;}}shuffle(temp,count);}/***暂停*/public void setPaused(boolean p) {if(p) {pthread.suspend();gridPanel.setVisible(false);} else {pthread.resume();gridPanel.setVisible(true);}}/***是否暂停*/public boolean isPaused() {return !gridPanel.isVisible();}/***没有布局存在时胜利*计算得分*/private void win() {wingame = true;pthread.suspend();score += progress.getValue()/20+bombcount*BOMBP+refreshcount*REFRP+tipcount*TIPP;scoreLabel.setText(""+score);}private void shuffle(KyodaiGrid array[], int count) {if(wingame) return;do {setVisible(false);int j,k;Icon temp;for(int i=0;i<count;i++) {j = (int)(Math.random()*count);k = (int)(Math.random()*count);temp = array[k].getIcon();array[k].setIcon(array[j].getIcon());array[j].setIcon(temp);}setVisible(true);} while(!findPair());}public void refresh() {if(wingame||progress.getValue()==0||refreshcount==0) return;KyodaiGrid temp[] = new KyodaiGrid[xBound*yBound];int count = 0;for(int y=1;y<yBound-1;y++) {for(int x=1;x<xBound-1;x++) {if(grid[y][x].isVisible()) {grid[y][x].setBorder(opaqueBorder);temp[count] = grid[y][x];count++;}}}if(count!=0) {refreshcount--;refreshLabel.setText(""+refreshcount);shuffle(temp,count);} else win();}private boolean xdirect(KyodaiGrid start, KyodaiGrid end,Vector path) { if(start.getYpos()!=end.getYpos()) return false;int direct = 1;if(start.getXpos()>end.getXpos()) {direct = -1;}path.removeAllElements();for(intx=start.getXpos()+direct;x!=end.getXpos()&&x<xBound&&x>=0;x+=direct) { if(grid[start.getYpos()][x].isVisible()) return false;path.add(grid[start.getYpos()][x]);}path.add(end);return true;}private boolean ydirect(KyodaiGrid start, KyodaiGrid end,Vector path) { if(start.getXpos()!=end.getXpos()) return false;int direct = 1;if(start.getYpos()>end.getYpos()) {direct = -1;}path.removeAllElements();for(inty=start.getYpos()+direct;y!=end.getYpos()&&y<yBound&&y>=0;y+=direct) { if(grid[y][start.getXpos()].isVisible()) return false;path.add(grid[y][start.getXpos()]);}path.add(end);return true;}private int findPath(KyodaiGrid start, KyodaiGrid end) {//0 connerif(xdirect(start,end,path[0])) {return 1;}if(ydirect(start,end,path[0])) {return 1;}//1 connerKyodaiGrid xy = grid[start.getYpos()][end.getXpos()];if(!xy.isVisible()&&xdirect(start,xy,path[0])&&ydirect(xy,end,path[1])) {return 2;}KyodaiGrid yx = grid[end.getYpos()][start.getXpos()];if(!yx.isVisible()&&ydirect(start,yx,path[0])&&xdirect(yx,end,path[1])) {return 2;}//2 conner//uppath[0].removeAllElements();for(int y=start.getYpos()-1;y>=0;y--) {xy = grid[y][start.getXpos()];yx = grid[y][end.getXpos()];if(xy.isVisible()) break;path[0].add(xy);if(!yx.isVisible()&&xdirect(xy,yx,path[1])&&ydirect(yx,end,path[2])) {return 3;}}//downpath[0].removeAllElements();for(int y=start.getYpos()+1;y<yBound;y++) {xy = grid[y][start.getXpos()];yx = grid[y][end.getXpos()];if(xy.isVisible()) break;path[0].add(xy);if(!yx.isVisible()&&xdirect(xy,yx,path[1])&&ydirect(yx,end,path[2])) {return 3;}}//leftpath[0].removeAllElements();for(int x=start.getXpos()-1;x>=0;x--) {yx = grid[start.getYpos()][x];xy = grid[end.getYpos()][x];if(yx.isVisible()) break;path[0].add(yx);if(!xy.isVisible()&&ydirect(yx,xy,path[1])&&xdirect(xy,end,path[2])) {return 3;}}//rightpath[0].removeAllElements();for(int x=start.getXpos()+1;x<xBound;x++) {yx = grid[start.getYpos()][x];xy = grid[end.getYpos()][x];if(yx.isVisible()) break;path[0].add(yx);if(!xy.isVisible()&&ydirect(yx,xy,path[1])&&xdirect(xy,end,path[2])) {return 3;}}return 0;}/***在布局中消除配对*/private void deletePair(KyodaiGrid prev, KyodaiGrid current) {//尝试寻找路径//如果找到路径//animateVector temp = new Vector();temp.add(prev);for(int i=0;i<pcount;i++) {temp.addAll(path[i]);path[i].removeAllElements();}AnimateThread thread = new AnimateThread(temp);thread.start();score += progress.getValue()/20;scoreLabel.setText(""+score);progress.setValue(progress.getValue()+60);}/***展示找到的配对*/public void showNext() {if(wingame||progress.getValue()==0||tipcount==0) return;tipcount--;tipLabel.setText(""+tipcount);if(nexts!=null&&nexte!=null) {nexts.setBorder(tipBorder);nexte.setBorder(tipBorder);}}/***删除找到的配对*/public void useBomb() {if(wingame||progress.getValue()==0||bombcount==0) return;bombcount--;bombLabel.setText(""+bombcount);if(nexts!=null&&nexte!=null) {deletePair(nexts,nexte);}}/***发现有连接路径的配对*@返回是否发现*/private boolean findPair() {nexts = null;nexte = null;for(int sy=1;sy<yBound-1;sy++) {for(int sx=1;sx<xBound-1;sx++) {if(!grid[sy][sx].isVisible()) continue;for(int ey=sy;ey<yBound-1;ey++) {for(int ex=1;ex<xBound-1;ex++) {if(!grid[ey][ex].isVisible()||(ey==sy&&ex==sx)) continue;if(grid[sy][sx].getIcon()==grid[ey][ex].getIcon()) {pcount = findPath(grid[sy][sx],grid[ey][ex]);if(pcount!=0) {nexts = grid[sy][sx];nexte = grid[ey][ex];return true;}}}}}}return false;}private class GridMouseAdapter extends MouseAdapter { private KyodaiGrid prev;public void mouseClicked(MouseEvent me) {if(prev == null) {prev = (KyodaiGrid)me.getSource();prev.setBorder(selectedBorder);} else {if(progress.getValue()==0) return;KyodaiGrid current = (KyodaiGrid)me.getSource();if(current == prev) return;if(current.getIcon()==prev.getIcon()) {pcount = findPath(prev,current);if(pcount!=0) {deletePair(prev,current);//setprev = null;return;}}prev.setBorder(opaqueBorder);prev = current;prev.setBorder(selectedBorder);if(!findPair()) refresh();}}}private class AnimateThread extends Thread {private Vector v;public AnimateThread(Vector temp) {v = temp;}public void run() {KyodaiGrid prev = null;KyodaiGrid current;int j = 0;while(j<v.size()) {prev = (KyodaiGrid)v.remove(0);prev.setVisible(true);v.add(prev);j++;try {sleep(20);} catch(InterruptedException ire) {System.err.println("sleep interrupted");}}current = prev;prev = (KyodaiGrid)v.remove(0);while(!v.isEmpty()) {((KyodaiGrid)v.remove(0)).setVisible(false);try {sleep(20);} catch(InterruptedException ire) {System.err.println("sleep interrupted");}}prev.setVisible(false);current.setVisible(false);current.setIcon(ImageFactory.getInstance().getImageicon(39));prev.setIcon(ImageFactory.getInstance().getImageicon(39));current.setBorder(opaqueBorder);prev.setBorder(opaqueBorder);if(!findPair()) refresh();}//end of method run}private class ProgressThread extends Thread {public ProgressThread() {}public void run() {while(true) {while(progress.getValue()>0) {progress.setValue(progress.getValue()-1);try {sleep(100);} catch(InterruptedException ire) {System.err.println("sleep interrupted");}}repaint();suspend();}}}}【总结自己的体会和收获】:通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中也发现了自己的不足之处,对以前学过的知识理解的不够深刻,对安卓手机小游戏的程序编写有了一定的了解。

基于Java的图片连连看游戏的设计与实现

基于Java的图片连连看游戏的设计与实现

基于Java的图片连连看游戏的设计与实现摘要:随着社会科技的不断进步,人们的娱乐消遣的方式也越来越来多,游戏成为了很多人的娱乐方式。

本文介绍了图片连连看的游戏规则,连连看游戏采用Eclipse开发平台,使用Java开发了一款单机水果卡通图片连连看的游戏。

关键词:Java;图片连连看;游戏设计[基金项目]安徽省质量工程项目(2021cyxy051;2021jyxm0912;2022jxgl040;2022xqhz044;2022sdxx020;2021jyxm0917);教育部产学合作协同育人项目(202002292027);蚌埠学院科学研究项目“淮河文化教育传播成效及大学生学习满意度研究”(2022SK02);蚌埠学院一流课程“线上线下混合式课程:现代教育技术”(2021xsxxhh14);安徽省大学生创新创业教育训练项目“基于Java的图片连连看游戏设计与实现”(202311305060)。

[作者简介]杨赛赛,男,蚌埠学院2021级软件工程专业学生,学号:52102041039;曹建磊(1988-),男,河南汝南人,硕士,讲师,主要研究方向为教育技术学;黄迎辉(1970-),男,安徽凤阳人,硕士,教授,主要研究方向自动化技术;朱洪浩(1980-),男,安徽砀山人,博士,副教授,主要研究方向机器学习;张新展,男,蚌埠学院2021级软件工程专业学生,学号:52102041043。

一、引言随着Java能将开发系统的可移植特性提高,Java在我们的社会生活中获得了广泛应用,Java开发的游戏也深受广大人群的喜爱和欢迎。

虽然Java开发的游戏在实际中的画面表现和场景效果等受到技术和设备的限制,但是构造简单,通用性,游戏响应比较快,其具备的优势受到普遍欢迎[1]。

连连看,是一种图案配对的益智游戏。

在电子游戏中,玩家可以将2个相同图案的对子连接起来,连接线不多于3根直线,就可以成功将对子消除。

该游戏具有不同的关卡难度,规则简单容易上手,游戏速度节奏快,操作简单容易上手,画面清晰可爱,是一款休闲娱乐游戏[2]。

基于java的连连看游戏的设计与实现毕业论文

基于java的连连看游戏的设计与实现毕业论文

本科毕业设计(论文)题目:基于java的连连看游戏的设计与实现专题题目:学院:软件学院专业:软件工程班级:软件冶金学号:学生:指导教师:职称:指导教师:职称:时间:年月日江西理工大学本科毕业设计(论文)任务书软件学院软件工程题目:基于java的连连看游戏的设计与实现专题题目(若无专题则不填):原始依据(包括设计(论文)的工作基础、研究条件、应用环境、工作目的等):●工作基础已经熟练的掌握java的各种基本技能,能够完成一款简单的基于java的连连看游戏的设计与实现。

●研究条件MyEclipse或者Eclipse和jdk 7的环境下编写整体的代码,用photoshop为游戏提供大量精致的图片素材。

●应用环境java当今最流行的语言,完全能够实现连连看游戏,硬件要求也不高,所以可行性是没有问题。

●工作目的连连看这款游戏的最基本架构,是如何实现消除相同的图片,并且如何有效的最短的消除路径。

主要内容和要求:(包括设计(研究)内容、主要指标与技术参数,并根据课题性质对学生提出具体要求):●研究内容1.用户登录注册系统(选做)2.游戏的基本逻辑实现(必做)3.游戏排行榜系统(必做)4.游戏的有难度梯度效果(必做)5.游戏的界面设计(必做)●主要技术指标与技术参数能够完整的完成游戏的体验成为可以娱乐的游戏。

具体要求独立完成本项目系统研制过程,系统能够顺利运行,并独立完成论文报告。

日程安排:1、1、毕业设计开题2016年3月30日前完成2、第一、二周需求分析3、第三、四周概要设计4、第五、六周详细设计5、第七、八、九周系统开发6、第十周系统测试7、第十一、十二周毕业设计论文整理8、提交毕业论文2016年5月8日前完成主要参考文献和书目:[1]Cay S. Horstmann, Gary Cornell .Java核心技术[M].北京:机械工业出版社,2014.[2]Bruce·编程思想(第4版)[M].北京:机械工业出版社,2007.[3]孙涌.现代软件工程[M].北京:北京希望电子出版社,2003.[4]赵满来.可视化Java GUI程序设计[M].北京:清华大学出版社,2010.[5]David Wallace 游戏高级编程[M].北京:清华大学出版社,2005.[6]王鹏.JavaSwing图形界面开发与案例详解[M].北京:清华大学出版社,2008.指导教师签字:年月日教研室主任签字:年月日江西理工大学本科毕业设计(论文)开题报告软件学院软件工程专业软题目:基于java的连连看游戏的设计与实现专题题目(若无专题则不填):本课题来源及研究现状:●课题来源:小游戏制作的目的是满足人们休闲的需要,在紧张工作之余休闲类的游戏可以给人带来最大程度的放松,也可以增进人们之间的交流。

JAVA课程设计连连看(含代码)

JAVA课程设计连连看(含代码)

Java程序课程设计任务书1、主要内容:本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。

2、具体要求(包括技术要求等):a. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。

方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。

b.当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。

c. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。

d. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。

e.运用基于SWING的图形用户界面设计知识等。

3、学习并掌握以下技术:Java等4、熟练使用以下开发工具:Jcreate 等实现系统上述的功能。

三、计划进度12月28日-12月29 日:课程设计选题,查找参考资料12月30日-12月31日:完成需求分析、程序设计1月1日-1月3日:完成程序代码的编写1月4日-1月6日:系统测试与完善1月7日-1月8日:完成课程设计报告,准备答辩四、主要参考文献[1] (美)埃克尔著陈昊鹏,饶若楠等译. Java编程思想[J]. 机械工业出版社,2005[2](美)Gary J.Bronson著张珑刘雅文译. Java编程原理[J]. 清华大学出版社,2004[3](美)Michael Morrison著徐刚,于健,薛雷译. 游戏编程入门[J]. 人民邮电出版社,2005.9[4](美)Wendy Stahler著冯宝坤,曹英译. 游戏编程中的数理应用[J]. 红旗出版社,2005[5](美)克罗夫特(David Wallace Croft)著彭晖译. Java游戏高级编程[J]. 清华大学出版社,2005[6](美)David Brackeen著邱仲潘译. Java游戏编程[J]. 科学出版社,2004[7] 聂庆亮编著. Java应用开发指南[J]. 清华大学出版社,2010[8] 耿祥义,张跃平编著. Java面向对象程序设计[J]. 清华大学出版社,2010[9] 杨绍方编著. Java编程实用技术与案例[J]. 清华大学出版社,2000.11[10] 明日科技编著. Java编程全能词典[J]. 电子工业出版社,2010摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。

java实现连连看游戏课程设计

java实现连连看游戏课程设计

java实现连连看游戏课程设计本⽂为⼤家分享了JAVA语⾔课程设计:连连看⼩游戏,供⼤家参考,具体内容如下1.设计内容界⾯中有5*10的界⾯,图中共有6种不同的图⽚,每两个相同的图⽚连接在⼀起,如果连线中转折的次数<=3次,两张图⽚可同时削掉,否则不能削去。

2.设计要求⾊彩鲜艳,⿏标点击键好⽤,以固定时间将所有图⽚消掉为胜利,若时间到了,图⽚还有,则闯关失败。

3.设计思想1) 搭建界⾯,⾸先搭建简单界⾯,可以先⽤按钮代替图⽚,并且⾏列可以先少做⼀些,如下图所⽰:2) 每次⽤户选择两个图形,如果图形满⾜⼀定条件(两个图形⼀样,且这两个图形之间存在转弯少于3的路径),则两个图形都能消掉。

给定任意具有相同图形的两个格⼦,我们需要寻找这两个格⼦之间在转弯最少的情况下,经过格⼦数⽬最少的路径。

如果这个最优路径的转弯数⽬少于3 ,则这两个格⼦可以消去。

3) 定义消掉的⽅法,此⽅法可以实现,当执⾏消掉功能时,可以消除两个按钮。

4) 在检验两个⽅块能否消掉的时候,我们要让两个⽅块同时满⾜两个条件才⾏,就是两者配对并且连线成功。

分3种情况:(从下⾯的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测⼀条直路经。

这样就会有三条路经。

若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)* 1.相邻* 2. 若不相邻的先在第⼀个按钮的同⾏找⼀个空按钮。

1).找到后看第⼆个按钮横向到这个空按钮所在的列是否有按钮。

2).没有的话再看第⼀个按钮到与它同⾏的那个空按钮之间是否有按钮。

3).没有的话,再从与第⼀个按钮同⾏的那个空按钮竖向到与第⼆个按钮的同⾏看是否有按钮。

没有的话路经就通了,可以消了.* 3.若2失败后,再在第⼀个按钮的同列找⼀个空按钮。

1).找到后看第⼆个按钮竖向到这个空按钮所在的⾏是否有按钮 2).没有的话,再看第⼀个按钮到与它同列的那个空按钮之间是否有按钮。

3).没有的话,再从与第⼀个按钮同列的那个空按钮横向到与第⼆个按钮同列看是否有按钮。

基于java的连连看游戏设计与实现

基于java的连连看游戏设计与实现

基于java的连连看游戏设计与实现Introduction连连看游戏是一种休闲益智游戏,旨在通过找到相同的图案来消除不断出现的图案。

本文将介绍如何在Java中设计和实现连连看游戏,包括图形界面、游戏逻辑和算法等方面的内容。

设计与实现1.图形界面Java提供了Swing框架,可以实现图形化界面。

多数连连看游戏都采用了类似于网格和游戏区域的布局。

可以使用JPanel 和JLabel组件在Java中创建一个类似于矩阵的网格。

可以将JPanel设置为GridLayout管理器,以便轻松布局。

JLabel被用来实现图像方块,只需将它们放在GridLayout的单元格中即可。

为了最大化游戏的效果,可以添加一些动画效果。

比如,当找到匹配的图案时,可以添加一个短时停顿来增加游戏的重心。

可以添加颜色效果,如淡出、变暗、变亮、闪烁等等,用来表示连接和匹配的图案。

2.游戏逻辑连连看游戏的逻辑可以分为三个部分:①初始化:游戏开始时,需要初始化游戏板。

为了防止一开始布局重复,可以使用随机数生成算法随机生成图案的布局。

必须确保生成的布局符合逻辑要求,即符合游戏规则,即只有路径长度为两个或更少的图案才会匹配。

初始化后,可以进入游戏模式。

②玩法:在玩家移动图块方面,可以通过鼠标点击或鼠标滑动来实现。

让用户通过鼠标移动的方式选择准确的两个块,并将它们连接在一起,消除所选的方块。

如果玩家选择的块不能组成一条可以消除的路径,则提示合法性错误。

必须持续地更新游戏板的状态以显示当前库存图案的可能匹配性。

如果没有合法的匹配,需要重新刷新图形或退出游戏。

③结束:当连连看游戏的图案消失时,游戏结束。

可以显示最后游戏得分和总时间,并允许玩家重新开始。

3.算法在创建游戏布局时,需要使用随机算法。

主要思路是为每个单元格生成随机数字,并将其相邻的分配给相邻的单元格。

使用蔓延的方法,依次在这个网格中移动,直到每个单元格都得到了分配的数字。

最后,这个矩阵头尾相接,生成一个关闭的形状。

基于java的连连看游戏设计

基于java的连连看游戏设计

毕业设计(论文)任务书注:本任务书要求一式两份,一份系部留存,一份报教务处实践教学科。

摘要游戏发展至今已经有30多年历史,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。

大部分的人一听到连连看游戏,通常就会想到这是一个小游戏。

连连看游戏,是指在一个区域内,分布着许多不同的图片,通过点击两张相同的图片并符合一定的规则消除它们的一个游戏。

我们最常见的是在QQ游戏大厅里的QQ连连看,网络上也有许多各式各样的单机版连连看游戏。

在游戏的过程中,可以考虑下如何使用自己掌握的程序去实现游戏的效果,并尝试去开发属于自己的连连看,这是一件十分惬意的事情。

在本章中,我们将详细的教大家如何使用Java去开发一款属于自己的单机连连看。

本游戏采用JAVA语言开发,以MyEclipse为开发平台。

游戏主界面是基于GUI(图形用户界面)的开发,使得游戏界面简单清晰。

并调用了其中的一些函数,完成了事件的触发功能。

希望通过这次开发设计出的连连看小游戏,给大家的生活带来一点乐趣。

游戏通过定义动态的二维数组,根据一定的算法实现规定的路径判断。

关键词:连连看、小游戏、JAVA、GUI、数组AbstractGame development has 30 years of history, in this short period, along with the hardware level, game development new technology emerge in an endless stream, classic games meet the eye everywhere. Most of the people hear Lianliankan game, they usually think this is a small game.Lianliankan game, refers to a region, the distribution of many different pictures, click through to two cards of the same picture and conform to certain rules to eliminate them in a game. It is most common in QQ game hall QQ Lianliankan, the network also has a lot of every kind of stand-alone edition game. In the course of the game, can consider how to use their mastery of the program to achieve game effects, and try to develop their own look again and again, this is a very happy thing. In this chapter, we will detail the teach you how to use Java to develop a belongs to ownstand-alone lianliankan.The game using JAVA language development, take MyEclipse as the development platform. The game 's interface is based on the GUI (graphical user interface ) development, which makes the game interface simple and clear. And call some of these functions, completed the event trigger function. Hope that through this design Lianliankan game, for everyone to bring to life a little fun.The game through the definition of the dynamic two-dimensional array, according to certain provisions of the path algorithm to determine.Key words: Lianliankan, game, JAVA, GUI, array目录摘要 .................................................................................................................................................................................. I V第一章绪论 ................................................................................................................................................................. - 1 -一游戏产业介绍 (1)二游戏的发展概况 (1)第二章连连看游戏描述 ............................................................................................................................................. - 2 -一游戏规则描述 (2)二游戏设计的目的 (2)三游戏可行性论证 (2)第三章连连看游戏的分析与设计 ............................................................................................................................. - 3 -一游戏的设计 (3)1 功能设计........................................................................................................................................................... - 3 -2 游戏模块设计................................................................................................................................................... -3 -3 算法模块........................................................................................................................................................... -4 -4 界面显示模块................................................................................................................................................... - 4 -5 菜单控制模块................................................................................................................................................... - 4 -6 地图设计........................................................................................................................................................... - 5 -7 算法设计......................................................................................................................................................... - 5 -8 类的设计........................................................................................................................................................... - 7 -1)Control.java 监听器类。

Java课程设计连连看游戏(含代码)

Java课程设计连连看游戏(含代码)

Java程序课程设计任务书一、主要任务与目标1、了解图形用户界面的概念;2、了解AWT的基本体系结构,掌握窗口的基本原理;3、掌握几种布局管理器的使用方法;4、掌握java的事件处理机制;5、了解Swing的基本体系结构,掌握Swing组件的使用方法;6、掌握java小程序的工作原理和使用方法;7、该游戏还将设置退出,再来一局按钮,并实现相应的功能。

8、设计一个用户注册登录界面二、主要内容与基本要求游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。

当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。

在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。

该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。

图片全部消完为游戏成功。

游戏还将设置退出,再来一局的按钮,和倒计时的功能,方便用户进行操作。

并且有一个用户登录注册界面,玩家必须登录以后才可以进行游戏。

三、计划进度12月28日~ 12月29日:课程设计选题,查找参考资料12月30日~ 12月31日:阅读参考书籍,收集资料,完成需求分析1月1日~ 1月3日:系统的代码设计及实现,数据库设计与实现1月4日~ 1月5日:系统的调试,修改,完善1月6日~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] 刘宝林.Java程序设计与案例习题解答与实验指导[M].[2] 王鹏何云峰.Swing图形界面开发与案例分析[M].[3](美)Karl Avedal , Danny Ayers, Timothy Briggs. JSP编程指南[M]. 电子工业出版社, 2004,47-125.[4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电子出版社,2005,210-236.[5] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2004, 79-86.[6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子工业出版社,2006,47-125.[7] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2005, 79-86.[8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large,web-based project[J]. IEEE Software.2002,19(02):81-89.摘要当今社会,休闲型游戏越来越得到人们的喜爱,我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手。

课程设计报告Java实现游戏连连看(有源代码)

课程设计报告Java实现游戏连连看(有源代码)

2.4流程图如下图2 主函数流程图图3 游戏进行流程图图4 使用炸弹流程图图5 计算时间流程图图6 开始游戏后画面用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作。

如果用户选择的是相同的图片(如第八行第二列和第八行第三列),那么系统会消除这两张图片,并使鼠标记数为0,并消除这两张图片的标记,使里面的图片被标记在外面。

以便用户可以进行以后的选择。

图7 消除三对后画面用户也可使通过使用“炸弹”功能进行消除图片。

方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片(如第一行第一列河第一行第四列)。

图8 使用炸弹后画面炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。

并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。

图9 炸弹使用光后画面当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。

图10 时间到时的画面当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。

图11 点击确定时的画面如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。

图12 通关画面4.设计体会通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

因而,通过课程设计之后,把以前所学过的知识重新温故。

有些在设计过程中已解决,有些还有待今后慢慢学习,只要认真学就会有更多的收获。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

硬件:以软件安装要求为准则,在设计的过程中确保程序调试的流畅。
【实习地点】:计算机实践基地、学生选定的调式地点与学生自己考察的外部地点相结合。
【翻译工作量】:对论文标题、关键字、摘要进行英文翻译。
【参考文献】:
[1] 张明新,周耿烈.Java 语言程序设计. 重庆:重庆大学出版社,2004.
[2] 周晓聪,李文军,李师贤.面向对象程序设计与 Java 语言. 北京:机械工业出版社,2004.
三、进度表
日期
第 15 周
第 16 周
第 17 周
第 18 周 第 19 周 第 20 周
完成日期
内容
查阅环境的搭建; 设计界面; 图片的选取与随机生成; 单击控件的事件处理;时间控制;其他控件与功能; 算法路径的实现; 得分设置; 过关设置; 完成系统,做功能修缮和调整,编写用户手册。
年月 日
III
摘要
游戏发展至今已经有 30 多年历史,在这个短暂的时期里,随着硬件水平的提高,游戏开 发新技术层出不穷,经典游戏比比皆是。大部分的人一听到连连看游戏,通常就会想到这是 一个小游戏。
连连看游戏,是指在一个区域内,分布着许多不同的图片,通过点击两张相同的图片并 符合一定的规则消除它们的一个游戏。我们最常见的是在 QQ 游戏大厅里的 QQ 连连看,网络 上也有许多各式各样的单机版连连看游戏。在游戏的过程中,可以考虑下如何使用自己掌握 的程序去实现游戏的效果,并尝试去开发属于自己的连连看,这是一件十分惬意的事情。在 本章中,我们将详细的教大家如何使用 Java 去开发一款属于自己的单机连连看。
按要求完成论文,并上交论文,制作电子文档,为答辩做准备。
2011 年 1 月 6 日
II
答辩日期
2011 年 2 月 21 日
四、主要参考文献、资料、设备和实习地点及翻译工作量:
【设备】:实践基地资源、个人设备资源及实习地点的设备资源,按照设计要求进行配置和安装。
【设计环境】:
软件:Windows XP,JDK6.0 以上版本,Eclipse5.0 以上版本。
现在小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐 过程),很多游戏不乏经典。由于手机互联网的不断发展,传统网游已经不能跟上时代的潮流,而网页游 戏无需客户端的特性,决定了将来会是 Web 游戏主宰网游市场。作为最基本的网页游戏之一,“连连看” 游戏的设计与实现可以积累开发网页游戏的经验,完善开发思路,为以后更高层次上的网页游戏开发,打 下坚实的基础,更好的推动网页游戏的发展。
The game using JAVA language development, take MyEclipse as the development platform. The game 's interface is based on the GUI (graphical user interface ) development, which makes the game interface simple and clear. And call some of these functions, completed the event trigger function. Hope that through this design Lianliankan game, for everyone to bring to life a little fun.
正是因为如此,通过本次毕业设计,让学生掌握如何制作一个游戏软件,以及制作游戏软件的整个流 程,制作游戏软件的步骤,让学生熟悉项目开发的完整过程,为即将到来的就业工作打下基础。另外也通 过本次设计将三年来所学的专业知识和其他方面的知识融入到实际应用中,在实际运用中学习和掌握 Java 程序开发的全过程,进一步熟悉掌握 Java 程序设计语言的基础内容、基本技能和方法,同时培养学生进 行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、 理解和归纳能力的提高。
10%) 8. 功能完善和改进:做最后的修缮和调整,使得功能全面、运行流畅、贴近实际运行环境。(占 5%)
【毕业论文】:
围绕“连连看”游戏的分析、设计与实现,撰写论文,论文不少于 30000 字。 论文撰写规范参考附件:兰州工专论文撰写规范(附件一).doc
【提交内容】:
“连连看”游戏的可执行文件和源码。 毕业论文的电子稿和打印稿,答辩 PPT。
连接,否则视为无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束或时间用完。 4. 游戏过程中,遇到困难难以寻找下一符合要求的一对牌,可按左下按钮重置重新排列,方可继续
游戏。 5. 可点击“退出游戏”按钮,结束游戏。
6. 游戏中可使用道具。
I
可在以下内容中进行选择,也可根据实际情况,自选内容,但需事先和指导教师进行沟通。 参考题目:Java 编程实现贪吃蛇游戏,打地鼠游戏。 【设计要求】:
Lianliankan game, refers to a region, the distribution of many different pictures, click through to two cards of the same picture and conform to certain rules to eliminate them in a game. It is most common in QQ game hall QQ Lianliankan, the network also has a lot of every kind of stand-alone edition game. In the course of the game, can consider how to use their mastery of the program to achieve game effects, and try to develop their own look again and again, this is a very happy thing. In this chapter, we will detail the teach you how to use Java to develop a belongs to own stand-alone lianliankan.
二、设计(论文)要求(工作量、内容):
【设计内容】: 通过 JAVA 编一个连连看程序,通过鼠标点击把两张一样的牌,用三根以下的线连起来使其消掉。程序 实现以下几个功能: 1. 实现个人小型休闲游戏连连看; 2. 开始游戏后,随机生成图片(或字符)位置,要求是至少两两相同,位置随机打乱; 3. 游戏规则是在一定时间内将相同字符或图片的牌连接,但要满足只能至少单边无阻碍呈直线趋势
V
目录
摘要....................................................................................................................................................................................IV
[3] Bruce Eckel.Java 编程思想.北京:机械工业出版社,2007.
[4] James Cohoon,Jack Davidson.Java 程序设计. 北京:清华大学出版社,2005.
[5] Steven Holzner.Java 技术内幕. 北京:机械工业出版社,2002.
[6] 张洪斌.Java 程序设计百事通. 北京:清华大学出版社,2001.
2. 游戏框架的搭建(占工作量的 15%); 3. 菜单的制作(占工作量的 10%); 4. UI 的设计(占工作量的 10%); 5. 算法的设计(占工作量的 15%); 6. 算法的实现(占工作量的 30%); 7. 系统调试:各小组进行功能整合,由小到大地调试功能模块,完成整个系统要求。(占工作量的
毕业设计(论文)
题目
基于 JAVA 的连连看游戏 设计与实现










指导教师(职称)


兰州工业高等专科学校
毕业设计(论文)任务书
毕业设计(论文)题目
基于 JAVA 的连连看游戏设计与实现
课题内容性质
软件开发
课题来源性质
教师收集的结合生产实际的课题
设计/论文
校内(外)指导教师 职 称
朱亚玲
本游戏采用 JAVA 语言开发,以 MyEclipse 为开发平台。游戏主界面是基于 GUI(图形用 户界面)的开发,使得游戏界面简单清晰。并调用了其中的一些函数,完成了事件的触发功 能。希望通过这次开发设计出的连连看小游戏,给大家的生活带来一点乐趣。
游戏通过定义动态的二维数组,根据一定的算法实现规定的路径判断。 关键词:连连看、小游戏、JAVA、GUI、数组
[11] 林建素,孟康健.《Eclipse 开发学习笔记》(第 1 版).北京:电子工业出版社. 2008.4
[12] 李松林,陈华清,任鑫.《Eclipse 宝典》(第 1 版).北京:电子工业出版社. 2007.9
指导教师签字
教研室主任签字
主管系领导签字
年月 日
年月 日
注:本任务书要求一式两份,一份系部留存,一份报教务处实践教学科。
1. 系统能够提供友好的用户界面,使操作人员的心情放松; 2. 系统具有良好的运行效率,能够得到快速发现自我的目的; 3. 系统应有良好的可扩充性,可以容易的转入其它系统应用;
4. 平台的设计具有一定的灵活性。
【实施步骤】:
1. 熟悉 JAVA 语言、UltraEdit-32 开发工具、Eclipse 开发工具(占工作量的 5%)
相关文档
最新文档