
连连看分步实现ppt课件.ppt
31页连连看实现指点简介•连连看游戏是一种很流行的小游戏,本次设计实现一个具备较完好功能的连连看游戏,到达如下设计目的:•初步掌握面向对象技术在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
判别二折型主要是做两个方向的扫描,即横向扫描与纵向扫描:•横向扫描表示图:• 衔接算法的原理及接算法的原理及实现〔〔4〕〕•纵向扫描表示图:界面实现(1)•添加类实例变量声明:• Block first=null; //第一个被点击的图形坐标• Block second=null;//第二个被点击的图形•PaintMap()中对选中的图块进展额外的显示• 界面实现(2)•当点击图片框时,对选中图块进展配对处置• •思索:•如何判别游戏终了或过关?•如何给出提示?更进一步•奖励•计时•图块运动规那么:向下,左右分别…•背景音乐•用户自定义设置•分层连连看/镂空地图。












