扫雷游戏 C语言

扫雷游戏是一款比较经典的小游戏,这些年中Windows操作系统历经数次换代,但这个小游戏在任何版本的Windows操作系统里却依然保持原貌。实现扫雷游戏的算法有很多,如C、C++、Java等。本篇文章研究的是以Visual Studio 2013为编程软件,以此设计开发的一款扫雷游戏。其功能类似于Windows操作系统自带的扫雷游戏,但这里这提供基础功能,没有设置难易等级、最好记录和英雄排行榜的功能,而且可更改性差,无法暂停游戏。本文首先介绍了任务要求和制作游戏的整体思路及整个游戏的设计流程规划,然后介绍了雷区布置以及地雷随机产生的实现方法;重点介绍了在游戏过程中的格式件的处理,其中又鼠标事件和清除未靠近地雷区方块这两方面最为重要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近雷区方块由于引进了“递归”这个概念而使其简单化。通过这次的课程设计,使我们在程序的开发和设计上有新的认识并能有所提高。

问题描述

做一个NxM的扫雷游戏,每个方格包含两种状态:关闭(closed)和打开(opened),初始化时每个方格都是关闭的,一个打开的方格也会包含两种状态:一个数字(clue)和一个雷(bomb)。你可以打开(open)一个方格,如果你打开的是一个bomb,那么就失败;否则就会打开一个数字,该数字是位于[0,8]的一个整数,该数字表示其所有邻居方格(neighboring squares)所包含的雷数。

任务要求:

  1. 能够打开一个方格,一个已打开的方格不能再关闭。
  2. 能够标记一个方格,标记方格的含义是对该方格有雷的预测(并不表示真的一定有雷),当一个方格标记后该方格不能被打开,只能执行取消标记的操作,只能在取消后才能打开一个方格。
  3. 能够给出游戏结果(输、赢、剩余的雷数、用掉的时间按秒计)。
  4. 在一个10*10的方格中,随机分布10个地雷,并在其它没有地雷的格中显示该方格周围相邻的方格中共有几枚地雷。

研究思路

设计思路:

首先了解游戏规则:在不打开任何藏有地雷的格子的情况下,以最快的速度找出所有的地雷。如果在打开格子的过程中,不小心翻开藏有地雷的格子,则宣告失败,即游戏结束;将所有不含地雷的格子打开,则宣告胜利,即游戏成功。

游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的格子按下左键时即表示翻开格子,当鼠标指针对准未翻开的方块按下右键时即表示标记,再次按下恢复为未标记。玩家可以通过点开格子后出现的数字提示了解以数字为中心的其周边八个格子内含有的地雷数。当按下的格子不是地雷,且周边八个格子也都没有地雷时,格子会以被翻开格子的八个方向将空白格子翻开。

问题分析

我们可以发现在这个游戏中主要有几个关键的地方:

  1. 初始化问题:关于产生雷数的问题,即如何随机产生本局游戏中雷的总数,关于雷随机分布之后,如何获取每个区域周围雷的个数。
  2. 对鼠标事件的处理问题:即在游戏过程中对鼠标事件应如何做出反应。当单击鼠标左键时,软件对该事件的处理,即翻开当前区域的覆盖面。当单击鼠标右键时,系统做出的处理,是做标记和取消标记。
  3. 游戏内容图片的插入:即设计出游戏弹窗,并插入图片,再现Windows系统中自带的扫雷游戏
  4. 游戏对话框和游戏相结合,保证玩家有更好的游戏体验
  5. 游戏规则、胜负判断方法,以及关于时间计算的代码实现。

在实现课程设计的内容的基础上,我们尽可能去模拟出Windows操作系统中的扫雷游戏,但由于是自身能力和课程设计时间的不足,导致一部分功能无法实现,如使用多线程使游戏运行函数和计时器函数同时运行,游戏难易程度的调节等。

最终实现

 

随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本文阐述了扫雷游戏的分析与设计的基本过程。

扫雷游戏是一款益智类游戏,该游戏与网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。我们在这次实验设计中,实现了雷的随机分布、简单加密、载入图片、鼠标点击事件等,使游戏更加接近Windows操作系统的扫雷游戏,在基础功能上没有太大的问题。但在一些细节方面仍需要完善,比如没有设置排行榜、没有设置难易程度的选择等。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟阳小酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值