




免费预览已结束,剩余27页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1、游戏规则32、发展概况33、方案论证43.1设计原理43.2方案选择43.3主要问题43.4技术要求54、系统设计54.1 基本思路64.1.1 游戏画面的思路6 4.1.2 获取图片位置的思路64.1.3 路径判断的思路6 4.1.4其他问题的思路74.2 主界面的设置74.2.1 界面的设计74.2.2 图片的随机成84.2.3 单击控件的事件触发11 4.2.4 得分设置144.2.5 过关设置164.2.6 音乐设置174.2.7 时间控制194.2.8 其他控件和功能204.3 图片是否可消除的判断20 5、结果分析29 6、总结30 参考文献31 致谢31摘要游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,老少皆宜。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。使用新颖的连击积分规则,使游戏玩家在体会连击的快感后,同时对自己的游戏速度,更有挑战性和追求极速的欲望。游戏通过定义数组,根据一定的算法实现规定的路径判断。关键字: 小游戏 连连看 数组 路径判断前言 现在小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型了! 不管你走到哪个游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络休闲小游戏。游戏产业作为现代电脑电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸引力。游戏的吸引力主要在于,它在让玩家打发时间的同时,可以让人实现在显示生活中不能实现的理想,得到在现实中不能得到的东西。而且游戏产业促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”。正文1、 游戏规则:(1) 概要:玩家可以将 2 个相同图案的牌连接起来,连接线不多于 3 根直线,就可以成功将两个牌消除; (2) 操作:第一次使用鼠标点击游戏界面中的牌,该牌此时为被选中,以特殊方式显示;再次以鼠标点击其他牌,若该牌与被选中的牌图案相同,且把第一个牌到第二个牌连起来,中间的直线不超过 3 根,则消掉这一对牌,否则第一个牌恢复成未被选中状态,而第二个牌变成被选中状态。(3) 胜利条件:将游戏界面上的牌全部消除掉。(4) 失败条件:到规定时间,界面上的牌仍未全部消掉。2、发展概况: 游戏“连连看”顾名思义就是找出相关联的东西,这个连连看在网上基本是用在小游戏中,就是找出相同的两样东西,在一定的规则之内可以做为相关联处理。“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。 游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。这其中,顾方编写的“阿达连连看”以其精良的制作广受好评,这也成为顾方“阿达系列软件”的核心产品。并于2004年,取得了国家版权局的计算机软件著作权登记证书。随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。如“水晶连连看”、“果蔬连连看”等,流行的“水晶连连看”以华丽界面吸引了一大批的女性玩家。2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。 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数组中的每个元素,然后根据数组元素值,来显示图片。(这个在3.1.2的思路中有详细的介绍) 4.2.1 界面的设计 程序主体界面1、色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响,决定对于画布采用黑色背景,神秘而大方;右边的控制区采用天蓝色,配合左边纯黑的背景,就像黑夜中的蓝天,纯洁而大气。2、功能上:背景就是窗体,右侧是一个groupbox控件,用来放置控制按钮,下方是一个progressbar控件,用来显示时间条。4.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(); 4.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();4.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; 4.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; 4.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; private const int BLANK = 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, mmap) for (int i = 0; i M; i+) for (int j = 0; j N; j+) mapi, j = mmapi, 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, 0); return p; / / 判断是否为同一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 葬礼进行曲课件
- 2025配送员合同协议范本
- 小班养鱼美篇题目及答案
- 常用工具考试试题及答案b卷
- 叉车培训考试试题答案及答案
- 2024译林版八年级英语上册Unit6 Seasons 动词和基本句型(一)含答案
- 仓库后勤管理考试题库及答案
- 2025年西式面点师职业岗位技术资格知识考试题与答案
- 营销课件APP教学课件
- 2025年五升六年级语文暑假专项提升:汉字(知识点归纳+试题)含答案
- 机场管制课件
- 贴牌生产委托授权书
- 做一个卓越而幸福的教育者课件
- 人教版小学数学五年级上册完美版全册PPT教学课件
- 《无人机组装与调试》-教学教案
- 跨境电商物流与供应链管理PPT全套完整教学课件
- C语言试讲稿课件
- 收音机组装指导书
- 义务教育科学课程标准(2022年版)测试题及答案含课标解读
- 水运工程统一用表之一《浙江省港口工程统一用表》
- GB/T 13306-2011标牌
评论
0/150
提交评论