




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业论文 衡水职业技术学院论文题目:flash制作连连看所属系部: 计算机系 专业班级: 计算机应用专业 姓 名: 刘艳静 指导老师: 佟玉洁 完成时间: 2011 年 5 月 目录一、 绪论3摘要3前言3二、 开发环境及软件1、 Flash软件32、 发展状况4三、 设计思路及制作过程3、 方案论证43.1设计原理43.2方案选择43.3主要问题53.4技术要求5 4、系统设计5 4.1基本思路5 4.1.1游戏画面的思路6 4.1.2获取图片位置的思路6 4.1.3路径判断的思路6 4.1.4其它问题的思路6 4.2主界面的设置6 4.2.1界面的设计6 4.2.2图片的随机成7 4.2.3单机控件的事件触发10 4.2.4得分设置12 4.2.5过关设置14 4.2.6音乐设置15 4.2.7时间控制17 4.2.8其他控件和功能17 4.3图片是否可消除的判断18四、结论 5、结果分析266、总结26参考文献26致谢26绪 论摘 要:游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,老少皆宜。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,是玩家在各个游戏水平都可以寻找到挑战的目标,长度地保持游戏的新鲜感。使用新颖的连击积分规则,使游戏玩家再体会连击后的快感后,同时对自己的游戏速度,更有挑战性和追求极限的欲望。游戏通过定义数组,根据一定的算法实现规定的路径判断。关键字:小游戏 连连看 数据 路径判断前 言现在小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型了!不管你走到哪个游戏网站,连连看游戏总是排在受玩家欢迎排列的前五位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络休闲游戏。游戏产业作为现代电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流的位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸引力。游戏的吸引力主要在于,他在让玩家打发时间的同时,可以让人实现在现实生活中不能实现的理想,得到在现实生活中不能得到的东西。而且游戏产业促进高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。开 发 环 境 及 软 件 1、 Flash软件Flash是一种交互式量多媒体技术,早期网上流行的矢量动画插件,到现在网上已经有成千上万个Flash站点,可以说Flash已经渐渐成为交互式知量的标准,未来的一大主流。2、 发展状况:游戏“连连看“是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。 随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。如果“水晶连连看” 、“果蔬连连看”等,流行的“水晶连连看”以华丽界面吸引了大批的女性玩家。 2008年,随着社交网络的普及和开放平台的兴起,“连连看” 被引入了社交网络。“连连看”于个人空间相结合,被快速的传播,成为一款热门的社交游戏。设 计 思 路 及 制 作 过 程3、 方案论证:3.1设计原理 在设计采用单机模式,当在规定的时间内消完全部的图片则当前关卡通过,若果在规定的时间内没能消完所有的图片则游戏结束,重新开始游戏。游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的图片是否消去的问题,当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张相同的图片用三根以内的直线连在一起,就可以消去;否则,不予处理。游戏过程,如果玩家在一定的时间内消完则提示玩家胜利,并进入下一关。如果在一定的时间内图片没有消完则提示玩家时间到。每关以此类推。考虑本游戏软件是单机小游戏,所以充分考虑到了他的娱乐性,并没有很复杂的功能。3.2方案选择在概念设计阶段,主要有两种方案可供选择:一、 所有图片都是按约定好的种类数和在同一区域的重复次数随机出现,并且每张图片的出现次数为偶数,时间会有限制,每一关的图片数量或时间是不同的,这样就增加了游戏的难度。二、 在同一区域中,图片出现的种类数和重复数是可以由玩家选择的,时间由游戏约定。不过玩家选择的种类数和重复次数必须是偶数才可以顺利完成游戏,否则游戏虽然可以正常运行,但无法完成游戏。在一种方案中,由于出现的图像按种类数和重复数都由软件约定,这样就缺乏玩家自主选择的空间,只是在完系统已经是设定好的游戏,不能改变什么,这样就在无意中降低了玩家在游戏过程中的乐趣,最后致使玩家放弃继续玩下去。我们参考了网络上的连连看游戏,考虑到游戏的娱乐性。所以我们放弃第一种方案的设计思想,参考网络上流行的连连看游戏,设计第二种方案。 3.3主要问题 开始制作游戏时,主要解决问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断;如何判断游戏是否结束以及输赢问题等。 3.4技术要求 本游戏软件可以再大多数计算机上运行,游戏中能正确判断鼠标两次点下的图片是否可以消去、能正确判断游戏是否已经结束。4、 系统设计:针对上面的需求分析,我们把整个软件分成两个模块:1、整体界面的设计和图片的随机生成;2、图片路径判断函数;一下就是系统结构图:4.1基本思路4.1.1游戏画面问题的思路 画面,对于设计者来说,可以算是最简单的地方;但对于玩家,这却是最重要的,一般玩家不会关心你是怎么实现的,他所关心的是画面的美观,漂亮,是不是能让人赏心悦目。 4.1.2获取图片位置的思路 通过数组从图片库随即获取规定个数的图片,随机分布在画布上。图片个数一定是个偶数个。4.1.3 路径判断的思路 连连看所要求的是:1:两个目标是相同的2:两个目标之间连线的折点不超过两个。(连接线由x轴和y轴的平行线组成)那么分析一下连接的情况可以看到,一般分三种情况1:直线相连2:一个折点3:两个折点;可以发现,如果有折点,每个折点必定有且至少有一个坐标(x或者y)是和其中一个目标点是相同的,也就是说,折点必定在两个目标点所在的x方向或y方向的直线上。所以设计思路就是:假设目标点p1,p2,如果有两个折点分别在z1,z2那么,所要进行的是1:如果验证p1,p2直线连线,则连接成立2:搜索以p1,p2的x,y方向四条直线(可能某两条直线会重合)上的有限点,每次取两点作为z1,z2,验证p1到z1/z1到z2/z2到p2是否都能直线相连,是则连接成立。4.1.4其他问题的思路其他功能将在后面的具体各个部分的设计过程当中分别进行介绍。 4.2主界面的设计 由于这个程序的界面并不是很复杂,所以用到的控件也不多,主要核心内容还是后台的代码设计。图片的随机生成主要是用到一个random()函数将随机数赋值给flag 数组中的每个元素,然后根据数组元素值,来显示图片。4.2.1界面的设计1、色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响,决定对于画布采用黑色背景,神秘而大方;右边的控制区采用天蓝色,配合左边纯黑的背景,就像黑夜中的蓝天,纯洁而大方。2、功能上:背景就是窗体,右侧是一个groupbox控件,用来放置控制按钮,下方是一个grogressbar控件,用来显示时间条。4.2.2图片的随机生成实现这个功能要分很多个步骤:1. 程序运行时即载入游戏需要的N张图片,默认情况下图片种类是18,重复数是4(重复数必须是偶数),并且可以选择是否重列。通过一个循环,加载随机的选择N种图片。具体载入图片的代码如下:private void InteBmp(int maxnum) g_g=this.Creatphics();for(int i=0;iMAPWIDTH;i+)for(int j=0;jWAPHEIGHT;j+) gampi,j=0;IniteRandoMap(ref gamp,maxnum);AI=new Kernal(ref gmap);for(int i=0;imaxnum;i+) ResourceManager rm=new ResourceManager(“LLK data”,Assembly,GetExecut ingAssembly() ); imgi=(Image)rm.GetObject(i.ToString( )+”.bmp”); /imgi=(Image)Bitmap.FormFile(“Images”+(i+1). ToString( )+”.bmp”);for(int i=0;i6;i+) /bombimgi=(Image)Bitmap.FromFile(“ImageB”+(i+). ToString( )+”.bmp”);. 2. 当确认游戏开始时,通过画图过程完成图片生成,画图的过程代码如下 private bool CheckWin(ref int,map) Bool Win=true; for(int i=0;iMAPWIDTH;i+) for(int j=0;j0) for(int i=0;imultipic;i+) Int xrandom=r.Next(19); Int yrandom=r,Next(11); If(mapxrandom,yrandom=0) mapxrandom,yrandom=num; else i-; num-; private void FreshMap(ref int,map) random r=new Random(); for (int i=0;iMAPWIDTH;i+) for(int j=0;jMAPHEIGHT;j+) if(gmapi,j!=0) int x=r.Next(19); int y=r.Next(11); int temp=gmapx,y; gmapx,y=gmapi,j gmapi,j =temp; TransportMap(ref gmap);private void TransportMap(ref int,map) for (int i=0;iMAPWIDTH;i+) for(int j=0;jMAPHEIGHT;j+) AI.GiveMapValue(i,j,mapi,j); /在指定位置画指定图private void Draw(Graphics g,Image scrImg,int PicxX,int PicV) g.DrawImage(scrImg,new Point(PicX,PicV);private void Forml_Paint(object sender,PaintEventArg e) g_g.DrawLine(new.Pen(newSolidBrush(Color.DeepSkyBlue),5),0,11*34+5,19*34 ,11*34+5); If(bStart) For(int i=0;iMAPWIDTH;i+) For(int j=0;j209)MessageBox.Show(“游戏区域内最多只有209个孔,您选的数据太多!请重新选!”);textBox1.Text=”18”;textBox2.Text=”4”;return; IniteBmp(picnum); If(bStart) MessageBox.Show(“游戏已在运行!”); return; else bStart=true; this.Invalidate(); music.Play(“Sounds bg-03.mid”); 重新实现代码如下: Private void RefreshMap(ref int, map) if ( int i=0;iMAPWIDTH;i+) for(int jMAPHEIGHT;j+) If(gmapI,j!=0) Draw(g_g,imggmapI,j-1,i*PICWIDTH,j*PICHEIGHT); private void FreshMap(ref int, map) Random r=new Random(); for(int i=0;jMAPWIDTH;i+) for(int j=0;jMAPHEIGHT;j+) if(gmapI,j!=0) int x=r,Nex(19); int y=r,Nex(11); int temp=gmapx,y; gmapx,y=gmapI,j; gmapI,j=temp; TransportMap(ref gmap); Private void button2_Click(object sender,EventArgs e) Refreshplayer.Play(); FreshMap(ref gmap); This.Invalidate(); 4.2.4得分设置 本游戏一改前人风格,采用全新计分方式,使人们在寻找相同图片的同时还注意路径的选择,更增加了游戏的趣味性,具体规则:直连得10分,一个拐点的20,两个拐点得40.用一个Label控件存储得分。实现代码: Switch(corner2.X) Case1; Score+=20;/一个拐点加20; g_g.DrawLine(pen,new Point(p1.X*31+15,p1.Y*34+17),new Point(corner0.X*31+15,corner0,Y*34+17),; g_g.DrawLine(pen,new point(p2.X*31+15,p2.Y*34+17),new Point(corner0.X*31+15,corner0,Y*34+17); Thread.Sleep(100); EraseBlock(g_g,p1,p2); g_g.DrawLine(bkpen,new Point(p1.X*31+15,p1.Y*34+17)new Point(corner0.X*31+15,corner0,Y*34+17); g_g.DrawLine(bkpen,new Point(p1.X*31+15,p2.Y*34+170newPoint(corner0.X*31+15,corner0,Y*34+17); break; case 2; score+=40; Point ps=new Point(p1.X*31+15,p1.Y*34+17),new Point(corner1.X*31+15,corner1,Y*34+17),new Point(corner0.X*31+15,corner0,Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17); g_g.DrawLine(pen,ps); Thread.Sleep(100); EraseBlock(g_g,p1,p2);/foreach(Point mp in ps)/ /MessageBox.Box.Show(“+mp.X.ToString( )+”,”+mp.Y.ToString( )+”)”);/ break;case 0; score+=10;g_g.DrawLine(pen,ps);Point(corner0.X*31+15,corner0,Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17);Thread.Sleep(100); EraseBlock(g_g,p1,p2);g_g.DrawLine(pen,ps);Point(corner0.X*31+15,corner0,Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17);break;default:break; /RefreshMap(ref gmap) Label5.Text=score.ToString( ); 4.2.5过关设置 把界面上全部图片都消去即为通过此关,进入下一关,种类数加1.实现代码: Private bool CheckWin(ref int, map) Bool Win=true;for(int i=0;iWAPWIDTH;i+) for(int j=0;j 100) Pbvalue=100; If(pbvalue=0&strttimer) Starttimer=false; Pbtimer.Stop( ); MessageBox.Show(“Failed!”); Return; else ProgressBarl.Value=pbvalue; 4.2.8其他控件与功能 两个文本框中一个是用来输入加载的图片种类数;另一个是用来输入图片重复数的,也因为画布的大小所限,只有209个格,所以要保证输入的两个数的乘积在209以下。 picnum=Convert.ToInt16(textBox1.Text); multipic= Convert.ToInt16(textBox2.Text); if (picnum*multipic209) MessageBox.Show(“游戏区域内最多只有209个空,您选的数据太多!请重新选择!”); Picnum=Convert.ToInt16(textBox1.text); Multipic= Convert.ToInt16(textBox2.text); If(picnum*multipic209) MessageBox.Show(“游戏区域内最多只有209个空,您选的数据太多!请重新选择!”); TextBox1.Text=”18”;TextBox2.Text=”4”;Return;4.2图片是否可消除的判断 实现的思路前面已经说了,具体实现代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Mesia; using System.Runtime.InteropService; namespace LLK Class Kernal private const int M=19; private const int N=11; private const int BLACK=0; private static int , map=new intM,N; Point arr1=new Point209; int arr1Len, arr2Len; Point arr2=new Point209; static Point corner=new Point2; static int,co=0; public Kernal(ref int, map) For(int i=0;iM;i+)For(int j=0;jn;j+) MapI,j=mapI,j Corner0=new point(0,0); Corner1=new point(0,0); Public Point Getpoints( ) Point p=new Point3; P0=corner0; p1=corner1; p2=new Point(co,o); return p;/数组一/数组一的长度/数组二/数组二的长度/Public bool IsShare(ref Point al,inta1Len,ref Point a2,int a2Len) bool result=false; for(int i=0;ia1Len;i+) for(int j=0;iy2?y1:y2; int smaller=y1y2?y2:y1; int miny=smaller+1; while(mapx,miny)=BLANK) Miny+; If(miny =N) break; If(miny=bigger) Return true; Else Returnfalse; If(y1=y2) Int bigger=x1x2?x1:x2; Int smaller=x1x2?x2:x1; Int minx=smaller+1; While(mapminx,y1=BLANK) Minx+; If(minx=M) Break; if(minx=bigger) return true; else return false; return false;Public int FindEmpty(int x,int y,ref Point arr) Int count=0;Int pos=x-1;While(0=pos &posM & mappos,y=BLACK) Arrcount,X=pos; Arrcount,Y=y Pos-;Count+; Pos=x+1; While(0=pos &posM &mappos,y=BLANK) Arrcount.X=pos; arrcount,Y=y; pos+; count+; Pos=y-1; While(0=pos & pos & mapx,pos=BLANK) arrcount.X=x; arrcount.Y=pos; pos-; count+; pos=y+1; while(0=pos & posN & mapx,pos=BLANK) Arrcount.X=x; Arrcount.Y=pos; Pos+;Count+; Return count; Public bool IndirectLink(int x1,int y1,int x2,int y2) int pos=0; Point ar1=new Point209; Int ar1Len=0; Point ar2=new Point209; Int ar2Len=0; Pos=y1-1; While(0=pos & posN & mapx1,pos=BLANK) arr1Len=FindEmpty(x1,pos,ref arr1); arr2Len=FindEmpty(x2,y2,ref arr1); if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len) ) Co=2; Corner1=new Point(x1,pos); Return true; Pos-; Pos=y1+1; While(0=pos & posN & mapx1,pos=BLANK) Arr1Len=FindEmpty(x1,pos,ref arr1);arr2Len=FindEmpty(x2,y2,ref arr1); if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len) ) Co=2; Corner1=new Point(x1,pos); Return true; Pos+; Pos=x1-1;While(0=pos & posM & mappos,y1=BLANK) Ar1Len=FindEmpty(x1,pos,ref ar1);arr2Len=FindEmpty(x2,y2,ref arr1); if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len) ) Co=2; Corner1=new Point(x1,pos); Return true; Pos-; Pos=x1+1; While(0=pos & posM& mapxy,pos=BLANK) Arr1Len=FindEmpty(,pos y1,ref arr1);arr2Len=FindEmpty(x2,y2,ref arr2); if(IsShare(ref arr1,arr1Len,ref arr2,arr2Len) ) Co-2; Corner1=new Point(pos y1); Return true; Pos+; Return false; Public bool IndirectLink(int x1,int y1,int x2,int y2) If(x1=x2&y1=y2) Return false; If(mapx1,y1=mapx2,y2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电影剧本创作聘用合同模板
- 2025房产不动产抵押合同范本:商业地产项目抵押融资
- 请假条写作课件
- 红酒杯知识培训总结课件
- 2025标准机械设备采购合同书样本
- 语言基础知识培训简报课件
- 2025农业作物种子买卖服务合同
- 2025制片合同范本模板
- 2025出国留学合同
- 在线支付服务接入合作协议
- 2025年中级消控笔试题目及答案
- 2024年中国防锈油行业调查报告
- 办公软件培训课件
- 成人氧气吸入疗法-中华护理学会团体标准
- 2025年职业指导师(中级)考试试卷:职业指导师考试备考策略
- 2025年度辅警招聘考试题(含答案)
- 初三心理健康教育开学第一课
- 初一新生入学教育
- 卫生院健康检查管理制度
- 高二秋季开学第一课班会课件:启航高二把握未来
- 山地绿化工程的安全防范措施
评论
0/150
提交评论