如何用C#开发一个扫雷小游戏?

十分自豪的说,计算机编程就是变魔术,每一个coder都是一个魔术师。

初学C#的时候,我相信很多人都和我一样,学会了基本语法,掌握了基本的数据结构,也见过了不少微软提供的各种功能的官方函数。所有用来变魔术的道具、材料都有了,可为什么还是觉得少了点什么?

当你已经掌握了大多数编程知识,却还是觉得无法独立开发出一个实用程序的时候,你仅仅缺少一次试炼!你需要的只是扔掉书本,寻找一个能够激起你浓厚兴趣的切入点,然后排除万难的实现一个相关的程序,并且尽量少的借助“外力”。如果你喜欢玩游戏,那么自己动手写一个小游戏吧,想想都酷炫!

今天整理硬盘文件的时候,不经意的发现了一个不起眼的文件夹:“扫雷1.0”。这是个元老级的程序,在大二前的那个假期,游戏和学习一直是我难以平衡的两件事,庆幸的是我找到了突破口。借着我对于游戏的酷爱和执着,用了整整一个假期的时间写下了这个如今看来几天就能搞定的小程序“扫雷1.0”。这个程序对我的意义便是从学过编程到能够编程的变化。

上面这段话写给初入团队学习编程的学弟,也写给急于在找工作前提升实力的自己。其实是想说,在面对一个还没有掌握的新技能时,要利用兴趣寻找突破口进行实战,总是想着它有多难永远没有和它较量一下来的有效。

再次看到这个程序,确实有点小激动,于是花了些时间整理了下当初的代码和思路。下面回到正题,本文介绍如何用C#开发一个扫雷小游戏。如果你需要代码,可以到我的Github账户上下载:https://github.com/monkeyDemon/MineSweeping

需求分析

在写一个程序前,首先要对你要实现的需求有着清晰的认识,理清各个需求间的逻辑。

对于一个已经存在的扫雷游戏,我们不妨观察一下一个真实的扫雷游戏是怎样玩的。观察下面的两个游戏截图。

由上面两幅截图可以分析出:

我们需要定义两个最核心的模块:小方格Pane和放置所有小方格的整个雷区MineField。小方格要整齐的排列在雷区中,一部分小方格中被随机的放置了地雷。

小方格的实现需求:

首先,小方格有三种状态:

关闭状态(初始状态)

标记状态(用户右键标识有雷)

打开状态(用户左键点击后的方格,无雷的情况下需要显示周围雷的个数)

于是定义枚举类型PaneState对应标识小方格状态。

小方格Pane,主要需要以下三个属性:

周围雷的个数

本方格是否有雷

本方格的状态PaneState

对于我们的简单程序,小方格可以通过继承Button来实现。

小方格主要需要以下三个方法:

标记有雷

打开此方格

还原标记(已经被标记有雷的方格被再次右键点击)

按此框架可以实现小方格Pane类:

雷区的实现需求:

小方格全部部署于雷区,是雷区的子组件,所有需要多个方格联动的方法都要在这里实现。

首先是初始化方法Init:

通过整齐排列方格LayoutPane和随机布雷LayMines来实现。

然后是获取周围雷数的方法GetAroundMineCount:

玩家点击了没有雷的小方格后需要显示该方格周围的雷数。

再然后是打开周围区域方法DisplayAround:

当玩家点击的小方格周围一大片区域都没有雷时,应当帮他全部展开。这个方法的实现算是唯一有点难点的地方了,需要用到递归。

最后要实现一个展示整个雷区的方法DisplayALL:

当玩家失败时,向其展示整个雷区分布。

主要方法已经描述,按此框架可以实现雷区MineField类:

程序展示

过多的细节就不做介绍了,一起来看下完成后的效果吧!

  
  
  

如何开发一个扫雷小游戏?相关推荐

  1. 一个扫雷小游戏带你初识VUE3和typescript

    一个扫雷小游戏带你初识VUE3和typescript 阅读本文你会了解到: vue3的部分新特性 typescript的基本使用 部分es6语法 基础部分 为什么要使用ref和reactive来声明变 ...

  2. 开发一个Canvas小游戏 实现一个游戏“引擎”

    前言 这个游戏其实在三四年前就写了,中间还重构过好几次,之前都是用简单的面向对象和函数式编程来写,游戏中的元素关系到还是分的挺开,但是游戏的渲染,运算等逻辑分的不够清晰,整个逻辑基本都是自顶向下的流水 ...

  3. ChatGPT实现用C语言写一个扫雷小游戏

    前几天我们利用 ChatGPT实现用C语言写一个学生成绩管理系统 其过程用时不到30秒,速度惊人 今天又让ChatGPT用C语言写了一个扫雷小游戏,它的回答是:抱歉,我是AI语言模型,无法编写程序. ...

  4. 使用C语言写一个扫雷小游戏

    前言 相信扫雷游戏小伙伴们肯定都玩过吧,学习了C语言中的数组.函数等基础内容之后就可以自己写一个简易的扫雷小游戏了,今天就我写扫雷小游戏的过程及思路写一篇博客,希望大家看完我的博客能有所收获. 软件及 ...

  5. C++ · 手把手教你写一个扫雷小游戏

    Hello,大家好,我是余同学.这两个月真是太忙了,无暇给大家更新文章- 暑假不是写了个扫雷小游戏吗(Link)?考虑到很多同学对代码没有透彻的理解,那么,这篇文章,我们来详细分析一下代码. 我们分为 ...

  6. Python开发一个滑雪小游戏

    擅长领域:Python开发一个小游戏 今日重点:一步步分析and越过亚马逊的反爬虫机制 一.如何搭建开发环境环境 一起来学pygame吧 游戏开发30例(开篇词)--环境搭建+游戏效果展示 windo ...

  7. 教你快速开发一个微信小游戏好友排行榜

    概述 ​ 要做这个好友排行榜.必然要有好友的战绩比分,然后再做排序,最后将数据呈现在UI上 , 可以分为下面几个步骤: 保存每个用户的分数 获取好友列表,并获取好友的分数 渲染排行榜 保存每个用户的分 ...

  8. java开发一个连连看小游戏

    导读:连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,直至完全消除所有图案.这款游戏操作简单(只需单击鼠标左键操作).面向人群广泛,在限时操作的游戏要求下,吸 ...

  9. 【tkinter】用不到50行Python代码,写一个扫雷小游戏

    文章目录 定制按钮 生成雷区 主流程 Tkinter系列: GUI初步

最新文章

  1. 关于Unity -Vuforia -Android 开发 ,平台的搭建(极品菜鸟完整版)
  2. 保护DNS对数字网络安全越来越重要—Vecloud
  3. 【项目管理】项目干系人
  4. codeforces 796A Buying A House
  5. 安装两个mysql3308_在同一台机器上安装两个版本的MySQL
  6. 如何使用python计算2个毫秒级字符串的计算
  7. 数学建模算法与应用:预测算法(4)马尔可夫预测
  8. psd做成html叫切图吗,第一章 PSD网页切图制作HTML全过程教程.pdf
  9. python二维游戏编程 最强大脑游戏_看完《最强大脑》,我决定用Python做这个游戏...
  10. vivado下载bit和ltx失败
  11. Qt示例解析 【Callout】
  12. 人工智能和新能源行业有哪些
  13. traceroute的一些用法
  14. 组合导航初始对准(1)
  15. 小白快速变大神,零基础菜鸟应该怎么学编程
  16. import导入很慢,出现等待事件statement suspended, wait error to be cleared
  17. SEO新人如何做网站诊断和策划
  18. 黑客零起步——菜鸟必看!
  19. leetcode 537 py 中map函数用法
  20. 通常所说微型计算机的奔3,【计算机应用基础】.doc

热门文章

  1. UI控件Telerik UI for WinForms发布R1 2019|附下载
  2. Python运算符与编码
  3. BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)
  4. lingo逻辑运算符
  5. 关于直播,所有的技术细节都在这里了(2)《转载》
  6. memcache中的add和set方法区别
  7. linux 学习操作小计
  8. 背景和弹出 Panel 都带有动画效果的 modal 效果
  9. FTP协议、电子邮件系统、Telnet远程控制
  10. hadoop单机配置(非分布式)