第一范文网 - 专业文章范例文档资料分享平台

C语言设计论文

来源:用户分享 时间:2025/5/16 11:55:00 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

第2章 课程设计内容

2.1程序功能介绍

扫地雷是一个广泛游戏,扫雷的游戏规则:扫雷就是要把所有非地雷的格子揭开即胜利;踩到地雷格子就算失败。当鼠标点击到棋盘范围外时,视为无效,无响应。 游戏主区域由很多个方格组成。使用鼠标左键随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子自动打开;如果其周围还有空白格,则会引发连锁反应;在你认为有雷的格子上,点击右键即可标记雷;如果一个已打开格子周围所有的雷已经正确标出,则可以在此格上同时点击鼠标左右键打开其周围剩余的无雷格。扫雷可以充分锻炼你的逻辑思维能力、抽象思维能力、想象力、判断力、反应速度。

2.2程序整体设计说明

2.2.1设计思路

首先我们在雷区上随机地放上雷,没有雷的地方被点击后就会显示一个数字表示它周围有几个雷,这是怎么实现的呢?我们可以把整个雷区看成一个二维数组a[i,j],如雷区:

11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 31 32 33 34 35 36 37 38 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57 58 我要知道a[34]周围有几个雷,就只有去检测 a[23],a[24],a[25] a[33], a[35] a[43],a[44],a[45]

2

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

这8个雷区是否放上了雷,仔细观察它们成在数学关系。 抽象出来就是:a[i,j]的雷的个数就是由

a[i-1,j-1],a[i-1,j],a[i-1,j+1] a[ i ,j-1], a[ i ,j+1] a[i+1,j-1],a[i+1,j],a[i+1,j+1] (如果超出边界再加以判断)

这样的8个雷区决定的。 扫雷程序还会自动展开已确定没有雷的雷区。如果a[3,4]周围雷数为1,a[2,3]已被标示为地雷,那么 a[24],a[25],a[33],a[35],a[43],a[44],a[45] 将被展开,一直波及到不可确定的雷区。这也是实现的关键。我们可以把数组的元素设定为一个类对象,它们所属的类设定这样的一个事件:在被展开时,检查周围的雷数是否与周围标示出来的雷数相等,如果相等则展开周围未标示的雷区。这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可展开的雷区。相信在了解以上两个要点后,把雷区这个类编写完全(如添加是否有雷标记,是否展开标记,周围雷数等,双击,左右单击的鼠标事件等),实现扫雷程序应是十分简单的一件事。 2.2.2数据结构设计及用法说明

void Close(void) 图形关闭

void Control(void) 游戏开始,重新,关闭 void DrawEmpty(int i,int j,int mode,int color) 两种空格子的显示 void DrawRedflag(int i,int j) 显示红旗 void DrawSmile(void) 画笑脸 void GameBegain(void) 游戏开始画面 void GameOver(void) 游戏结束画面 void GamePlay(void) 游戏过程 void GameWin(void) 显示胜利 void Init(void) 图形开始 int LeftPress(void) 鼠标左键按下 int MineStatistics(int i,int j) 统计每个格子周围的雷数 void MouseGetXY(void) 得到当前位置

3

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

void MouseOff(void) 鼠标光标隐藏 void MouseOn(void) 鼠标光标显示 void MouseSetXY(int x,int y) 设置当前位置 int RightPress(void) 鼠标右键按下 int ShowWhite(int i,int j) 显示无雷区的空白部分 2.2.3程序结构

图2.1 扫地雷游戏流程图

2.2.4各模块的功能及程序说明

(1)void Control(void):该模块是控制程序的框架,决定是否初始化游戏画面并执行游戏过程,以及是否重新开始游戏或退出。

(2)void GameBegain(void):该模块用以初始化游戏画面,调用画图模块、画格子模块等,完成显示笑脸图标、描绘方格棋盘、初始化鼠标位置等任务。

(3)void GamePlay(void):该模块完成游戏的主过程,调用递归显示算法,标示红旗,判断失败等任务。

(4)int MineStatistics(int i,int j):以单元格的坐标为参数,返回单元格周围的雷的数目。

4

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

(5)int ShowWhite(int i,int j):参数是所点击方格的坐标,如果点击的方格周围没有雷,则调用该模块。它会显示周围雷的数目,如果周围仍没有则递归调用,直到周围不再有空白格。 2.2.5程序结果

游戏初期初始化图像如图2.2所示:

图 2 .2 游戏初期初始化图像

2.3程序源代码及注释

#include #include #include

#define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define MOUSEMOVE 0xff08 int num[10][10];/*范围*/

int p[10][10];/*统计雷的数组*/ int loop;/*重新来的标志*/

int again=0;/*是否重来的变量*/

int scorenum;/*一开始统计有几个雷*/ char score[3];/*输出一共有几个地雷*/ int Keystate; int MouseExist; int MouseButton; int MouseX;

5

搜索更多关于: C语言设计论文 的文档
C语言设计论文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3fbke3sgyb1emx02t1om_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top