游戏中常见的方格属性和构建实例分析,值得收藏!

游戏中常见的方格属性和构建实例分析,值得收藏!

继承按钮类:square

属性1、是否有矿 bool HasMine

属性2、获取周围地雷数量 int AroudMineCount

属性3、获取当前网格状态枚举State

方法一、打开网格Open

方法2:标记正方形

方法三、去掉标记Reset

//还没有实现它

B.雷区类:自定义控件

活动1、游戏成功

事件2,游戏失败

方法一、初始化雷区:每边有多少个雷

方法二、显示雷区DisPlayAll的所有内容

方法三、显示DisPlayArround周围没有地雷的区域

]]

方法一、初始化雷区:

//如何抽象逻辑

//大概步骤:

//实现这些步骤需要多少行代码? 复杂吗?

//某个函数可以在其他实现中共享

//第一步,用方块填充雷区(根据指定数量构造一个方块实例)

//第2步材质材料,排列方块(布局)

//3步,随机我的

//第四步,显示每个方格周围的地雷数量AroudMineCount

]]]]

//1步,

//根据指定的数量构造一个网格实例:

//多少? 每边有多少个正方形?

//构造一个网格实例

//将方块添加到当前Controls中: this.Controls.Add(pane);

//现在Pane叠加了,现在是第二步,需要布局网格

//第2步,布局网格

//正方形需要2个嵌套循环

//不是特别复杂,不用拿出来

//但是当窗体大小改变时,位置发生改变,即布局重新布局

//方法可以重用:初始化和改变表单大小时

//新方法:LayoutPans - 布局网格

//实现LayontPans

//设置网格的大小和位置:1次循环

//2个嵌套循环

//逐行扫描

//获取有多少列 panLineNum:当前Controls中所有控件数量的平方根

//循环遍历每一列

//将每一行嵌套循环

//在循环最里面做两件事:设置网格的大小和位置

//设置正方形的大小:宽度和高度(外侧)

//Width:当前Controls/panLineNum的宽度

//Height:当前Controls的高度/panLineNum

//放置当前方块:Pane pane = this.Controls[paneIndex] as pane

//返回窗格类型

//paneIndex处理的是哪一点? 默认为0音乐音效,每次处理完会自动+1。

//设置正方形的大小:pane.size=new size(width, height)

//横坐标和纵坐标:x,y

//top: 当前行 * 宽度

//左:当前列*高度

//设置网格的位置:pane.Location=new Point(横坐标,纵坐标)

//现在可以安排了

//设置锚点

//当前窗体大小需要改变时的重新布局

//查找当前雷区的事件

//SizeChanged事件调用布局LayoutPane()

//表单在初始初始化时也会改变大小。

//需要验证this.Controls.count为0时不需要布局

//继续3步,随机挖矿

//方法或算法可能会改变,需要重新抽象

//方法mine:LayMines指定地雷数量

//循环放置地雷

//放置地雷

//窗格pane =(Pane)this.Controls[index]

//pane.Haspane=true;

//索引是随机的

//随机地雷看不到

]]

实现方法2,显示雷区DisPlayAll的所有内容

//通过点击按钮实现

//实现方式是打开所有的方块

//pane.Open //遍历

//判断之前是否已经打开过

//Open未实现,三种方法实现Pane

//Pane是继承button的方法,设置图像拉伸

//需要使用图片作为资源

//方法一:双击--选择资源--添加资源--鼠标拖动

//属性.资源。

//先实现Mark方法

//只需将背景设置为Marked

//设置Pane的状态

//重置方法正好相反,取消

//恢复状态

//再次设置Open方法

//分为状态

//1,什么都没有

//2、地雷

//3、显示数字

//首先判断是否有地雷

//不看ArroundMineCount的数量

//切换...大小写

//完成后就不能再点击 this.enable = NONE;

//完成3个方法

//周围区域1、2、3、4不显示

]]]]

//AroudMineCount未实现,将在初始化时实现

//AroudMineCount为第四步初始化

//每个方格周围的地雷数量

//遍历所有窗格

//需要一个方法,GetAroudMineCount(pane)

//获取当前方格周围的地雷数量

]]]]]]

//实现方法GetAroudMineCount(pane)返回int

//你还需要一个方法来获取当前方块周围的方块列表。

//列表

GetAronndPanes(窗格)

//列表

结果 = 新列表

();

//当前窗格的宽度和高度

每个窗格的变量:foreach(Pane p in this.Controls)

//先求左右两边:高度相同且位置差为1 绝对值Math.Abs

//再次找到顶部和底部:

//再次找到对角:

列表.add(p)

返回结果

//实现GetAroudMineCount(pane)方法

//调用方法

列表

窗格 = this.GetAronndPanes(Pane)

//检查是否有地雷

//返回地雷数量

]]

实现 DisPlayAround 方法

//首先检查当前方格是否开放或者有地雷

//首先自己打开.open

//找到周围的Panes并调用this.GetAronndPanes方法

//遍历周围的窗格扫雷游戏制作扫雷游戏制作,查看周围的地雷数量

//如果为0,则递归复用DisPlayAround方法

//有地雷吗?

//查看是否处于Open状态以及是否有地雷

//打开

//动态事件绑定

//鼠标按下和点击事件

//pane.MouseDown += 自动出来

//括号内定义方法pane_MouseDown

//执行DisPlayArround方法,但是没有实现。

]]

//实现pane_MouseDown方法

//去除非鼠标左键点击和鼠标右键点击事件

//获取当前方块

//左键点击时:1,有地雷,2,没有地雷

//右键时:有标记、无标记

//判断是否扫雷成功

//添加方法IsAllMineSweeped

//执行:

//1、地雷数量和标记数量是否相等

//标记的是否是地雷

//继续执行判断是否扫雷成功

//扫码成功

文章来源:https://blog.csdn.net/weixin_34221036/article/details/94123767