连连看java源码分析
java源码阅读技巧
java源码阅读技巧
阅读Java源码是每个Java程序员都应该具备的重要技能,以
下是一些阅读Java源码的技巧:
1. 理清目的,在阅读Java源码之前,首先要明确自己的阅读
目的是什么,是为了理解某个特定功能的实现,还是为了学习优秀
的编程实践和设计模式。
2. 选择合适的版本,Java的版本更新很快,不同版本的源码
可能会有一些差异,因此要根据自己的需要选择合适的版本进行阅读。
3. 从入口开始,通常情况下,阅读Java源码应该从入口开始,比如某个类或者某个方法,然后根据需要逐步深入。
4. 注重关键类和方法,Java源码非常庞大,不可能一下子全
部理解,因此要有选择地关注一些关键的类和方法,比如常用的集
合类、IO类等。
5. 结合文档,阅读Java源码时,要结合官方文档,了解每个
类和方法的作用和用法,这样能更好地理解源码的含义。
6. 调试和实践,阅读Java源码不仅仅是 passively reading,更重要的是要结合自己的实际项目进行调试和实践,这样能更深入
地理解源码的运行逻辑和细节。
7. 查阅其他资料,有时候Java源码本身并不能完全解答你的
疑惑,这时候可以查阅一些权威的书籍或者网络资料,加深自己的
理解。
总的来说,阅读Java源码需要耐心和细心,要有一颗渴望探索
的心态,同时要善于总结和归纳,不断地积累经验和知识。
希望以
上技巧对你有所帮助。
基于Flex和Java的网页小游戏连连看的开发
平顶山学院本科毕业设计基于Flex和Java的网页小游戏连连看的开发摘要游戏在现今社会里正成为人们释放压力、放松自己最行之有效的娱乐方式之一。
随着网络技术的快速发展,Flex网页小游戏以其界面美观、操作简单、无需安装、对硬件要求低等优点备受广大玩家的青睐。
因此,设计一款符合大众风格的网页小游戏具有重要意义。
在分析Flex游戏的基础上,首先通过游戏策划和需求分析确定游戏规则、界面布局和游戏所需实现的功能;然后用Flash Builder 4.6处理各种界面元素,完成游戏界面的制作;最后采用ActionScript3.0语言编程实现游戏选关、游戏开始、时间显示、得分显示、关卡显示、路径判断、图片消除、图片重置,以及重新开始和下一关等功能。
为了体现游戏的竞技性,增加趣味性,特设计Mysql数据库以保存玩家的得分及排名信息,用Java实现对数据库的直接操作,通过BlazeDs 插件连接Flex前端页面和后台Java代码,实现提交分数和查看排行榜的功能。
同时为了提高游戏性能,对路径判断算法进行了优化。
本文论述了网页游戏连连看的开发背景、意义,介绍了系统开发所使用的环境、工具以及开发语言,并对相关的开发技术进行了阐述。
重点论述了游戏策划、需求分析、详细设计、路径判断算法设计、代码实现和游戏测试的过程。
关键词:连连看,Flex,ActionScript3.0,B/S平顶山学院本科毕业设计Linkgame Development Based on Flex and JavaAbstractGame in today's society is becoming people to release pressure, relax the most effective way of a kind of entertainment. Along with the rapid development of network technology, the Flex web games, with its beautiful interface, easy operation, no installation is required, the advantages of low hardware requirements of the majority of players. Therefore, design a popular style of web games is of great significance.On the basis of analyzing the Flex game, first of all, through planning and demand analysis to determine the rules of the game, game interface layout and functionality needed for game; Then use Flash Builder 4.6 processing all kinds of interface elements, complete the game interface; Game selection is realized by using actionscript 3 language programming, game start, time display, scoring display, barriers, reset path elimination judgment, pictures, images, and start again the next level, and other functions. In order to reflect the athletics of the game, add interest, design the Mysql database to hold the player's score and ranking information, Use Java to realize the direct manipulation of the database, through the BlazeDs plugin connects Flex front-end and back-end Java code, submit scores and view the list of functions. At the same time to improve game performance, the path judgment algorithm is optimized.This paper discusses the web linkgame development background, significance, introduced the system development environment, tools, used by as well as the development language, and the development of related technology are expounded. Detailed discusses the planning, requirements analysis, detailed design, game path judgment algorithm design, code realization and game testing process.Keywords: linkgame, Flex, ActionScript3.0, B/S平顶山学院本科毕业设计目录1 绪论 (1)1.1 研究背景 (1)1.2 研究意义 (1)1.3 研究内容 (2)1.4 论文主要工作和结构安排 (2)1.5 本章小结 (2)2 相关技术及工具介绍 (3)2.1 Flex技术 (3)2.1.1 Flex介绍 (3)2.1.2 Flex的应用前景 (3)2.2 ActionScript语言 (4)2.2.1 ActionScript介绍 (4)2.2.2 ActionScript的优点 (5)2.3 Java语言 (5)2.4 BlazeDS技术 (6)2.5 开发工具 (6)2.5.1 Tomcat服务器 (6)2.5.2 Flash Builder (7)2.5.3 MyEclipse (7)2.5.4 MySQL (8)2.6 本章小结 (8)3 策划与需求分析 (9)3.1 游戏策划 (9)3.2 需求分析 (10)3.2.1 界面需求 (10)3.2.2 功能需求 (10)3.3 数据库需求 (17)3.4 本章小结 (17)4 设计与实现 (18)基于Flex和Java的网页小游戏连连看的开发4.1 总体设计 (18)4.2 详细设计和实现 (21)4.2.1 游戏界面 (21)4.2.2 级别选择 (22)4.2.3 游戏说明 (22)4.2.4 开始游戏 (23)4.2.5 图片区的显示 (24)4.2.6 关卡计时器 (24)4.2.7 得分记录 (24)4.2.8 关卡记录 (24)4.2.9 消除图片 (25)4.2.10 重置图片 (25)4.2.11 查看排行榜 (25)4.2.12 后台数据操作 (26)4.3 本章小结 (27)5 路径判断算法 (28)5.1 算法构思 (28)5.1.1 简化地图路径 (28)5.1.2 数组判断 (28)5.2 算法实现 (30)5.3 本章小结 (31)6 测试 (32)6.1 测试步骤 (32)6.1.1 界面测试 (32)6.1.2 功能测试 (32)6.2 测试结果 (34)6.3 测试分析 (34)6.4 本章小结 (34)7 结束语 (35)附录 (36)参考文献 (43)致谢 (44)平顶山学院本科毕业设计1 绪论连连看小游戏的开发是为了满足玩家休闲的需要。
基于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 开发游戏连连看其实不管是做软件也好,做游戏也好,只要是写程序,在动手之前是一定会存在需求和分析的,如果不经过一定的分析就开始动手写程序,那么,这个程序一定会很难写下去的,最后的结果可能会导致放弃。
那么,在我们动手之前,让我们先简单的分析一下吧。
由于“连连看”并不是一个我们凭空开发的游戏,并且网上也已经有很多别人已经开发好的版本,因此,对于我们来说,我们已经拥有了一个很好的原型(比如说 QQ 游戏中的“连连看”),分析起来也应该是轻松得多。
由于 QQ 中的“连连看”是网络版,为了开发上的简便,我们先放弃网络功能,做一个简单的单机版就行了。
现在,让我们现在来看一看 QQ 中的连连看吧。
“连连看”的游戏规则其实并不复杂,首先,游戏开始的时候,地图上会有由数张不同的图片随机分散在地图上(并且每张图片会出现偶数次,通常是 4 次),只需要在地图上找出两张相同的图片(点),并且这两个点之前可以用不超过 3 条的直线连接起来就可以消除这两点,如此下去,直到地图上的点全部消除完就算游戏结束,怎么样,规则很简单吧?:)我们的开发就完全按照些规则来吧。
分析游戏规则找出算法通过上面的分析,我们已经知道了游戏规则,可是,我们怎么样去实现呢?其实所谓的实现也就是算法,那我们怎么样找出算法呢?别急,让我们来看一看上图,或者自己动手玩一玩别人做好的。
通过对上图的观察,我们发现,可以将游戏中的地图看作是一个二维数组,其中的所有图片(以下称“点”)可以看作是数组中的一个具体的元素。
那么,游戏中相同的图片可以看作是数组中不同位置两个值相同的元素。
至于直线,让我们给组数中的每一个元素赋一个特殊的值如 0 ,以表示地图上空白的位置。
并且同时规定:当连续的具有该特殊值的点的横向索引或纵向索引相同时,可以认为这是一条直线,比如下图:当数组中两点的值相同并且两点间只需要不超过 3 根直线能连接起来的时候,就让这两点的值变为 0 ,如果数组中全是 0 值的点,就认为游戏已经结束:)怎么样,算法够简单了吧:)用伪代码来描述程序的结构现在,我们用伪代码来描述一下游戏,假设用户开始了游戏:消除两点;上次选择的点 = null ;if ( 地图上已没有可消除的点 ) { 游戏结束;}}else {上次选择的点 = 当前点;}}else {上次选择的点 = 当前点;}}游戏结束;看看有没有什么问题?如果没有问题,我们进入下一步吧:)确定程序需要的模块当伪代码完成后,并且在我们的大脑里转了几圈发现没有问题后,现在就可以开始进行模块的划分工作了。
连连看源代码
摘要:近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。
Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。
有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了.连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地。
饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。
之后村子的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。
连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜的休闲佳品。
关键字:发展,java,连连看,程序设计;1.课程设计介绍课题设计的目的:1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。
2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决;实际问题的能力,提高学生适应实际,实践编程的能力。
3)熟练掌握JAVA语言中图形用户界面程序的编写;4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。
课程设计的要求:由于Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。
面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承学会java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。
java蔬菜连连看游戏程序设计组
《面向对象的程序设计》课程设计1、题目:蔬菜连连看游戏程序设计2、实验目的:通过在指定的窗口界面完成“连连看”小游戏程序的编写和调试加深对面向对象程序设计的理解3、主要功能:相同图片相邻或连成一条直线可消除,相同图片之间只转一个或两个弯也可消除4、平台:在Windows 7下使用MyEclipse 开发5、设计参数:A.该程序界面为方格类型,由纵10横10的直线交叉组成,分别是8行8列方块拼接,共64格小方块。
方块上随即分布一些数字,数字的要求是至两两相同,位置随机打乱。
B.游戏规则是将相同数字的方块连接,若连接一对成功就消失于界面,继续游戏,知道游戏结束。
C.游戏设有时间要求,时间到,游戏结束。
D.游戏可以选择难度,分别为简单,中等,较难、超难。
E.游戏有记录得分和关卡。
F.6、设计组:7、完成情况:a.本程序源代码保存形式为lianliankan.java,在MyEclipse工具下开发。
b.本程序由两个类构成,分别是class lianliankan 和 class lianliankanJPanel,其中class lianliankanJPanel是内部类。
c.本程序由画画函数 painComponent()、重载函数chongzai()、重新开始游戏newGame()、所有方块清除,进入下一关guoguan()、新建地图newMap()、判断是否在一条直线上linecheck()、判断能否折角相连zhejiaocheck()、判断能否两次折角相连liangcizejiaocheck()、能否在两次折角内连接ifcanTouch()、清除两个一样的符合条件的方块clearBlock()、选择难度itemStateChanged()、主函数main()、画画函数paintCompinent()等十三个函数组成。
8、工作评价:9、其他说明:附上代码:package lianliankan;import java.awt.*;// java.awt包,即java抽象窗口工具包,提供如Button(按钮)、TextField(文本框)和List(列表) import javax.swing.*;//javax.swing是图形可视包,导入进行图形化软件的开发import java.awt.event.*;public class lianliankan extends JFrame{private static final long serialVersionUID = 1L;public lianliankan(){lianliankanJPanel llk=new lianliankanJPanel();//是个容器,可以把JButton,JTextArea,JTextFiled等加入add(llk);}class lianliankanJPanel extends JPanel implements ActionListener,ItemListener{private static final long serialVersionUID = 1L;private int[][] map=new int[10][10];private int kinds,randomx,randomy,randomx1,randomy1;private int coordinatex,coordinatey,coordinatex1,coordinatey1;private Point lineStart=new Point(0,0);private int clicktimes;private int jishushengyu;private int fruitKinds=4;private int score;private int guanshu;loudou ld=new loudou();JButton BlockButton[][]=new JButton[10][10];Choice difficultChoice = new Choice();JButton newgameButton=new JButton("开始");JButton reLoad=new JButton("刷新");ImageIcon aIcon = new ImageIcon("image/sucai1.jpg");ImageIcon bIcon = new ImageIcon("image/sucai2.jpg");ImageIcon cIcon = new ImageIcon("image/sucai3.jpg");ImageIcon dIcon = new ImageIcon("image/sucai4.jpg");ImageIcon eIcon = new ImageIcon("image/sucai5.jpg");ImageIcon fIcon = new ImageIcon("image/sucai6.jpg");ImageIcon gIcon = new ImageIcon("image/sucai7.jpg");ImageIcon hIcon = new ImageIcon("image/sucai8.jpg");ImageIcon iIcon = new ImageIcon("image/sucai9.jpg");ImageIcon jIcon = new ImageIcon("image/sucai10.jpg");ImageIcon k1Icon = new ImageIcon("image/sucai11.jpg");ImageIcon lIcon = new ImageIcon("image/sucai12.jpg");ImageIcon mIcon = new ImageIcon("image/sucai13.jpg");ImageIcon nIcon = new ImageIcon("image/sucai14.jpg");ImageIcon oIcon = new ImageIcon("image/sucai15.jpg");ImageIcon kIcon = new ImageIcon("image/kongbai.jpg");public lianliankanJPanel(){this.setLayout(null);newMap();for(int i=0;i<10;i++){for(int j=0;j<10;j++){BlockButton[i][j]=new JButton();add(BlockButton[i][j]);BlockButton[i][j].addActionListener(this);BlockButton[i][j].setBounds(j*40, i*40, 40, 40);}}difficultChoice.add("简单");difficultChoice.add("中等");difficultChoice.add("较难");difficultChoice.add("超难");newgameButton.setBounds(map[0].length*40+30, 20, 60, 20);reLoad.setBounds(map[0].length*40+30, 60, 60, 20);difficultChoice.setBounds(map[0].length*40+30, 100, 60, 20);difficultChoice.addItemListener(this);newgameButton.addActionListener(this);reLoad.addActionListener(this);ld.setBounds(map[0].length*40+30, 240, 70, 160);this.add(ld);this.add(newgameButton);this.add(reLoad);this.add(difficultChoice);}public void paintComponent(Graphics g) //画画函数{super.paintComponent(g);g.drawString("得分: "+score, 430, 160);g.drawString("第 "+(guanshu+1)+" 关", 430, 200);for(int i=0;i<10;i++){for(int j=0;j<10;j++){switch (map[i][j]){case 0:BlockButton[i][j].setIcon(kIcon);break;case 1:BlockButton[i][j].setIcon(aIcon);break;case 2:BlockButton[i][j].setIcon(bIcon);break;case 3:BlockButton[i][j].setIcon(cIcon);break;case 4:BlockButton[i][j].setIcon(dIcon);break;case 5:BlockButton[i][j].setIcon(eIcon);break;case 6:BlockButton[i][j].setIcon(fIcon);break;case 7:BlockButton[i][j].setIcon(gIcon);break;case 8:BlockButton[i][j].setIcon(hIcon);break;case 9:BlockButton[i][j].setIcon(iIcon);break;case 10:BlockButton[i][j].setIcon(jIcon);break;case 11:BlockButton[i][j].setIcon(k1Icon);break;case 12:BlockButton[i][j].setIcon(lIcon);break;case 13:BlockButton[i][j].setIcon(mIcon);break;case 14:BlockButton[i][j].setIcon(nIcon);break;case 15:BlockButton[i][j].setIcon(oIcon);break;default:break;}}}}public void chongzai() //重载函数{jishushengyu=0;for(int i=1;i<9;i++){for(int j=1;j<9;j++){if(map[i][j]>0){jishushengyu++;}}}int[][] map1=new int[10][10];this.map=map1;for(int i=0;i<jishushengyu/2;i++){kinds=(int)(Math.random()*1000)%fruitKinds+1;do {randomx1=(int)(Math.random()*1000)%8+1;randomy1=(int)(Math.random()*1000)%8+1;} while (map[randomy1][randomx1]>0);map[randomy1][randomx1]=kinds;do {randomx=(int)(Math.random()*1000)%8+1;randomy=(int)(Math.random()*1000)%8+1;} while (map[randomy][randomx]>0);map[randomy][randomx]=kinds;}repaint();}public void newGame() //重新开始游戏{for(int i=0;i<10;i++){for(int j=0;j<10;j++){BlockButton[j][i].setEnabled(true);}}int[][] map=new int[10][10];this.map=map;newMap();ld.setTimes(0);score=0;guanshu=0;ld.setdijiguan(guanshu);}public void guoguan() //过关后所有方块自动清除进行下一关{int jishushengyu2=0;for(int i=1;i<9;i++){for(int j=1;j<9;j++){if(map[i][j]>0){jishushengyu2++;}}}if(jishushengyu2==0){int[][] map=new int[10][10];this.map=map;newMap();ld.setTimes(0);guanshu++;ld.setdijiguan(guanshu);reLoad.setEnabled(true);}}public void newMap() //新建地图{for(int i=0;i<32;i++){kinds=(int)(Math.random()*1000)%fruitKinds+1;do {randomx1=(int)(Math.random()*1000)%8+1;randomy1=(int)(Math.random()*1000)%8+1;} while (map[randomy1][randomx1]>0);map[randomy1][randomx1]=kinds;do {randomx=(int)(Math.random()*1000)%8+1;randomy=(int)(Math.random()*1000)%8+1;} while (map[randomy][randomx]>0);map[randomy][randomx]=kinds;}}public boolean linecheck(int y1,int x1,int y2,int x2){ //判断是否在一条直线上if(y1==y2){if(x2>x1){int j=0;for(int i=0;i<x2-x1-1;i++){if(map[y1][x1+i+1]>0)j++;}if(j==0)return true;}if(x1>x2){int j=0;for(int i=0;i<x1-x2-1;i++){if(map[y1][x2+i+1]>0)j++;}if(j==0)return true;}}if(x1==x2){if(y2>y1){int j=0;for(int i=0;i<y2-y1-1;i++){if(map[y1+i+1][x1]>0)j++;}if(j==0)return true;}if(y1>y2){int j=0;for(int i=0;i<y1-y2-1;i++){if(map[y2+i+1][x1]>0)j++;}if(j==0)return true;}}return false;}public boolean zhejiaocheck(int y1,int x1,int y2,int x2) //判断能否折角相连{if(linecheck(y1,x1,y2,x1)&&linecheck(y2,x1,y2,x2)&&map[y2][x1]==0){return true;}if(linecheck(y1,x1,y1,x2)&&linecheck(y1,x2,y2,x2)&&map[y1][x2]==0) {return true;}return false;}public boolean liangcizhejiaocheck(int y1,int x1,int y2,int x2) //判断能否两次折角相连{for(int i=0;i<9;i++){if(x2+1+i<10&&map[y2][x2+1+i]==0&&linecheck(y2, x2, y2, x2+1+i)){if(zhejiaocheck(y1, x1, y2, x2+1+i))return true;}if(x2-1-i>=0&&map[y2][x2-1-i]==0&&linecheck(y2, x2, y2, x2-1-i)){if(zhejiaocheck(y1, x1, y2, x2-1-i))return true;}if(y2+1+i<10&&map[y2+1+i][x2]==0&&linecheck(y2, x2, y2+1+i, x2)){if(zhejiaocheck(y1, x1, y2+1+i, x2))return true;}if(y2-1-i>=0&&map[y2-1-i][x2]==0&&linecheck(y2, x2, y2-1-i, x2)){if(zhejiaocheck(y1, x1, y2-1-i, x2))return true;}}return false;}public boolean ifcanTouch(int y1,int x1,int y2,int x2) //能否在两次折角内连接{if(y1==y2&&(x1==x2+1||x1==x2-1)) //相邻{return true;}if(x1==x2&&(y1==y2+1||y1==y2-1)){return true;}if(linecheck(y1,x1,y2, x2)) //一条线上{return true;}if(zhejiaocheck(y1, x1, y2, x2)) //折角上return true;}if(liangcizhejiaocheck(y1, x1, y2, x2)) //两次折角{return true;}if(liangcizhejiaocheck(y2, x2, y1, x1)){return true;}return false;}public void clearBlock() //清除符合条件的方块{if(clicktimes>=2){if(map[coordinatey1][coordinatex1]==map[coordinatey][coordinatex]&&!((coordinatex1==coordinatex)&&(coordinatey1==coordinatey))) {if(ifcanTouch(coordinatey1, coordinatex1, coordinatey, coordinatex)){if(map[coordinatey1][coordinatex1]>0)score=score+10;map[coordinatey1][coordinatex1]=0;map[coordinatey][coordinatex]=0;guoguan();}}}}public void actionPerformed(ActionEvent e){if(ld.getTimes()==55){for(int i=0;i<10;i++){for(int j=0;j<10;j++){BlockButton[j][i].setEnabled(false);}}if(e.getSource()==reLoad){chongzai();reLoad.setEnabled(false);}if(e.getSource()==newgameButton){newGame();reLoad.setEnabled(true);}for(int i=0;i<10;i++){for(int j=0;j<10;j++){if(e.getSource()==BlockButton[j][i]){clicktimes++;lineStart.move(i,j);if(clicktimes%2==1){coordinatex1=i;coordinatey1=j;}if(clicktimes%2==0){coordinatex=i;coordinatey=j;}}}}this.requestFocus();clearBlock();repaint();}public void itemStateChanged(ItemEvent e) //选择难度{if(e.getSource()==difficultChoice){String selected = difficultChoice.getSelectedItem();if(selected=="简单"){fruitKinds=4;newGame();repaint();}else if(selected=="中等"){fruitKinds=8;newGame();repaint();}else if(selected=="较难"){fruitKinds=12;newGame();repaint();}else if(selected=="超难"){fruitKinds=15;newGame();repaint();}}}}public static void main(String[] args) //主函数{lianliankan frame=new lianliankan();frame.setTitle("水果蔬菜连连看王春辉陈坤炜王国林杨彬程秋瑜 ");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLocation(440, 100);frame.setSize(540,440);frame.setVisible(true);}}class loudou extends JPanel implements Runnable{private static final long serialVersionUID = 1L;private int dijiguan;int remainTimes=0;int y1=35;int x2=60;int y2=155;Thread nThread1;JLabel overJLabel=new JLabel("GAMESTART");JDialog dialog=new JDialog();public loudou(){nThread1=new Thread(this);nThread1.start();this.setLayout(null);this.add(overJLabel);overJLabel.setBounds(0, 0, 90, 30);}public void setdijiguan(int x){this.dijiguan=x;}public void paintComponent(Graphics g) //画画函数{super.paintComponent(g);g.setColor(Color.red);g.drawLine(x1, y1, x2, y2);g.drawLine(x2, y1, x1, y2);g.drawLine(x1, y1, x2, y1);g.drawLine(x1, y2, x2, y2);g.fill3DRect(x1, y1-5, x2+1, y1, true);g.fill3DRect(x1, y2, x2+1, y1+3, true);g.setColor(Color.lightGray);g.drawLine(x1, y1, x1, y2);g.drawLine(x2, y1, x2, y2);g.setColor(Color.green);for(int i=0;i<60;i++){g.drawLine(x1+i/2+2, y1+i, x2-i/2-2, y1+i);}if(remainTimes<55){for(int i=0;i<remainTimes;i++)g.drawLine(x1+i/2+2, y2-i-1, x2-i/2-2, y2-i-1);}g.drawLine((x1+x2)/2, (y1+y2)/2, (x1+x2)/2 ,y2-2);g.drawLine((x1+x2)/2+1, (y1+y2)/2+1, (x1+x2)/2+1 ,y2-2);g.setColor(getBackground());for(int i=0;i<remainTimes;i++){g.drawLine(x1+i/2+2, y1+i, x2-i/2-2, y1+i);}}if(remainTimes>=50&&remainTimes<=55)overJLabel.setText(" "+(55-remainTimes)+" SCEND");}public void setTimes(int x){this.remainTimes=x;}public int getTimes(){return remainTimes;}public void run(){while(dijiguan<20){if(remainTimes==0){overJLabel.setText(" START !");}if(remainTimes==56){overJLabel.setText("TIME'S UP");JOptionPane.showMessageDialog(null,"游戏结束");}remainTimes++;repaint();try {if(dijiguan<6)Thread.sleep(1200-dijiguan*100);if(dijiguan>=6&&dijiguan<=8)Thread.sleep(700-(dijiguan-5)*50);if(dijiguan>8)Thread.sleep(550-(dijiguan-8)*20);}catch (InterruptedException e){e.printStackTrace();}}}}运行产生以下界面:。
连连看游戏分析设计与实现
连连看游戏分析设计与实现1.连连看(picture matching)游戏简介连连看游戏界面上均匀分布2N个尺寸相同的图片,每张图片在游戏中都会出现偶数次,游戏玩家需要依次找到两张相同的图片,而且这两张图片之间只用横线、竖线相连(连线上不能有其他图片),并且连线的条数不超过3条,那么游戏会消除这两个图片。
连连看是一款广受欢迎的小游戏,它具有玩法简单、耗时少等特征,尤其适合广大白领女性在办公室里休闲、放松.2。
分析连连看连连看是一个小的、简单的游戏程序,所以不需要大量的分析.首先,我们列出用例。
用例不多。
有:用户开始游戏,用户进行配对图片。
图1。
连连看用例图下一步就是为每个用例和相关场景写一个文本描述。
连连看相当简单,只有一个参与者,就是游戏玩家。
在使用这个程序的过程中也不会碰到出错的情况,所以场景也很短。
开始游戏的场景:玩家打开应用程序,点击“开始”按钮,会生成三种不同的图片排列方式(矩阵、竖向、横向排列).配对图片的场景:玩家对图片进行配对,配好后会消除这对图片。
当在规定的时间内配对完所有图片时,弹出胜利对话框,否则弹出失败对话框。
尽管只有2个简单用例,但它们确实揭示了我们所需完成的任务的重要方面。
大的应用程序会有更多的用例,有些更为复杂,有些一样简单。
用例导致了场景。
场景通常要比这个例子中的复杂,反映了在某项特征或功能上,用户和开发者之间的更为细节化的合约。
每个场景所需的细节程序取决于许多方面,但将场景写下来有助于确保每个人理解系统应该完成什么任务。
我们在连连看的用例和场景的呈现上不是太正规。
有时,这种非正规的方式和几张纸或白板就足够了。
更为正规的面向对象方法学在确定用例及相应场景方面有更正规的做法,也提供了特定的软件来创建和跟踪用例和场景。
3.(分析阶段)发现对象、属性和操作通过阅读问题描述以及实际情况,我们得到以下名词清单:图片,游戏视图,图片的排列方式,服务组件.包图通过对问题的声明的名词进行分析,我们得到游戏的包图:图2,连连看包图其中util包负责与图片加载有关的处理,view包负责呈现界面,Object包是整个游戏的配置参数,impl是图片的排列方式,board包含了整个游戏的面板类。
连连看算法及实现原理详解(C++源码)
void FunctionalModule::m_ColorToNum(HWND hwnd) //把像素转换为数组格式
{
HDC hdc=GetDC(hwnd);
break;
default:
break;
}
}
}
}
}
}
}
}
}
}
////////////////////////////////////////////////////////////////////////
int icolor=0;
COLORREF ccolor1,ccolor2;
for (int n1=0,nx=10;n1<5;n1++,nx-=5)
{
for (int m1=0,my=10;m1<5;m1++,my-=5)
int m_LeftTop(int ax,int ay,int bx,int by); //左上 11
int m_YLeft(int ax,int ay,int bx,int by); //y左 12
int m_LeftBottom(int ax,int ay,int bx,int by); //左下 13
{
ptLineOne.x=0;ptLineOne.y=0;//转折点的两个坐标设为0
ptLineTwo.x=0;ptLineTwo.y=0;
numTotal=(xLast+1)*(yLast+1);//图案总的个数
基于Android的手机应用开发—连连看游戏的开发与实现
本科毕业设计(论文)题目: 基于Android的手机应用开发——连连看游戏的开发与实现姓名学院信息与通信工程学院专业自动化班级学号班内序号指导教师2010年6月基于Android的移动智能应用开发—连连看游戏的开发与实现摘要在地铁、机场和车站,越来越多的人低头玩着手机游戏,伴随着不断变化的表情,或皱眉或微笑。
手机已经成为人们生活的一部分,人们也渐渐习惯于将手机作为新的娱乐工具。
现在3G手机时代又即将开启。
2007年末,Android平台犹如一颗Google公司丢的重磅炸弹,在移动终端领域掀起了轩然大波。
Android凭借其开放性和灵活性渐渐赶超原有系统平台,成为近年来最热门的移动终端平台之一,在Android平台上进行游戏的开发,成为一个有趣并富有潜力的领域。
此次毕业设计的目的就是了解和掌握Android操作系统,并在Android平台上做简单的移动智能应用开发。
平台采用Java语言在eclipse上实现并测试。
该文章总体上可以分成两大部分,第一部分首先对Android平台的搭建作了简要的说明,然后介绍Android平台上开发的小游戏“连连看”的过程及方法;该游戏除了能实现传统“连连看”游戏的基本功能外,还有一些附加功能如帮助、背景音乐等。
第二部分介绍在Android平台上开发的一个程序,这个程序可以实现对视频的录制,并将录好的视频存储在手机的SD卡上这样一种功能。
其中第二部分可以被借鉴,进一步用于DVC编解码的实现。
也列举出了在调试程序时遇到的一些问题和解决方法。
将这两个程序放到真机上测试也收到了良好的效果。
关键词Android SD卡DVC 3GAndroid-based Mobile Intelligent Application Development –the development and implementation of the gameLianliankanABSTRACTIn the subway, airport and station, more and more people playing mobile games bow, accompanied by changing expression, or frown or smile.Phones have become a part of life, and people became accustomed to hand machine as a new entertainment tool.Now they are soon to open 3G cell phone era.The end of 2007, Android platform broke out like a blockbuster from Google Inc. in the field of mobile terminal has sparked an outcry.Android by virtue of its openness and flexibility gradually catch up with the original platform, become the most popular mobile terminal platforms. The game development in the Android platform has become an interesting and promising area.The graduation project is aimed to understand and master the Android operating system, and to do simple Android platform for mobile intelligent application development.The platform uses the java language, and is implemented and tested by eclipse.The article in general can be divided into two parts, the first part of the Android platform, a brief description of the structures, and then describes the development of Android platform game "Lianliankan" process and methods; the game in addition to achieve the traditional "Lianliankan" the basic function of the game, there are some additional features such as help, background music. The second part describes the development of Android platform, a program, this program can be recorded on video and video-recorded stored in the SD card such a function. The second part of which can be reference, and further for DVC codec implementation.Also cited a number of problems and solutions encountered in the debugger These two procedures into a real machine on the test also received good results.KEY WORDS Android sdcard DVC 3G目录第一章开发背景介绍----------------------------------------------- 21.1 手机应用市场描述---------------------------------------- 21.2 移动互联网进展------------------------------------------ 21.3 智能手机应用平台---------------------------------------- 41.4 Android平台介绍---------------------------------------- 61.5 Android开源性能展望------------------------------------ 9第二章连连看游戏开发过程介绍------------------------------------ 102.1 连连看游戏背景介绍------------------------------------- 102.2 连连看游戏开发平台介绍--------------------------------- 102.3 核心算法说明------------------------------------------- 122.3.1 数字化和布局-------------------------------------- 122.3.2 判断两个点的连通性-------------------------------- 132.3.3 布局无解的判断------------------------------------ 142.4 连连看游戏UI部分介绍---------------------------------- 142.5 代码的实现与分析--------------------------------------- 23第三章获取视频文件的程序设计------------------------------------ 293.1 Android多媒体开发背景介绍----------------------------- 293.2 MediaRecorder类的介绍--------------------------------- 293.3 设计思路概述------------------------------------------- 303.4 程序UI部分介绍---------------------------------------- 313.5 代码的实现与分析--------------------------------------- 33第四章遇到的问题及解决方法 ------------------------------------ 34第五章程序开发的心得体会 -------------------------------------- 40参考文献------------------------------------------------------- 41致谢--------------------------------------------------------- 42附录 1 ------------------------------------------------------- 43附录 2--------------------------------------------------------- 64第一章开发背景介绍1.1手机应用市场描述最近几年,国内手机市场发展势头迅猛,以Nokia、摩托、三星、等较大的手机制造商为主,又相继出现了数不胜数的手机生产厂家,其规模也在不断扩大,彩屏手机、彩信手机、智能手机纷纷上市,高像素照相手机、游戏手机、音乐手机开始纷纷登台亮相,现在又即将开启3G手机的时代,使视频通话成为了现实。
连连看实验报告
一、实验目的1. 熟悉并掌握使用Java语言进行图形界面编程的基本方法。
2. 理解并运用面向对象编程思想,提高编程能力。
3. 掌握连连看游戏的基本原理和实现方法。
4. 培养团队合作能力和创新意识。
二、实验内容1. 熟悉Java语言的基本语法和面向对象编程思想。
2. 使用Java Swing库开发图形界面。
3. 实现连连看游戏的基本功能,包括游戏界面、数据结构、逻辑算法等。
三、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse3. 编程语言:Java四、实验步骤1. 创建Java项目,命名为“连连看游戏”。
2. 设计游戏界面,包括游戏区域、时间显示、分数显示等。
3. 定义数据结构,用于存储游戏中的图片和匹配关系。
4. 编写游戏逻辑算法,包括初始化游戏、随机生成图片、匹配图片等。
5. 实现游戏控制,包括鼠标点击事件、图片移动、匹配判断等。
6. 编写游戏结束判断和结果显示。
五、实验结果与分析1. 实验结果通过以上步骤,成功开发了一个连连看游戏。
游戏界面美观,功能完善,可以满足用户的基本需求。
2. 实验分析(1)游戏界面设计:采用Java Swing库中的JPanel、JLabel等组件,实现了游戏界面的布局。
通过设置背景图片、颜色等属性,使游戏界面更具吸引力。
(2)数据结构:使用二维数组存储游戏中的图片,每行每列代表一个位置。
通过遍历数组,判断相邻图片是否可以匹配。
(3)逻辑算法:在游戏开始时,随机生成图片并存储到数组中。
当用户点击一个图片时,判断其相邻图片是否可以匹配。
如果可以匹配,则将这两个图片移动到一起,并更新分数和时间。
(4)游戏控制:通过监听鼠标点击事件,实现图片的移动和匹配判断。
当图片移动到一起时,判断是否匹配,并更新游戏状态。
六、实验总结1. 通过本次实验,掌握了Java语言的基本语法和面向对象编程思想,提高了编程能力。
2. 熟悉了Java Swing库在图形界面编程中的应用,为以后开发类似项目奠定了基础。
连连看原理
用 JAVA 开发游戏连连看(注:这篇文章是在2004.12完成的,当时是为了向《电脑爱好者》投稿,这是原稿,由于此杂志面向的读者原因,因此文章中有些地方显得过“白”,在此后,稿子经过两次修改,虽然最终得以发表,但已改得基本上没有太多的技术性了,而且两次改稿下来,一共写了近6万字,累~~~,现在将其略作修改放在主页上,希望对大家有所帮助)提起 JAVA ,相信大家也不会陌生了吧, JAVA 是一门相当优秀的语言。
目前 JAVA 领域 J2EE 、 JSP 、STRUTS 等技术不知有多么的热门,他们的主要用途是用来进行企业开发, J2ME 也由于能够被大量的移动设备所支持,因此,也有不少的程序,特别是游戏是在 J2ME 平台上开发的,反而是 J2SE ,似乎只是被人们用来做一做程序界面的,就连 APPLET 也很少有人使用了(有了 FLASH ,谁还用 APPLET 啊)。
用 JAVA 来开发桌面平台的游戏,似乎很少有人这么做,也可能大家一想到做游戏都会想到 C 、 C++ 、汇编等。
前段日子我迷上的 QQ 游戏中的“连连看”,游戏之余,突发奇想,也想自己用做一个试试,经过十来天的奋战,终于完成了。
我选择了 JAVA 来开发这个游戏,之所以选择 JAVA ,是因为:1.很少有人用 JAVA 来开发桌面游戏,是因为 JAVA 在网络方面的强大优势使人们忽略了 JAVA在桌面平台上的开发,特别是游戏方面,而并不是因为 JAVA 做不到,而我,却希望通过我的尝试来告诉大家:原来 JAVA 也能做出漂亮的桌面游戏的(我可不是在夸我的程序:))2.由于 JAVA 生来就是为网络服务的,因此,一旦有需要,很容易将单机版的游戏改为网络版的(我现在就在做:))3.由于现在有很多手机都支持 J2ME ,而 J2ME 和 J2SE 是一脉相承的,因此,用 JAVA 编写的游戏可以很容易移植到 J2ME 平台上,想想当你的游戏在手机上运行是一样多么愉快的事情啊。
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 小程序连连看源代码
public void reload() {
int save[] = new int[30];
int n=0,cols,rows;
int grid[][]= new int[8][7];
for(int i=0;i<=6;i++) {
for(int j=0;j<=5;j++) {
resetButton.addActionListener(this);
newlyButton=new JButton("再来一局");
newlyButton.addActionListener(this);
southPanel.add(exitButton);
southPanel.add(resetButton);
thisContainer.add(southPanel,"South");
thisContainer.add(northPanel,"North");
centerPanel.setLayout(new GridLayout(6,5));
for(int cols = 0;cols < 6;cols++){
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组
JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮
基于“连连看”实例的Java程序设计课程教学研究
基 于实例 的教学是 近年来讨论 比较 多的话题 。 本文将结合 程序 设计课 程教学 实际 ,探讨如何将程序 实 例引入 到课 堂 ,让 学生更 好 的学 习面 向对象程 序设 计 这 门课 程 。 由于J a v a 语 言与 生俱来 的 “ 面 向对 象 ” 的特 点 ,众 多 高校 选 择 其作 为 面 向对 象 程 序设 计 课
构造出一个 1 1 1 9 的G r i d L a y o u t 布 局 ,而后在每个单元
格 中放人一个J B u t t o n  ̄ 的对象 ,代表贴砖对象 。这样 ,
一
通俗易懂 ,且能激发学生 的课堂兴趣。考 虑到学生通常 对小游戏存在兴趣 ,本文引入 了较为普及 的小游戏 “ 连 连看” ,通过该游戏 的设计 ,来探 索面向对象程序设计
码 ,从语法 的角度说明如何使用而 已,并不能给学生更 多的直观感受 。在 “ 连连看 ”实例 中,主界面 区域显然
二、 “ 连连 看 "实例 设计 与教 学
为 了能够 达到 教学效 果 ,实例 的选取需 要适 当斟
酌 。实例的选择 不仅要能够满足基本的教学需要 ,更要
可以看成是 一种典 型的G r i d L a y o u t 布局应用。我们 可以
程 教学 的编程 语言 。本文 的实 例亦建 立在J a v a 平 台之
卜
一
与设计过程 。
B)当进行 可视化 程序设计 的时候 ,界面布局是无
法 回避的问题 。现在几乎所有 的教材在描述这个问题的
时候 ,通常只是 简要地罗列 出J a v a 平 台下的几种布局 , 诸 ̄ H F l o wL a y o u t 、B o r d e r L a y o u t 等 ,然后给出一小段代
连连看课程设计报告
湖南涉外经济学院课程设计报告课程名称:程序设计实训(2)报告题目:连连看游戏的开发学生姓名:唐杰所在学院:信息科学与工程学院专业班级:计科1002班学生学号:指导教师:邹竞2013年6月25日课程设计任务书摘要在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活不可或缺的一部分,越来越多的人使用计算机办公、娱乐、购物等等。
游戏行业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。
连连看游戏是一款很流行的小游戏,有的是连水果图片,有的是连麻将牌,有的是连各种小图片的等等。
各种图片让人看得眼花缭乱,这也可以锻炼人的反应能力和眼力,所以这款小游戏受到了越来越多人的喜爱,尤其是小孩子的喜爱。
连连看游戏也是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C#,C++,VB,JAVA等。
在本课程设计中我是利用C#语言编写,开发平台是Microsoft Visual Studio 2010,功能较为简单,寓学于乐。
程序的功能是通过找出游戏中两个相同图案的小方块,然后分别点击两个小方块将其消除;可通过倒计时的方式控制游戏时间,游戏时间到或者没有匹配的图案时则游戏结束,需要重新开局,每一局开始倒计时都重新开始;能够响应鼠标事件。
论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。
重点介绍了在游戏过程中各种事件的处理,其中又以鼠标事件的处理最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作,消除需要消除的小方块。
关键词:连连看游戏;算法设计;事件;C#;Microsoft Visual Studio 2010目录课程设计任务书 (II)摘要 (III)一、课程设计目的 (1)二、任务描述和要求 (2)2.1 问题描述 (2)2.2 任务描述 (2)2.3 设计要求 (3)三、需求分析 (4)3.1功能分析 (4)3.2功能需求 (4)3.3 功能模块 (5)3.4系统需求分析总结 (6)四、设计方案 (7)4.1 总体设计 (7)4.1.1 系统基本功能 (7)4.1.2 系统流程 (8)4.1.3 主要功能模块 (10)4.2 详细设计 (11)4.2.1 规则详解 (11)4.2.2部分程序代码解析 (12)4.2.3运行结果分析 (17)五、总结 (20)六、参考文献 (21)一、课程设计目的《程序设计实训》课程是是计算机科学与技术专业重要的实践性课程之一,其实践性和应用性都很强。
JAVA开发连连看游戏
1 引言1.1 连连看游戏发展[1]游戏“连连看”顾名思义就是找出相关联的东西,连连看游戏在网上基本是用于小游戏中,就是找出相同的两样东西,在一定的规则之内可以做为相关联处理。
“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。
在电脑普及发展的今天,网络小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。
连连看游戏就是典型,因此不管走到哪个网页游戏网站,连连看游戏总是排在受玩家欢迎排名的前3位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络、单机休闲小游戏。
1.1.1 桌面连连看游戏发展游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。
这其中,顾方编写的“阿达连连看”以其精良的制作广受好评,这也成为顾方“阿达系列软件”的核心产品。
并于2004年,取得了国家版权局的计算机软件著作权登记证书。
1.1.2 在线连连看游戏发展随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。
如“水晶连连看”、“果蔬连连看”、“石头连连看”等。
1.1.3 社交连连看游戏发展2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。
“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。
1.2 连连看游戏介绍当今社会休闲型游戏越来越得到人们的喜爱,连连看游戏是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手,因此吸引了一大批玩家,且不分男女老少、工薪白领,是一款适合大众的经典网络、单机休闲小游戏。
1.2.1 连连看游戏基本规则如果两个相同的图案之间如果能画出一条不多于2折的连线,则消除这两个图案,直到所有的图案全部消除为止,这就是连连看。
连连看小游戏设计毕业设计
摘要游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。
这个程序的界面使用Jframe框架,主程序窗口包含一个主面板,其中包含两个子面板,左边一层子面板是游戏窗口,符合我们玩游戏的习惯,包含连连看游戏的图片元素,用户进行游戏能找到32对图片;右边一层用来实现游戏控制,有开始、刷新、选择难度、显示分数、进度条等功能选项。
结合Java 编程语言的简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程、动态和连连看游戏的休闲、趣味、益智加上美观的界面设计和秀色可餐的水果蔬菜游戏图片元素,使这款连连看游戏成为现代都市人们打发无聊,放松身心的好帮手。
加入了游戏时间控制和过关控制及进度条提示功能使游戏速度节奏快,画面清晰可爱,老少皆宜。
通过ActionEvent 组件进行动作事件的监听和处理。
游戏通过定义数组,根据一定的算法实现规定的路径判断。
关键字: Java连连看;Jframe;数组;路径判断AbstractThe game "lianliankan", as long as the two cards with the same suit straight up to three connected can be eliminated, rules are easy. This program of interface using Jframe framework, main program window contains a a main panel, which contains two a child Panel, left a layer child Panel is game window, meet we playing game of habits, contains fest see game of pictures element, user for game can found 32 on pictures; right a layer used to achieved game control, has began, and refresh, and select difficulty, and displayed score, and progress article, features option. Combines a simple Java programming language, object-oriented, distributed, interpreted, robust, secure system-independent, portable, high-performance, multithreaded, dynamic and lianliankan games, leisure, fun, puzzle together with attractive interface design and appetizing fruit vegetables picture elements, makes this lianliankan games become the modern city spending tedious, relaxed and good help. Joined the playing time control and border control and progress bar prompts make the game faster tempo, clear picture and lovely, both young and old. Action through the ActionEvent component event listening and handling. Games by defining an array according to certain algorithms provide path of judgment.Key words: Java Lianliankan ; Jframe ; array ; approaches目录1.引言 (1)2.游戏规则 (1)2.1概要 (1)2.2操作 (1)2.3胜利条件 (1)2.4失败条件 (1)3.发展概况 (1)3.1连连看游戏的历史 (1)3.2用java语言写连连看游戏的原因 (2)4.方案论证 (2)4.1设计原理 (2)4.2方案选择 (3)4.3主要问题 (3)4.4技术要求 (3)4.5游戏应用环境的构建 (4)5.系统分析 (4)5.1模块分析 (4)5.1.1 界面的设计和图片的随机生成模块 (5)5.1.2 菜单控制模块 (5)5.1.3算法模块 (5)5.2基本思路 (6)5.2.1 游戏地图设计思路 (6)5.2.2 连连看游戏图片 (6)5.2.3 获取图片位置 (6)5.2.4 路径判断思路 (7)6.系统设计 (8)6.1主界面的设计 (8)6.2图片的随机生成 (9)6.3单击控件的事件触发 (9)6.3.1开始游戏按钮 (9)6.3.2重列按钮 (10)6.3.3难度选择按钮 (10)6.4清除两个一样的符合条件的方块 (10)6.5过关设置 (10)7.结果分析 (11)7.1优点 (11)7.2缺点 (11)8.总结 (11)参考文献 (13)致谢 (14)1.引言网络小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。
Java连连看程序代码
Button p1,p2,br,bt1,bt2; //p1、p2为选定的按钮
Panel panel1,panel2;
int d[][]={ //用来和界面的按钮建立映射关系
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}
};
public static void main(String[] args)
panel1.add(b7); panel1.add(b8); panel1.add(b9);
panel1.add(b10); panel1.add(b11); panel1.add(b12);
panel1.add(b13); panel1.add(b14); panel1.add(b15);
b4=new Button(String.valueOf(d[1][4]));
b5=new Button(String.valueOf(d[1][5]));
b6=new Button(String.valueOf(d[2][1]));
b7=new Button(String.valueOf(d[2][2]));
{0,0,0,0,0,0,0}
};
this.d=d;
suiji(); //调用随机函数,产生随机数;
f.setVisible(false);
连连看小游戏代码
078
status = new int[ROW + 2][COL + 2];
079
button2PointMap = new HashMap<JButton, Point>();
080
pointList = new ArrayList<Point>();
081
visitedPoint = new HashSet<Point>();
082
genPointList();
083
084
first = null;
130
contentPane.add(buttonMatrix[row][col]);
131
if(num == -1){
132
buttonMatrix[row][col].setEnabled(false);
133
}
112
setButton(pairI, pairJ, num);
113
}
114
}
115
}
116
long end = System.currentTimeMillis();
117
System.out.println("cost time:" + (end - start));
118
}
119
120
private void setButton(int row, int col, int num) {
用JAVA设计手机连连看游戏
且 ,此款游戏与以往的连连看游戏不同 ,可以让用户自主设计
连连 看 游 戏 的 背 景 图 片 ,还 有 欢 快 的 背 景 音乐 舒 缓 神 经 ,增 添
了更多乐趣。因此,此款游戏有一定有广大的市场。
2基 本概 念 ’
, / 下 一 关 为上 一关 减 去5 秒 的时 间
t o t a l Ti me 一 = 5:
能 的 部分 代码 如 下 :
p u b l i c v o i d o n C l i c k ( Vi e w v )( n e w Al e r t Di a l o g . B u i l d e r ( S e t D i a l o g . t h i s )
.
以支持手机运行 。
2 l 世 纪 ,人们 所 承 受 的 来 自各 方 面 的压 力越 来 越 大 ,人 们
需要一个释放 自我的途径 。连连看小游戏 ,规则简单 ,生动有
趣 ,对 于 需 要 释 放 压 力 ,打 发 时 间 的 人 来 说 ,是不 二 之 选 。并
p r i v a t e R e f r e s h Ha n d l e r r e f r e s h H a n d l e r =n e w R e f r e s h Ha n d l e r 0 ;
s t a r t P l a y 0 ; )
2 Mi c r o E d i t i o n ,主 要 针 对 嵌入 式 系 统 ,包 括 手 机 、P DA 等 。针
( 3 )游戏 更 换 图片 代码 。
对 手 机应 用程 序 的开发 ,s u n 还 提供 了 免费 的J 2 ME Wi r e l e s s
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因为有朋友在站内信中问到连连看的具体算法,所以我就把算法post出来,这个算法也是参考网上Flash游戏的算法改写的,原来的参考信息已经找不到了,不过非常感谢那些无私的朋友。
改写的连连看算法如下:
前置条件:用一二维数组存放Map,-1表示没有图案可以连通,非-1表示不同的图案。
首先是横向检测:
Java代码
1.private boolean horizon(Point a, Point b)
2. {
3. if(a.x == b.x && a.y == b.y)//如果点击的是同一个图案,直
接返回false
4. return false;
5. int x_start = a.y <= b.y ? a.y : b.y;
6. int x_end = a.y <= b.y ? b.y : a.y;
7. for(int x = x_start + 1; x < x_end; x++)//只要一个不是
-1,直接返回false
8. if(map[a.x][x] != -1){
9. return false;
10. }
11. return true;
12. }
其次是纵向检测:
Java代码
1.private boolean vertical(Point a, Point b)
2.{
3. if(a.x == b.x && a.y == b.y)
4. return false;
5. int y_start = a.x <= b.x ? a.x : b.x;
6. int y_end = a.x <= b.x ? b.x : a.x;
7. for(int y = y_start + 1; y < y_end; y++)
8. if(map[y][a.y] != -1)
9. return false;
10. return true;
11.}
一个拐角的检测:
如果一个拐角能连通的话,则必须存在C、D两点。
其中C点的横坐标和A相同,纵坐标与B相同,D的横坐标与B相同,纵坐标与A相同。
Java代码
1.private boolean oneCorner(Point a, Point b)
2.{
3. Point c = new Point(a.x, b.y);
4. Point d = new Point(b.x, a.y);
5. if(map[c.x][c.y] == -1)
6. {
7. boolean method1 = horizon(a, c) && vertical(b, c);
8. return method1;
9. }
10. if(map[d.x][d.y] == -1)
11. {
12. boolean method2 = vertical(a, d) && horizon(b, d);
13. return method2;
14. } else
15. {
16. return false;
17. }
18.}
两个拐角的检测:
这个比较复杂,如果两个拐角能连通的话,则必须存在图中所示的连线,这些连线夹在A、B的横、纵坐标之间,这样的线就以下这个类存储,direct是线的方向,用0、1表示不同的方向
LIne类结构如下:
Java代码
1.class Line
2. {
3. public Point a;
4. public Point b;
5. public int direct;
6.
7. public Line()
8. {
9. }
10.
11. public Line(int direct, Point a, Point b)
12. {
13. this.direct = direct;
14. this.a = a;
15. this.b = b;
16. }
17. }
从A、B点的横纵两个方向进行扫描,就是Scan函数做的事情,把合适的线用LinkList存起来。
Java代码
1.private LinkedList scan(Point a, Point b)
2. {
3. ll = new LinkedList<Line>();
4. //Point c = new Point(a.x, b.y);
5. //Point d = new Point(b.x, a.y);
6. for(int y = a.y; y >= 0; y--)
7. if(map[a.x][y] == -1 && map[b.x][y] == -1 && vertic
al(new Point(a.x, y), new Point(b.x, y)))
8. ll.add(new Line(0, new Point(a.x, y), new Point
(b.x, y)));
9.
10. for(int y = a.y; y < map.row; y++)
11. if(map[a.x][y] == -1 && map[b.x][y] == -1 && vertic
al(new Point(a.x, y), new Point(b.x, y)))
12. ll.add(new Line(0, new Point(a.x, y), new Point
(b.x, y)));
13.
14. for(int x = a.x; x >= 0; x--)
15. if(map[x][a.y] == -1 && map[x][b.y] == -1 && horizo
n(new Point(x, a.y), new Point(x, b.y)))
16. ll.add(new Line(1, new Point(x, a.y), new Point
(x, b.y)));
17.
18. for(int x = a.x; x < map.column; x++)
19. if(map[x][a.y] == -1 && map[x][b.y] == -1 && horizo
n(new Point(x, a.y), new Point(x, b.y)))
20. ll.add(new Line(1, new Point(x, a.y), new Point
(x, b.y)));
21.
22. return ll;
23. }
最后是两个拐角的算法:
取出LinkList里面的线,测试A与B到该线的两点是否连通。
Java代码
1.private boolean twoCorner(Point a, Point b)
2.{
3. ll = scan(a, b);
4. if(ll.isEmpty())
5. return false;
6. for(int index = 0; index < ll.size(); index++){
7. Line line = (Line)ll.get(index);
8. if(line.direct == 1){
9. if(vertical(a, line.a) && vertical(b, line.b)){
10. return true;
11. }
12.
13. } else
14. if(horizon(a, line.a) && horizon(b, line.b)){
15. return true;
16. }
17. }
18. return false;
19.}
前面的函数有以下这个总的调用函数来调用,传入两个点,就可以判断这两个点是否符合连连看的算法了:
Java代码
1.public boolean checkLink(Point a,Point b){
2. if(map[a.x][a.y] != map[b.x][b.y])//如果图案不同,直接为
false
3. return false;
4. if(a.x == b.x && horizon(a, b))
5. return true;
6. if(a.y == b.y && vertical(a, b))
7. return true;
8. if(oneCorner(a, b))
9. return true;
10. else
11. return twoCorner(a, b);
12.}。