C#面向对象基于winform的扫雷游戏和简单的算法改进

时间过得很快啊,研三的都毕业离校了,实验室有一个硬件演示系统的上位机部分需要我继承下来,由于是用C#编写的,所以最近看了一下这方面的内容。光看不练效果自然不好,在六维上找来一个C#开发扫雷游戏的视频,边看编写,虽然视频有些部分没有讲到,但还是学到不少东西,也通过自己的理解对视频给出的部分算法还有界面做了改变。文章最后会附上源码,正文里会对改进的部分做一下分析。



1、面向对象设计与分析

一个扫雷游戏界面,以一个主窗体(Form)呈现在玩家面前,窗体中包含几个控制按钮、难度设置下拉菜单、计时器,最核心的部分还是扫雷的区域,这部分我们可以把它抽象成两个对象,每个对象对应一个类,一个是雷区(minefiled),另一个是布满雷区的方格(pane),这样就形成三个级别的对象:pane、minefield、Form,每一级对象都有自己的方法,并且相邻级别的对象通过调用这些方法来完成不同类之间的通信。

1.1 基本单元方格pane

pane继承自button,当点击某个pane时,该pane会调用Mark(),Open(),或者Reset()来改变自身的状态,如果该pane有雷(HasMine==true),则游戏结束,否则显示数字AroundMineCount。



1.2 雷区minefield

雷区继承自用户控件。

初始化雷区包括四个步骤:1、产生指定数目的pane,并添加鼠标点击事件;2、由于步骤1中生成的pane是重叠在一起的,需要对他们在雷区中重新布局;3、随机埋雷;4、计算每个pane周围有雷方格的数量。

DisPlayall()方法是在游戏结束,或者玩家需要帮助的时候调用的,它将打开所有方格(有雷显示雷,无雷显示数字AroundMineCount)。

DisplayAround()方法是在玩家点击某个方格pane后,为了降低游戏难度,会显示该方格周围方格的情况,

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值