连连看游戏毕业设计.doc_第1页
连连看游戏毕业设计.doc_第2页
连连看游戏毕业设计.doc_第3页
连连看游戏毕业设计.doc_第4页
连连看游戏毕业设计.doc_第5页
免费预览已结束,剩余29页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计文档题 目: 连连看 作 者: 系 别: 信息系 班级: 三队 专 业: 信息网络安全监察(软件方向)指导教师: 前 言现在小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型了!游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,老少皆宜。不管你走到哪个游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络休闲小游戏。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。使用新颖的连击积分规则,使游戏玩家在体会连击的快感后,同时对自己的游戏速度,更有挑战性和追求极速的欲望。游戏产业作为现代电脑电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸引力。游戏的吸引力主要在于,它在让玩家打发时间的同时,可以让人实现在显示生活中不能实现的理想,得到在现实中不能得到的东西。而且游戏产业促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。目 录摘 要1关 键 字1Abstract2Keywords2第1章 项目概述31.1 项目背景31.2 任务概述31.3 项目开发计划41.4 术语表5第2章 分析阶段62.1 用况62.2 概念模型102.3 系统顺序图11第3章 设计阶段163.1 协作图163.2 设计类图173.3 界面设计与界面类18第4章 构造阶段204.1 核心代码204.2 系统测试26第5章 用户手册305.1 系统主要功能305.2 运行环境要求305.3 游戏操作方法30第6章 毕业设计小结31致 谢32参考文献32 Error! No bookmark name given. 摘 要小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友。 本程序将三年来所学的专业知识和其他方面的知识融入到实际应用中。通过此次课题的设计,掌握如何制作一个游戏软件,以及制作游戏软件的整个流程,制作游戏软件的步骤,为以后的就业工作打下基础。关 键 字小游戏;连连看; AbstractThe small game manufactures the goal has met the people leisure needs, when intense work the leisure class small game can bring the greatest degree to the human the relaxation, may also promote between peoples exchange, the communication, may also know more friends through the game. This procedure the specialized knowledge which and other aspect knowledge studies for three years integrates to the practical application. Through does this topics design, how grasp manufactures a game software, as well as the manufacture game softwares entire flow, the manufacture game softwares step, is the later employment work builds the foundation. KeywordsSmall game; Looked again and again;Error! No bookmark name given.Error! No bookmark name given.Error! No bookmark name given.31第1章 项目概述1.1 项目背景现在小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型了!游戏产业作为现代电脑电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸引力。游戏的吸引力主要在于,它在让玩家打发时间的同时,可以让人实现在显示生活中不能实现的理想,得到在现实中不能得到的东西。而且游戏产业促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。相关技术及开发工具介绍本系统采用面向对象的软件开发办法,Microsoft公司的可视化集成开发以 环境 Visual Studio .Net作为开发平台,以C#作为开发语言实现预定的需求功能。 Visual Studio .Net 集成开发环境简介: .Net是Microsoft XML Web services 平台。.Net平台为创建新一代分布式Web应用提供了所有的工具和技术(表示技术、构件技术和数据库技术)。它支持标准的 Internet 协议,包括 HTTP 协议、XML(可扩展标记语言)和SOAP(简单对象访问协议,从而实现了异构系统间应用程序的集成和通信。.Net平台包括5个主要部分:Windows .Net ,.Net 企业级服务器,.Net Web服务构件,.Net Framework ,Visual Studio .Net,Windows .Net ,.Net企业级服务器,.Net Web服务构件,.Net Framework ,Visual Studio .Net,Visual Studio .Net是为建立基于.Net Framework 应用程序而设的一个可视化集成开发环境,它提供了更优秀的多种编译语言的编辑和编译统一的开发平台,他是一个快速开发企业级Web 应用程序以及高性能桌面应用的工具。它为所有的编程语言提供了简单统一的代 码编辑器,包括XML编辑器、HTML编辑器、SQL Server接口、以图形化的方法设计服务器构件的设计器 、监控远程机器的Server Explorer 。可以说 , Visual Studio .Net 集中了建立分布式应用所需的功能。使用此集成开发工具而不是用SDK编辑C#程序有以下主要原因:IDE支持首行缩进,c#程序的关键字等可用不同的颜色直观表示,以便检查。IDE的语法导航功能可实现动态查找、提示编辑工程中的错误。便于开发 Windows 应用程序。可以像Visual Basic 一样直接拖放控件来“绘制”Windows 窗体。结合我要编写的程序播放器可知使用此集成开发环境更方便高效。 1.3.2 C#语言简介: C#是一种现代的、面向对象的语言,它结合了C/C+和 Visual C+的强大功能以及Visual Basic的简单易用性。C#有以下新特性:简单:C#做了些该进,使语言更简单;面向对象:C#支持面向对象的三种编程原则:封装、继承和多态;类型安全:C#去掉了指针,从根本上保证了程序的稳定性和类型安全;版本控制:C#实现了版本技术,避免了“DLL 灾难” ;兼容性:C#允许在遵守.Net Framework CLS 的条件下访问不同的 API, 可以与 Windows 的几种传统服务交互;灵活性:C#允许声明一些不安全的方法和类,从而使用指针、结构和静态数组。总之,C#是一种安全的、稳定的、简单的、优雅的,由C和C+衍生出来的面向对象的编程语言,它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模板,不允许多重继承)。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET 开发的首选语言。1.2 任务概述1.2.1 任务概述1. 实现单机版连连看2. 开始游戏后,随机生成图片位置3. 游戏中可使用道具1.2.2 实现目标l 游戏概况l 方案论证l 界面设计l 图片选取及生成l 算法路径实现l 游戏运行1.3 项目开发计划如Error! Reference source not found. 日期 阶段 2月19到2月24 确定设计方向 2月24到3月5 可行性分析 3月5到3月11 概要设计 3月12到3月17 详细设计 3月19到4月7 编写代码 4月9到4月14 软件测试 4月14到4月18 编写项目文档 1.4 术语表1. 重列:将游戏中的所有对子重新排列一次。2. 延长时间:将游戏中的使用时间延长。3. 种子数:产生图片的数量4. 重复数:每种图片的重复出现数第2章 分析阶段2.1 用况2.1.1 系统用况图如图 21系统用况图 21系统用况2.1.2 开始游戏如表 2.1.2表 2开始游戏用况用况开始游戏参与者操作员目的开始玩游戏类型主要的和基本的概述开始玩游戏交叉引用无典型的事件发生过程参与者动作系统响应1)双击打开游戏2)出现游戏主窗体3)点击“开始游戏”按钮4)游戏开始2.1.3 种类数/重复数设置如表 2.1.3种类数/重复数设置用况表 2.1.3种类数/重复数设置用况用况种类数/重复数设置参与者操作员目的决定生成图标的数量类型主要的和基本的概述决定生成图标的数量交叉引用无典型的事件发生过程参与者动作系统响应1)输入要生成图片数2)点击开始游戏根据新设置生成图片数2.1.4重列游戏如表 2.1.4重列游戏用况表 2.1.4重列游戏用况用况重列游戏参与者操作员目的在游戏形成残局时,重新对图标进行排列类型主要的和基本的概述在游戏形成残局时,重新对图标进行排列交叉引用无典型的事件发生过程参与者动作系统响应1)点击重列2)图标重新排列2.1.5暂停/开始如表 2.1.5暂停/开始用况表 2.1.5暂停/开始用况用况暂停/开始参与者操作员目的游戏进行到一半时,有事需要暂停一会游戏类型主要的和基本的概述游戏进行到一半时,有事需要暂停一会游戏交叉引用无典型的事件发生过程参与者动作系统响应1)修改系统的相关设置,并保存2)修改xml保存记录 2.2 概念模型2.2.1 候选概念游戏、重列、生成图片数、选择音乐文件、延长时间等2.2.2 关联如图 2.2.2关联图 2.2.2关联2.2.3 属性图 2.2.3属性图 2.2.3属性2.2.4 概念模型图图 2.2.4概念模型图2.3 系统顺序图2.3.1 开始游戏顺序图如图 图 2.3.1开始游戏顺序图2.3.2 修改背景音乐顺序图如图 2.3.2修改背景音乐顺序图图 2.3.2修改背景音乐顺序图2.3.3 重列游戏顺序图如图 2.3.3重列游戏顺序图图 2.3.3重列游戏顺序图2.3.4 种类数/重复数顺序图如图 2.3.4种类数/重复数顺序图图 2.3.4种类数/重复数顺序图2.3.5暂停/开始顺序图如图 2.3.5暂停/开始顺序图图 2.3.5暂停/开始顺序图第3章 设计阶段3.1 协作图3.1.1 修改背景音乐协作图1. 如图 3.1.1修改背景音乐的协作图图 3.1.1修改背景音乐的协作图2.解释1. 修改背景音乐信息被发送到一个系统实例,它对应于修改背景音乐这个系统操作消息2. 系统对象发送修改背景音乐消息到背景音乐的实例3.1.2 重列的协作图1.如图 3.1.2重列的协作图图 3.1.2重列的协作图2.解释3. 重列信息被发送到一个系统实例,它对应于重列这个系统操作消息4. 系统对象发送重列消息到图片的实例3.2 设计类图3.2.1 软件类3.2.2 加入方法3.2.3 加入关联3.3 基本设计概念和处理流程3.4 界面设计与界面类3.4.1 主界面如图 3.4.1主界面图 3.4.1主界面3.4.2 游戏失败界面如图 3.4.2游戏失败界面图 3.4.2游戏失败界面 3.4.3 游戏控制区界面如图 3.4.2游戏失败界面图 3.4.3游戏控制区界面3.4.4流程逻辑第4章 构造阶段4.1 核心代码图片的随机生成所用到的方法 说明:通过数组从图片库随即获取规定个数得到图片,随机分布在画布上。图片个数一定是偶数个。 代码如下:namespace LLK public partial class Form1 : Form public Form1() InitializeComponent(); IniteBmp(MAXPICS); Music music = new Music(); SoundPlayer selectplayer = new SoundPlayer(Soundsselect.wav); SoundPlayer eraseplayer = new SoundPlayer(Soundserase.wav); SoundPlayer refreshplayer = new SoundPlayer(Soundsrefresh.wav); SoundPlayer bombplayer = new SoundPlayer(Soundsbomb.wav); int, gmap = new intMAPWIDTH,MAPHEIGHT;/实际的图片矩阵为19*11 Graphics g_g = null;/全局画布 const int PBMAX = 100;/processbar的最大值 static int pbvalue=PBMAX;/proecssbar现在的值 static int reducestep = 1;/第次减少的步数 static long score = 0;/游戏得分 /图片的宽和高 private const int PICWIDTH = 31; private const int PICHEIGHT = 34; private const int MAPWIDTH = 19; private const int MAPHEIGHT = 11; private const int MAXPICS = 39; /本局中图片的数量 private int picnum = 18; private int multipic = 4;/一张图片重复出来的次数,一定为偶数 /加载到内存中的图片 Image img = new Image39; Image bombimg = new Image6; Kernal AI=null; /游戏开始 bool bStart = false; /加载图 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); 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 18 | cury 10) return; if (gmapcurx, cury != 0) selectplayer.Play(); Pen pen = new Pen(new SolidBrush(this.BackColor); g_g.DrawRectangle(pen, new Rectangle(curx * 31, cury * 34, 31, 34); two+; switch (two) case 1: fpoint = new Point(curx, cury); break; case 2: if (AI.IsLink(fpoint.X, fpoint.Y, curx, cury) two = 0; eraseplayer.Play(); 过关设置 把界面上全部图片都消去即为通过此关,进入下一关,种类数加1.代码如下: /获得拐点数目和位置,做画线处理 ProcessCorner(fpoint,new Point(curx,cury); if (CheckWin(ref gmap) starttimer = false; MessageBox.Show(恭喜过关!); bStart = false; picnum+;/种类加1 if (picnum38) picnum = 39; multipic += 2; if (picnum * multipic 209) MessageBox.Show(你太强悍了,请联系孙法宪(电,请为你提高难度!哈哈!); return; button1_Click_1(sender, e); else two = 1; fpoint = new Point(curx, cury); break; default: break; 得分设置 说明: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 是否都能直线相连 ,是则连接成立。代码如下: /此方法用做处理画线和消去,写的比较烂 private void ProcessCorner(Point p1,Point p2) Point corner = new Point3; corner = AI.GetPoints(); Pen pen = new Pen(new SolidBrush(Color.Red), 5);/线画笔 Pen bkpen = new Pen(new SolidBrush(this.BackColor), 5);/擦去画笔 pbvalue += 4; / MoveUp(p1.X, p1.Y); /MoveUp(p2.X, p2.Y); 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(); private void EraseBlock(Graphics g, Point p1, Point p2) g.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(p1.X * 31, p1.Y * 34, 31, 34); g.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(p2.X * 31, p2.Y * 34, 31, 34); gmapp1.X, p1.Y = 0; gmapp2.X, p2.Y = 0; AI.GiveMapValue(p1.X, p1.Y, 0); AI.GiveMapValue(p2.X, p2.Y, 0); bool starttimer =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论