连连看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();}}}}运行产生以下界面:。
图片连连看游戏程序
《高级语言程序设计(2)》课程设计任务书《高级语言程序设计(2)》课程设计报告专业:班级:学号:姓名: 完成日期:指导教师一、程序设计说明书【设计题目】图片连连看游戏程序【问题描述】图片连连看游戏是利用java图形用户界面设计而设计的图片连连看游戏界面。
它的游戏规则就是选择一对内容相同的图案进行连线,但此连线不能穿跨其他图案。
连线的转折点不能多于两个,如果符合规定则消除此对图案。
如果游戏找不到可连接消除的图案,可以通过鼠标点击重列按钮让它重新排列图案,也可以通过鼠标重新开始新的游戏,时间结束后游戏自动结束,还可以通过鼠标退出游戏。
【软件功能】1 利用awt实现良好的游戏界面,游戏界面尽可能美观。
2 游戏开始时,能产生随机数字和随机位置以及限制的时间。
3 在按动鼠标和键盘时,游戏能玩起来,即能响应鼠标事件。
4 能消去满足条件的含有相同数字的图片。
5 能重列图片顺序。
6 能选择退出游戏和重新再来一局。
【算法思想】在检验两个图片能否消掉的时候,要让两个图片同时满足两个条件才行,就是两者配对并且连线成功。
分 3 种情况:这三种情况都需要三个检测,这三个检测分别检测一条直路经。
这样就会有三条路经。
若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了。
(1)、相邻(2)、若不相邻的先在第一个按钮的同行找一个空按钮。
1.找到后看第二个按钮横向到这个空按钮所在的列是否有按钮。
2.没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。
3.没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。
没有的话路经就通了可以消了.(3)、若(2)失败后,再在第一个按钮的同列找一个空按钮。
1.找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮 2.没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。
3.没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。
连连看游戏分析设计与实现
连连看游戏分析设计与实现1.连连看(picture matching)游戏简介连连看游戏界面上均匀分布2N个尺寸相同的图片,每张图片在游戏中都会出现偶数次,游戏玩家需要依次找到两张相同的图片,而且这两张图片之间只用横线、竖线相连(连线上不能有其他图片),并且连线的条数不超过3条,那么游戏会消除这两个图片。
连连看是一款广受欢迎的小游戏,它具有玩法简单、耗时少等特征,尤其适合广大白领女性在办公室里休闲、放松.2。
分析连连看连连看是一个小的、简单的游戏程序,所以不需要大量的分析.首先,我们列出用例。
用例不多。
有:用户开始游戏,用户进行配对图片。
图1。
连连看用例图下一步就是为每个用例和相关场景写一个文本描述。
连连看相当简单,只有一个参与者,就是游戏玩家。
在使用这个程序的过程中也不会碰到出错的情况,所以场景也很短。
开始游戏的场景:玩家打开应用程序,点击“开始”按钮,会生成三种不同的图片排列方式(矩阵、竖向、横向排列).配对图片的场景:玩家对图片进行配对,配好后会消除这对图片。
当在规定的时间内配对完所有图片时,弹出胜利对话框,否则弹出失败对话框。
尽管只有2个简单用例,但它们确实揭示了我们所需完成的任务的重要方面。
大的应用程序会有更多的用例,有些更为复杂,有些一样简单。
用例导致了场景。
场景通常要比这个例子中的复杂,反映了在某项特征或功能上,用户和开发者之间的更为细节化的合约。
每个场景所需的细节程序取决于许多方面,但将场景写下来有助于确保每个人理解系统应该完成什么任务。
我们在连连看的用例和场景的呈现上不是太正规。
有时,这种非正规的方式和几张纸或白板就足够了。
更为正规的面向对象方法学在确定用例及相应场景方面有更正规的做法,也提供了特定的软件来创建和跟踪用例和场景。
3.(分析阶段)发现对象、属性和操作通过阅读问题描述以及实际情况,我们得到以下名词清单:图片,游戏视图,图片的排列方式,服务组件.包图通过对问题的声明的名词进行分析,我们得到游戏的包图:图2,连连看包图其中util包负责与图片加载有关的处理,view包负责呈现界面,Object包是整个游戏的配置参数,impl是图片的排列方式,board包含了整个游戏的面板类。
基于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折的连线,则消除这两个图案,直到所有的图案全部消除为止,这就是连连看。
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);
连连看游戏算法实现
连连看算法为了方便,我们假设棋盘大小为 4 * 4,棋子有 4 种。
数字化和布局算法首先,我们知道每种棋子有 4 个,我们可以先按顺序把每种棋子排好,然后再随机取其中两个棋子交换一下,多次交换后,棋子就是乱的了。
参考下面两图,图中用 4 种颜色表示 4 种棋子:(1)初始排布(2)多次随机交换两个棋子后实际上程序内部是不需要认识棋子的图象的,只需要用一个 ID 来表示,界面上画出来的棋子图形是根据 ID 取资源里的图片画的。
比如上图中用 4 种颜色表示 4 种棋子,我们可以定义红色棋子的 ID 为 0,绿色为 1,蓝色为 2,黄色为 3。
另外,如果棋子被消除 ID 可以定义为 -1。
把 ID 放在一个二维矩阵,画到界面上时,根据距阵里元素的位置和值(ID)决定在什么位置画什么颜色棋子。
我见过两种风格的连连看,有一种是和我写的水晶连连看一样,连线可以伸到棋子矩行外面,比如图(2)中的第一行有两个红色棋子,这两个是可以连的;另外一种和 QQGame 里的连连看一样,连线不能伸到棋子矩行外面,也就是说图(2)中的第一行的两个红色棋子是不能连的。
程序内部棋子都是数字,这两种风格的差别在于 ID 距阵的大小,第一种是:(行数 + 2) * (列数 + 2);第二种是:行数 * 列数,这更简单,所以下面只说第一种。
(行数 + 2) * (列数 + 2) 的距阵,边界上都是 -1(也可以定义为别的,比如 -2),即留了空位给连线通过,而且这些空位不能安排任何棋子,在有些“关”的时候,棋子会移动,也不可以移动到边界的空位上!参考图(3),其中灰色表示边界空位,灰色边界内部是棋盘:(3)棋盘矩阵化(4)棋子数字化连通算法(1)直连型:太简单不说了。
(2)一折型:其实相当于两个棋子划出一个矩形,这两个棋子是一对对角顶点,另外两个顶点如果可以同时和这两个棋子直连,那就说明可以“一折连通”。
见图(5)两个红色棋子的连通情况,右上角打叉的位置就是折点。
java游戏开发--连连看5--完善用户界面
(之五)完善用户界面让界面更动起来整个程序的界面总算是出来了,可惜不太漂亮,这种界面,别说别人,就连自己也不愿意多看几眼,因此,做一些适当的美化工作还是非常有必要的。
想要让界面变得漂亮,最好的办法就是大量使用帖图,可惜,图片太多不仅会影响到程序的执行效率,同时,由于美工不是我们的长项,因此,我们还是走走捷径算了。
首先,我们将各个用户控件设置好背景色,这是最简单的方法了,只要颜色搭配得当,也是最有效的办法了。
其次,为了使界面看上去不那么单薄,因此,我们可以想办法使界面更有立体感。
好在 JAVA 为我们提供了许多种 Border 控件,通过 Border 控件来组合其它控件的使用,将会使界面变得有立体感。
第三,使用图片。
以上的方法,只会让控件变得漂亮,但控件仍然有控件的影子。
而大多数人一看到控件,第一反应就会想起应用程序,而不是游戏。
既然我们做的是游戏,那么,我们就可以自己做一些简单的图片来“掩蔽”控件的本来面目。
好在这个游戏按钮不多,做几个也不太难。
经过以上的几步操作,界面变得漂亮多了,不是吗?改变鼠标光标很少看见过有人改变程序中光标的样子,是不是 JAVA 做不到?其实 JAVA 已经考虑到了这一点,只不过很少有人想去这么做这已。
createCustomCursor 就是为我们准备的,其具体用法是:createCustomCursor(Image cursor, Point hotSpot, String name)cursor 是我们要设置为光标的图片, hotSpot 是图片显示在实际光标位置的位移, name 就是光标的名字拉!好了,现在我们找一张合适的图片来作为程序的光标吧,看看效果如何?如果,你还不满意,或者,你要说:我们的光标不能动啊,人家 QQ 上的光标可是会动的呢。
这确实有点麻烦,因为 JAVA 提供的方法只能显示静态的光标,但是,通过一些简单的方法,我们还是可以实现的。
由于 JAVA 的光标只能是静态图片,因此,要显示动态的光标,我们只能是定时更改光标的图片,首先,我们准备好一系列图片,然后,我们需要使用javax.swing.Timer(int, java.awt.event.ActionListener) 方法来设置一个定时器,当定时器的事件触发后,我们就改变光标显示的图片。
用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)。
《高级语言程序设计(2)》课程设计任务书
《高级语言程序设计(2)》课程设计报告
专业:班级:学号:
姓名: 完成日期:指导教师
一、程序设计说明书
【设计题目】
图片连连看游戏程序
【问题描述】
图片连连看游戏是利用java图形用户界面设计而设计的图片连连看游戏界面。
它的游戏规则就是选择一对内容相同的图案进行连线,但此连线不能穿跨
其他图案。
连线的转折点不能多于两个,如果符合规定则消除此对图案。
如果
游戏找不到可连接消除的图案,可以通过鼠标点击重列按钮让它重新排列图
案,也可以通过鼠标重新开始新的游戏,时间结束后游戏自动结束,还可以通
过鼠标退出游戏。
【软件功能】
1 利用awt实现良好的游戏界面,游戏界面尽可能美观。
2 游戏开始时,能产生随机数字和随机位置以及限制的时间。
3 在按动鼠标和键盘时,游戏能玩起来,即能响应鼠标事件。
4 能消去满足条件的含有相同数字的图片。
5 能重列图片顺序。
6 能选择退出游戏和重新再来一局。
【算法思想】
在检验两个图片能否消掉的时候,要让两个图片同时满足两个条件才行,就是两者配对并且连线成功。
分 3 种情况:这三种情况都需要三个检测,这三个检测分别检测一条直路经。
这样就会有三条路经。
若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了。
(1)、相邻
(2)、若不相邻的先在第一个按钮的同行找一个空按钮。
1.找到后看第二个按钮
横向到这个空按钮所在的列是否有按钮。
2.没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。
3.没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。
没有的话路经就通了可以消了.
(3)、若(2)失败后,再在第一个按钮的同列找一个空按钮。
1.找到后看第二个
按钮竖向到这个空按钮所在的行是否有按钮 2.没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。
3.没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。
没有的话路经就通了,可以消了。
若以上三步都失败,说明这两个按钮不可以消去
两图能相连的所有情况:
(1)(2)
(3)
【类的设计】
图片连连看游戏程序中只有一个类,类名为LianLianKan,该类实现了接口ActionListener;该类总共有十三个方法,他们的功能分别是:init()初始化;createImgBtn()传进两个String类型的参数,返回带有数字和图片的按钮;randomBuild(),产生十五对随机的数字;fraction()计算得分;reload()将游戏按钮重列;estimateEven()传进两个int型和一个JButton型的三个参数(分别是击中的按钮位置坐标和按钮),选中按钮信息的存储与操作;xiao()消去符合游戏规则的相同的两个按钮;linePassOne()在第一按钮同行有空按钮的条件下判断第二转折点出现的情况;rowPassOne()在第一按钮同列有空按钮的条件下判断第二转折点出现的情况;remove()将相同的两个按钮消去;
actionPerformed()实现按钮事件的监听;timerDemo()时间提示;main()主方法;
【用户界面】
【程序技巧】
1. 程序采用图形用户界面,简单大方,且易于操作;
2. 连连看图片采用大家熟悉的图片,能激起玩家的游戏兴趣;
3. 游戏功能较为齐全,可实现退出、重列和下一局的功能,重列功能可对游
戏中剩余的图片进行重新排列,使游戏继续进行,下一局功能可以使游戏重新
开始
4. 游戏具有倒计时功能,能够控制游戏时限,使游戏具有一定难度,倒计时
结束时显示“game over”
5. 游戏可以统计玩家的游戏得分
【模块划分及调用关系】
根据对连连看游戏的分析,该游戏可分化为三个模块:算法模块、界面显示模块、菜单控制模块。
调用关系:
主模块流程图:
用户界面模块流程图:
算法模块流程图:
将25个图片和文件存在同一个文件夹里
javac
java LianLianKan
二、程序上机调试报告
【语法错误及其排除】
将图片加载在按钮上,并在调用按钮时会出现随机的图片时出现错误,最后创建了一个方法JButton createImgBtn(String ing,String txt),作用是传进两个String类型的参数,返回带有数字和图片的按钮,方法中的主要内容有ImageIcon image = new
ImageIcon(getClass().getResource(ing));JButton button = new
JButton(txt,image);通过调用这个方法就可以将图片与按钮固定在一起。
加载计时器时出现错误,即如果只在初始方法init()里调用timerDemo()方法时,在点击重列按钮或者下一局按钮时,时间提示里的时间是两次时间相掺杂的;
改为只在main()方法里调用timerDemo()方法,在点击重列按钮时没有问题,但在点击下一局按钮时,时间还是相掺杂着出现;最后改为在main()方法里调用timerDemo()方法的同时在actionPerformed()方法里将if()==newlyButton) {
int grid[][] = new int[8][7];
= grid;
randomBuild();
(false);
pressInformation=false;
Init();
}
改为:
if()==newlyButton)
{
flag=true;
int grid[][] = new int[8][7];
= grid;
randomBuild();
(false);
pressInformation=false;
init();
timerDemo();
}
【算法错误及其排除】
在编辑randomBuild()方法产生随机的两两相同的数字时,程序中会出现并非两两相同的图片,达不到预期的效果,后改为在randomBuild()方法里添加如下这样的程序:while(grid[cols][rows]!=0){
cols=(int)()*6+1);
rows=(int)()*5+1);
}
程序才正确。
在编辑程序时,定义了一个grid数组,用来存放游戏按钮的位置,刚开始定义的是6行5列,结果玩游戏时,周边的按钮不能被消去,后将数组改为8行7列时才可以,这样按钮周边的一圈就是空按钮,周边的按钮就可以被消去。
三、程序测试结果
【测试数据】
1、程序运行结果:
2、点击重列按钮结果:
3、点击下一局:
4、游戏结束界面:
【输出结果】
【收获及体会】
通过这次图片连连看游戏的设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,
从理论中得出结论,才能真正的提高自己的水平,从而提高自己的实际动手能
力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,并且
还发现了自己的许多不足之处,对以前所学过的知识理解得不够深刻,掌握得
不够牢固。
同时在这次的设计中也小小的体验了一下做项目的感受。
我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。
我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学
习中去。
四、源程序代码
import class LianLianKan implements ActionListener
{
pg", (grid[cols+1][rows+1]));
}
else
{ddActionListener(this);
(diamondsButton[cols][rows]);
}
}
etResource(ing));
JButton button = new JButton(txt,image);
etVisible(false);
}
}
}
}
etVisible(false);
}
}
// JLabel l=new JLabel("Gime Over!",; // JPanel Center,North,Sourth;
// (l);
(false);
(false);
}
else
{
(""+s--);
}
}
}, 1000,1000);
}
//主方法
public static void main(String[] args)
{
LianLianKan llk = new LianLianKan();
(); //获取15个随机的1~25的数字
();
();
}
}
程序中调用的图片:
15,jpg。