




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010届毕业设计(论文)题目 小游戏-连连看 学生姓名 李海涛 学 号 0703030006 指导教师 应序康 专 业 软件技术 班 级 07统招九班 系 别 计算机系 陕西电子信息职业技术学院 二一 年 四 月 十五 日陕西电子信息职业技术学院毕业设计(论文)诚信承诺书本人慎重承诺和声明:所撰写的 小游戏-连连看 是在指导老师的指导下自主完成,文中所有引文或引用数据、图表均已注解说明来源,本人愿意为由此引起的后果承担责任。本毕业设计(论文)的研究成果归学校所有。 学生(签名):李海涛 2010年4月15号 陕西电子信息职业技术学院 毕业设计(论文)任务书 一、设计(论文)任务及要求: 学生姓名 李海涛 指导教师签名 2010年4月15号二、指导教师评语: 指导教师签名 年 月 日三、答辩组评审意见: 答辩组长签名 年 月 日四、成绩: 毕业设计指导组组长签名 年 月 日陕西电子信息职业技术学院毕业设计(论文)摘要游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,老少皆宜。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。使用新颖的连击积分规则,使游戏玩家在体会连击的快感后,同时对自己的游戏速度,更有挑战性和追求极速的欲望。游戏通过定义数组,根据一定的算法实现规定的路径判断。关键字: 小游戏 连连看 数组 路径判断陕西电子信息职业技术学院 目录第一章 引言1第二章 游戏规则2第三章 发展概况3第四章 方案论证44.1设计原理44.2方案选择44.3主要问题44.4技术要求5第五章 系统设计65.1基本思路65.1.1 游戏画面的思路6 5.1.2 获取图片位置的思路75.1.3路径判断的思路7 5.1.4其他问题的思路75.2 主界面的设计75.2.1 界面的设计75.2.2 图片的随机成85.2.3 单击控件的事件触发11 5.2.4 得分设置145.2.5 过关设置165.2.6 音乐设置165.2.7 时间控制185.2.8 其他控件和功能195.3 图片是否可消除的判断20 第六章 结果分析28 第七章 总结29 参考文献30 第30页 共30页第一章 引言现在小游戏、网页游戏等游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型了! 不管你走到哪个游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络休闲小游戏。游戏产业作为现代电脑电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸引力。游戏的吸引力主要在于,它在让玩家打发时间的同时,可以让人实现在显示生活中不能实现的理想,得到在现实中不能得到的东西。而且游戏产业促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。第二章 游戏规则(1) 概要:玩家可以将 2 个相同图案的牌连接起来,连接线不多于 3 根直线,就可以成功将两个牌消除; (2) 操作:第一次使用鼠标点击游戏界面中的牌,该牌此时为被选中,以特殊方式显示;再次以鼠标点击其他牌,若该牌与被选中的牌图案相同,且把第一个牌到第二个牌连起来,中间的直线不超过 3 根,则消掉这一对牌,否则第一个牌恢复成未被选中状态,而第二个牌变成被选中状态。(3) 胜利条件:将游戏界面上的牌全部消除掉。(4) 失败条件:到规定时间,界面上的牌仍未全部消掉。第三章 发张概况游戏“连连看”顾名思义就是找出相关联的东西,这个连连看在网上基本是用在小游戏中,就是找出相同的两样东西,在一定的规则之内可以做为相关联处理。“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。 游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。这其中,顾方编写的“阿达连连看”以其精良的制作广受好评,这也成为顾方“阿达系列软件”的核心产品。并于2004年,取得了国家版权局的计算机软件著作权登记证书。随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。如“水晶连连看”、“果蔬连连看”等,流行的“水晶连连看”以华丽界面吸引了一大批的女性玩家。2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。 第四章 方案论证4.1设计原理 本设计采用单机模式,当在规定的时间内消完全部的图片则当前关卡通过,如果在规定的时间内没能消完所有的图片则游戏结束,重新开始新游戏。游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张想同图片用三根以内的直线能连在一起,就可以消去;否则,不予处理。 游戏过程,如果玩家在一定的时间内消完则提示玩家胜利,并进入下一关。如果在一定时间内图片没有消完则提示玩家时间到。每关以此类推。考虑到本游戏软件是单机小游戏,所以充分考虑到了它的娱乐性,并没有很复杂的功能。4.2 方案选择 在概要设计阶段,主要有两中方案可供选择: 一、所有的图片都是按约定好的种类数和在同一区域的重复次数随机出现,并且每张图片的的出现次数为偶数 ,时间会有限制,每一关的图片数量或时间是不同的,这样就增加了游戏的难度。二、在同一区域中,图片出现的种类数和重复次数是可以由玩家选择的,时间由游戏约定。不过玩家选择的种类数和重复次数必须是偶数才可以顺利完成游戏,否则游戏虽然可以正常运行,但无法完成游戏。 在第一种方案中,由于出现的图像按种类数和重复次数都由软件约定,这样就缺乏玩家自主选择的空间,只是在玩系统已经是设定好的游戏,不能改变什么,这样就在无意中降低了玩家在游戏的过程中乐趣,最后致使玩家放弃继续玩下去。我们参考了网络上的连连看游戏,考虑到游戏的娱乐性。所以我们放弃第一种方案的设计思想,参考网络上流行的连连看的游戏,设计出第二种方案。 4.3主要问题 开始制作游戏时,主要要解决的问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断;如何判断游戏是否结束以及输赢问题等。 4.4 技术要求 本游戏软件可以再大多数计算机上运行,游戏中能正确判断鼠标两次点下的图片是否可以消去、能正确判断游戏是否已经结束。 第五章 系统设计针对上面的需求分析,我们把整个软件分成两个模块:1、整体界面的设计和图片的随机生成;2、图片路径判断函数; 以下就是系统结构图:连连看 图片路径判断函数界面设计和图片的随机生成模块模块 连连看系统结构图 游戏运行界面5.1 基本思路 5.1.1游戏画面问题的思路 画面,对于设计者来说,可以算是最简单的地方;但对于玩家,这却是最重要的,一般玩家不会关心你是怎么实现的,他所关心的是画面的美观,漂亮,是不是能让人赏心悦目。 5.1.2 获取图片位置的思路 通过数组从图片库随即获取规定个数得到图片,随机分布在画布上。图片个数一定是偶数个。 5.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 是否都能直线相连 ,是则连接成立。5.1.4其他问题的思路其他功能将在后面的具体各个部分的设计过程当中分别进行介绍。5.2 主界面的设计 由于这个程序的界面并不是很复杂,所以用到的控件也不多,主要核心内容还是后台的代码设计。图片的随机生成主要是用到一个random()函数将随机数赋值给flag数组中的每个元素,然后根据数组元素值,来显示图片。(这个在3.1.2的思路中有详细的介绍) 5.2.1 界面的设计 程序主体界面1、色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响,决定对于画布采用黑色背景,神秘而大方;右边的控制区采用天蓝色,配合左边纯黑的背景,就像黑夜中的蓝天,纯洁而大气。2、功能上:背景就是窗体,右侧是一个groupbox控件,用来放置控制按钮,下方是一个progressbar控件,用来显示时间条。5.2.2 图片的随机生成 实现这个功能要分很多个步骤: 1. 程序运行时即载入游戏需要的N张图片,默认情况下图片种类数是18,重复数是4(重复数必须是偶数),并且可以选择是否重列。通过一个循环,加载随即的选择N种图片。具体载入图片的代码如下: /加载图 private void IniteBmp(int maxnum) g_g = this.CreateGraphics(); for (int i = 0; i MAPWIDTH; i+) for (int j = 0; j MAPHEIGHT; j+) gmapi, j = 0; IniteRandomMap(ref gmap, maxnum); AI = new Kernal(ref gmap); for (int i = 0; i maxnum; i+) ResourceManager rm = new ResourceManager(LLK.data, Assembly.GetExecutingAssembly(); imgi= (Image)rm.GetObject(i.ToString()+.bmp); /imgi = (Image)Bitmap.FromFile(Images+(i+1).ToString()+.bmp); for (int i = 0; i 6; i+) /bombimgi = (Image)Bitmap.FromFile(ImagesB+(i+1).ToString()+.bmp); 2. 当确认游戏开始时,通过画图过程完成图片生成,画图的过程代码如下 private bool CheckWin(ref int, map) bool Win = true; for (int i = 0; i MAPWIDTH; i+) for (int j = 0; j 0) for (int i = 0; i multipic; 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; j MAPHEIGHT; 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; j MAPHEIGHT; j+) AI.GiveMapValue(i, j, mapi, j); /在指定位置画指定图 private void Draw(Graphics g, Image scrImg, int PicX,int PicY) g.DrawImage(scrImg, new Point(PicX, PicY); private void Form1_Paint(object sender, PaintEventArgs e) g_g.DrawLine(new Pen(new SolidBrush(Color.DeepSkyBlue), 5), 0, 11 * 34 + 5, 19 * 34, 11 * 34 + 5); if (bStart) for (int i = 0; i MAPWIDTH; i+) for (int j = 0; j 209) MessageBox.Show(游戏区域内最多只有209个空,您选的数据太多!请重新选 !); textBox1.Text = 18; textBox2.Text = 4; return; IniteBmp(picnum); if (bStart) MessageBox.Show(游戏已在运行!); return; else bStart = true; this.Invalidate(); music.Play(Soundsbg-03.mid); 重列实现代码如下:private void RefreshMap(ref int, map) if (bStart) for (int i = 0; i MAPWIDTH; i+) for (int j = 0; j MAPHEIGHT; 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;iMAPWIDTH;i+) for (int j = 0; j MAPHEIGHT; 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 button2_Click(object sender, EventArgs e) refreshplayer.Play(); FreshMap(ref gmap); this.Invalidate(); 5.2.4得分设置本游戏一改前人风格,采用全新计分方式,对于不同的路径会得到不同的分数,使人们在寻找相同图片的同时还要注意路径的选择,更增加了游戏的趣味性,具体规则:直连得10分,一个拐点得20,两个拐点得40。用一个Label控件存储得分。实现代码:switch (corner2.X) case 1: 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(p2.X * 31 + 15, p2.Y * 34 + 17), new Point(corner0.X * 31 + 15, corner0.Y * 34 + 17); break; case 2: score += 40;/两个拐点加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),new Point(p2.X*31+15,p2.Y*34+17); g_g.DrawLines(pen, ps); Thread.Sleep(100); EraseBlock(g_g, p1, p2); g_g.DrawLines(bkpen,ps); /foreach (Point mp in ps) / /MessageBox.Show(+mp.X.ToString()+,+mp.Y.ToString()+); / break; case 0: score += 10;/直连加10 g_g.DrawLine(pen, new Point(p1.X * 31 + 15, p1.Y * 34 + 17), new Point(p2.X * 31 + 15, p2.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(p2.X * 31 + 15, p2.Y * 34 + 17); break; default: break; /RefreshMap(ref gmap); label5.Text = score.ToString();5.2.5 过关设置把界面上全部图片都消去即为通过此关,进入下一关,种类数加1.实现代码:private bool CheckWin(ref int, map) bool Win = true; for (int i = 0; i MAPWIDTH; i+) for (int j = 0; j 100) pbvalue = 100; if (pbvalue = 0&starttimer) starttimer = false; pbtimer.Stop(); MessageBox.Show(Failed!); return; else progressBar1.Value = pbvalue; 5.2.8其它控件与功能 两个文本框中一个是用来输入加载的图片种类数;另一个是用来输入图片重复数的,因为画布的大小所限,只有209个格,所以要保证输入的两个数的乘积在209以下。picnum = Convert.ToInt16(textBox1.Text); multipic = Convert.ToInt16(textBox2.Text); if (picnum * multipic 209) MessageBox.Show(游戏区域内最多只有209个空,您选的数据太多!请重新选 !); textBox1.Text = 18; textBox2.Text = 4; return; 5.3 图片是否可消除的判断 实现的思路前面已经说了,具体实现代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Media;using System.Runtime.InteropServices;namespace LLK class Kernal private const int M = 19; private const int N = 11; pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邮储银行2025白银市秋招笔试英语题专练及答案
- 建设银行2025咸宁市秋招面试典型题目及参考答案
- 中国银行2025广州市秋招笔试性格测试题专练及答案
- 2025年3D打印技术的材料创新研究
- 交通银行2025淮安市信息科技岗笔试题及答案
- 2025私有云市场分析
- 农业银行2025河源市小语种岗笔试题及答案
- 交通银行2025内江市秋招笔试EPI能力测试题专练及答案
- 建设银行2025结构化面试15问及话术山西地区
- 农业银行2025三明市信息科技岗笔试题及答案
- 部编版六年级道德与法治上册第2课《宪法是根本法》精品课件【带视频】
- 南亚环氧树脂
- 常见体表肿物
- 化疗所致恶心呕吐护理
- 信息检索技术讲义
- 商业银行基于华为OceanStor的关键业务同城切换方案
- 火力发电厂运煤设计规程
- 第十章DNA、RNA的生物合成ppt课件
- 3250变压器综合测试仪(共85页)
- 中国联通VI手册完整版
- 贾谊《鵩鸟赋》课件,《鵩鸟赋》讲解
评论
0/150
提交评论