




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
连连看实现指导,简介,连连看游戏是一种很流行的小游戏,本次设计实现一个具备较完整功能的连连看游戏,达到如下设计目标: 初步掌握面向对象技术在WinForm应用程序中的使用,掌握简单控件的应用 初步理解事件驱动原理,并将其应用于游戏开发 较好地了解绘图原理,实现图片的加载,连线的绘制等等 综合运用面向对象变成思想,实现界面与逻辑的分离,提高程序的可重用性、可扩展性和可维护性,主要类说明,Block:一个图块 BlockMap:图块的位置分布 Player:当前游戏者 MainForm:用户交户的主要窗口,Block,图片资源的宽度和高度,该块在地图中的坐标,这里图块并没有管理图片信息,而仅仅是一个位置的管理,具体的图片分布信息存储在BlockMap类中,BlockMap,管理所有跟图块集合操作相关的操作: 图块地图的初始化:生成、打乱 图块对的消除 两个图块匹配的寻路 自动寻找图块对(实现提示) 图块的位置变换等,技巧:在所有图片的外层增加一层全部为0的块,在寻路和绘制路径时比较方便,界面设计,图片的管理和显示,在本例中,图片并没有存储到各块中,而是预先加载到一个图片集合中,然后在需要时,根据BlockMap中某(x,y)位置上图片编号来索引并加载,使用资源文件来管理所有资源,1.新增资源项.resx文件,在其中导入所有需要的图片 2.根据需要为资源更改名称,以方便调用,加载资源,Assembly assembly; ResourceManager rm; assembly = Assembly.GetExecutingAssembly(); rmManager = new ResourceManager(“LLK.Images“, assembly); string s=(string)rm.GetObject(“step1“); Image image = (Bitmap)rm.GetObject(“_1_L2”);,从当前程序集中加载特定的资源集合,必须使用完整路径,从资源集合中获取特定资源对象,必须作显式转换,Step1:地图显示和打乱,在程序初始化时,先将要加载的图片在棋盘上按序绘制出来,注意每一种图标我们绘制的时候需要一次性绘制两次,这样,才能保重绘制出来的每种图标的个数都是偶数个。如下图所示:,注意和技巧,棋盘在最外面一层中是不添加图标的,为的是我们连线时候能够使用最外层画线,而不会出现穿过图标画线的情况,如下图:,Step1:地图显示和打乱,窗体加载时初始化资源和pictureBox大小,Assembly assembly; ResourceManager rm;,Step1:地图显示和打乱,窗体加载时初始化资源和pictureBox大小,Step1:地图显示和打乱,加载图片数据并支持刷新,绘图初步,Windows中绘图类似于投影,只有光持续打在屏幕上时才有图像,否则就只能显示“背景” 所以需要不停地“重绘”,也就是在每次窗体刷新时将需要的东西重新“画上去” 常用的重绘策略就是在paint事件中调用绘制代码,Graphics类,封装 GDI+ 绘图面,无法被继承(Sealed)。 提供将对象绘制到显示设备的方法。Graphics 对象与特定的设备上下文关联。 Grahpics提供的方法分类 绘制基本形状 填充基本形状 绘制图像 绘制文本 其他,Graphics对象绘图方法 DrawArc:绘制圆弧 DrawBezier:绘制贝塞尔曲线 DrawBeziers:绘制贝塞尔曲线组 DrawClosedCurve:绘制封闭曲线 DrawCurve:绘制曲线 DrawEllipse:绘制椭圆 DrawIcon:绘制图标 DrawIconUnstretched:无缩放绘制图标 DrawImage:绘制图像 DrawImageUnscaled:无缩放绘制图像 DrawLine:绘制直线 DrawLines:绘制直线组 DrawPath:绘制GraphicsPath对象 DrawPie:绘制圆饼 DrawPolygon:绘制多边形 DrawRectangle:绘制矩形 DrawRectangles:绘制矩形组 DrawString:绘制文本,Graphics对象绘制实心图形方法 FillClosedCurve:绘制实心封闭曲线 FillEllipe:封闭实心椭圆 FillPath:GraphicsPath对象 FillPie:绘制实心圆饼 FillPolygon:绘制实心多边形 FillRectangle:绘制实心矩形 FillRectangles:绘制实心矩形组 FillRegion:绘制实心Region对象,Graphics对象的获得,非Paint事件代码: 控件.CreateGraphics(); Paint事件代码中用e.Graphics;,打乱顺序,调用BlockMap.DeorderMap即可,step2-实现连接的判断和消除,新增以下几个方法: 1.private bool CanLinkDirectly(int x1, int y1, int x2, int y2):判断两个图块能否直线相连 2.public bool LinkMatch(int x1, int y1, int x2, int y2,out List cps):判断两个图块能否相连,如果可以,返回他们相连的折点集合 3.public void Link(int x1,int y1,int x2,int y2,Graphics g, Pen p):对两个能够相连的图块绘制他们之间的连线,并消除图块 3调用2,2调用1,代码应尽可能功能明确,减少冗余,连接算法的原理及实现(1),两个图标能够连接的充分条件是: (1)两个图标是相同的; (2)两个图标之间有一条路相连,其中这条“路上”没有其他的图标“阻碍”; (3)这一条路不能有两个以上的拐角; 满足这三个条件即可认为两个图标是相连通的;,连接算法的原理及实现(2),直线型:这就是横向或者是纵向方向判断即可,这种情况最容易判断,只要两者之间没有其他图标即可,(2)一折型:其实在两个选中图标确定的两个对角顶点画一个矩形,若是其余两个顶点中有能够满足与两个选中图标都能够“直线型”相连的,即可认为此两个选中图标可以相连,实例如下,判断两个红色的图标相连的情况:,连接算法的原理及实现(3),(3)二折型:对于二折型的判断是重点。判断二折型主要是做两个方向的扫描,即横向扫描与纵向扫描: 横向扫描示意图:,连接算法的原理及实现(4),纵向扫描示意图:,界面实现(1),增加类实例变量声明: Block first=null; /第一个被点击的图形坐标 Block seco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 镇江环氧坡道地坪施工方案
- 安徽中考初三数学试卷
- 铜板幕墙施工方案
- 大理石电视墙金属施工方案
- 五指山绿化排水板施工方案
- 嘉定区空调清洗施工方案
- 2025北京西城八年级(上)期末生物(教师版)
- 小区水电维修服务施工方案
- 危化企业安全文化建设方案
- 推动医务人员队伍建设的策略及实施路径
- 贵州区域地质地史概述
- Aptitude态度的重要性
- 《推荐》500kV输电线路应急处置预案6个
- 丽声北极星分级绘本第三级下 The Class Trip 课件
- 放射性元素的衰变
- 第一课想听听我的忠告吗
- 高英Lesson3 Pub Talk and the King27s English
- 防洪堤防工程堤顶高程的计算表
- 古诗词常见题材之思乡怀人诗鉴赏
- 《平方差公式(1)》导学案
- 等保三级基线要求判分标准v10
评论
0/150
提交评论