版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计报告题目 : 扫雷小游戏设计2018 年 7 月 12 日指导教师评语1. 课程设计内容 12. 课程设计目的 13. 背景知识 14. 工具/准备工作 35. 设计步骤、方法 35.1 35.2 定义全局变量 45.3 挖雷部分 函数的分析 56. 设计结果及分析 117. 设计结论 168. 参考文献 17附录 171. 课程设计内容在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也
2、越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用C-free 编写了与它功能相仿的挖地雷游戏,寓学于乐。即:设计一个功能与Windows中的挖雷游戏相同的小游戏。2. 课程设计目的1 培养学生综合运用所学知识独立完成课题的能力。2 试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。3提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。4培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。5培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性
3、,初步培养工程意识和创新能力。6对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核3. 背景知识游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为9*9 个方块 10 个雷,中级为16*16 个方块 40 个雷,高级为16*30 个方块 99 个雷,自定义级别可以自己设定雷区大小和雷数,但是雷区大小不能超过24*30) ,玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。游戏的基本操作包括左键单击(Left Click)、右键单击(Right Cl
4、ick)、双击( Chording )三种。其中左键用于打开安全的格子,推进游戏进度;右键用于标记地雷,以辅助判断,或为接下来的双击做准备;双击在一个数字周围的地雷标记完时,相当于对数字周围未打开的方块均进行一次左键单击操作:左键单击:在判断出不是雷的方块上按下左键,可以打开该方块。如果方块上出现数字,则该数字表示其周围3×3 区域中的地雷数(一般为8 个格子,对于边块为5个格子,对于角块为3 个格子。所以扫雷中最大的数字为8);如果方块上为空(相当于0),则可以递归地打开与空相邻的方块;如果不幸触雷,则游戏结束。双击:同时按下左键和右键完成双击。当双击位置周围已标记雷数等于该位置数
5、字时操作有效,相当于对该数字周围未打开的方块均进行一次左键单击操作。地雷未标记完全时使用双击无效。若数字周围有标错的地雷,则游戏结束,标错的地雷上会显示一个 “ ×”(见下图)扫雷的设计原理:扫雷游戏分为几个步骤:第一步,使用二维数组表示地图;第二步,随机生成几个地雷;第三步,点击方格的反应,计算每个非雷区方格点开后的数字;第四步,当方格数字为0 的情况;第五步,当方格为地雷的情况。第一步地图的大小和第二步地雷的数量都应该是程序中给定的,或者玩家输入的。这个是多少自己决定吧。第三步,计算非雷区方格点开后的数字就把这个方格在二维数组中周围八个方向的方格是否是地雷都检查一遍,一定要注意不
6、要越出数组边界。这个数字可以在游戏初始化时全都计算好,也可以在玩家点击的时候再计算。点击非雷区方格,显示数字,这个方格标记为“已点过 ”。第四步,当方格数字为0 时,这里要用到递归调用,就是让程序自动“点击 ”这个数字为0 方格周围的八个方格,然后再看结果,如果不是0,就停止,如果是0,依然递归调用,直到没有0 为止,或者直到点遍所有方格为止,一定要注意不要越出数组边界。第五步,很简单,宣布玩家死亡就可以了。4. 准备工作查阅相关资料,了解扫雷的的玩法,了解扫雷的设计思想方法。借鉴他人写过的程序,从中找到突破口。从程序中了解需要的各种函数准备,再进一步获悉该函数的功能与使用方法。对自己要设计的
7、挖地雷游戏进行功能分析,大致如下:总体游戏过程分析:在屏幕上显示一个游戏界面,雷区范围内预先埋设了一定数量的随机分布的地雷(用数字9 代替地雷);玩家通过从键盘中输入(行数X,列数Y) 进行点击;若能点中所有非雷区,则游戏胜利;否则踩雷,游戏失败。简易版扫雷游戏要具备以下功能:1) 开局:首先选择游戏等级,然后生成不同等级的雷区界面。游戏等级分为三级:各等级行列数为 :简单:10×10、普通:15×15、困难:20× 20;雷区每个*号下面或埋藏有1 个地雷,或者没有地雷;2)挖雷:从键盘中输入(行数X,列数Y),并按回车键,可挖开它;若所揭方块下有9,则踩雷,此
8、时所有含地雷的块都出现9,该局游戏失败;如果方块上出现数字,它代表 在它周围的8 个方块中共有多少颗地雷;3) 输入:通过键盘输入相关指示信息;4) 输出:提示游戏失败,是否继续再来一遍;5. 设计步骤、方法5.1 主函数第一步,写出主程序的基本框架,确定各子模块名字和参数。具体的函数流程如图5-3 所示:定义使用到的常数、全局变量、函数原型说明。然后初始化图形系统,调用游戏控制函数,游戏只接受键盘,通过鼠标结束游戏,关闭系统,退出游戏。主控模块的各子模块说明:void InitialValue_game( ) 用于棋盘初始化;InitialMine_game( ) 用于棋盘的随机布雷;voi
9、d print_game( ) 用于打印棋盘;int judge_game( ) 用于判断游戏是否结束;int openmap ( )用于点开地图;5.2 定义全局变量#include <stdio.h>#include "stdlib.h"#include"time.h"# define s 20int x;/* 棋盘行数*/int y;/* 棋盘列数*/int b; /*选择游戏难度1 简单 2 普通 3 困难 4 自定义 */int h;/*雷的个数*/struct Games g;struct Games int game_intss
10、;char game_charss;使用结构体数组来完成棋盘的定义,引用时间头文件来完成对随机布雷的随时性。5.3 挖雷部分函数的分析void InitialValue_game(struct Games *g)int i,j;for(i=0; i<x; i+)for(j=0; j<y; j+)(*g).game_intij=0;(*g).game_charij='*'InitialMine_game(struct Games *g)int i,j,next1,next2;int sum=0;srand(unsigned)time(NULL);while(1)i=r
11、and()%x;j=rand()%y;if(*g).game_intij=9) continue;(*g).game_intij=9;+sum;for(next1=-1; next1<2; next1+)for(next2=-1; next2<2; next2+)if( -1<i+next1 && next1+i<x&& -1<j+next2 && j+next2<y )if(*g).game_inti+next1j+next2!=9)(*g).game_inti+next1j+next2+=1;if(sum=
12、b) break;void print_game(struct Games *g,int Logo)int i,j;int as;for(i=0; i<x; i+)ai=i+1;if(Logo=1)printf(" %d",a0);for(i=1; i<x; i+) printf(i<10? " %d" : " %d",ai);printf("nn");for(i=0; i<x; i+)if(i+1<10)printf("%d ",i+1);for(j=0; j&l
13、t;y; j+) printf("%d ",(*g).game_intij);printf("n");elseprintf("%d ",i+1);for(j=0; j<y; j+) printf("%d ",(*g).game_intij);printf("n");if(Logo=2)printf(" %d",a0);for(i=1; i<x; i+)printf(i<10? " %d" : " %d",ai);pri
14、ntf("nn");for(i=0; i<x; i+)if(i+1<10)printf("%d ",i+1);for(j=0; j<y; j+)printf("%c ",(*g).game_charij);printf("n");elseprintf("%d ",i+1);for(j=0; j<y; j+)printf("%c ",(*g).game_charij);printf("n");int judge_game(struct
15、 Games *g)int sum=0;int i,j;for(i=0; i<x; i+)for(j=0; j<y; j+)if(*g).game_charij='*') sum+=1; return sum;int openmap(struct Games *g,int i,int j)system("cls");int next1,next2;if(*g).game_intij=9) return 1;elseif(*g).game_intij!=0)(*g).game_charij=(char)(*g).game_intij+48);ret
16、urn 2;else(*g).game_charij='0'for(next1=-1; next1<2; next1+)for(next2=-1; next2<2; next2+)if( -1<i+next1 && next1+i<x && -1<j+next2 && j+next2<y)if(*g).game_chari+next1j+next2='*')openmap(g,i+next1,j+next2);return 2;6. 设计结果及分析运行第一步:按 ENTER 键进
17、入:13选择游戏难度(简单、普通、困难、任意),按ENTER 键进入: 简单难度:普通难度:15任意难度:游戏界面,开始从键盘输入数字,格式为(行数X, 列数Y),点击Enter 键:27游戏结束页面:7. 设计结论一学期结束了,对C 语言也有了一些认识,不过自我感觉学得不太好,好在还是学到了知识:了解了 C 的发展以及编程的基本步骤,学会了Printf 输出语句,C 语言的运算,知道了有哪几种数据类型,还有我觉得经常用的if 语句, if- -eles 语句, for 循环,while 语句, do-while 语句等等,基本会用数组和指针,还有字符串的处理,对了还有才学的结构体。还有许多知
18、识点,不一罗列了,总之 C 语言要学的东西太多了,听大三的都说C 很简单,但我并不认为他像人们说的那样简单,C 是最基础的,基础不代表简单,也可能是我没学好才有这样的感受。在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。郭
19、翠英主编的C 语言课程设计实例精编;张芳妮 吕波 译 C 语言编程常见问题解答;谭浩强 C 程序设计题解与上机指导(第二版)。伍俊良 .VB 课程设计与系统开发案例M.北京#include <stdio.h> #include "stdlib.h"#include"time.h # define s 20int x;/* 棋盘行数*/int y;/* 棋盘列数*/int b; /* 选择游戏难度1 简单 2 普通 3 困难 4 自定义 */int h;/* 雷的个数*/struct Games g;struct Gamesint game_intss;
20、char game_charss;main()int i,j;/* 定义 i,j变量 */int NO;int begin=1;int h;/* 确定雷的个数*/while(begin)printf ("nnnnnnn"n""ttt"ttt欢迎进入扫雷nnn""ttt按回车键继续n""ttt=n"tttn");getchar(); /* 游戏开始界面*/system("cls");printf(" nnnnnnnnn");printf("
21、;请选择游戏难度:nn");printf("1简单难度nn");printf("2普通难度nn");printf("3困难难度nn");printf("4自定义难度nn");scanf("%d",&h);getchar();/* 确定游戏难度*/if(0<h&&h<5)switch(h)case 1:x=10;y=10;b=10;break;/* 简单难度*/case 2:x=15;y=15;b=40;break;/* 普通难度*/case 3:x=
22、20;y=20;b=60;break;/* 困难难度*/case 4:system("cls");printf(" 请输入棋盘行列数(小于20 且用逗号隔开):"); /*从键盘输入坐标*/scanf("%d,%d",&x,&y);getchar();printf(" 请输入雷的个数:");/*从键盘输入雷的个数*/scanf("%d",&b);getchar();break; break;elseprintf(" 输入错误请重新输n");while(
23、begin)system("cls");InitialValue_game(&g);/* 棋盘初始化*/InitialMine_game(&g);/* 随机布雷*/print_game(&g,2);/* 打印棋盘*/NO=1;while(NO)printf("Please choose:");scanf("%d,%d",&i,&j);getchar();if(-1<i-1 && i-1<x && -1<j-1 && j-1<
24、y)switch(openmap(&g,i-1,j-1)case 1:print_game(&g,1);printf(" 游戏结束!按回车键再来一局n");if(getchar()='n')begin=1;else begin=0;NO=0;break;case 2:if(judge_game(&g)=b)printf("win !n");print_game(&g,1);printf(" 按回车键再来一局n");/*是否再来一局*/if(getchar()='n')be
25、gin=1;else begin=0;NO=0;break;elseprint_game(&g,2);NO=1;break;default:break;elseprintf(" 你输入错误!请重新输入n");void InitialValue_game(struct Games *g)int i,j;for(i=0; i<x; i+)for(j=0; j<y; j+)(*g).game_intij=0;(*g).game_charij='*'InitialMine_game(struct Games *g)int i,j,next1,ne
26、xt2;int sum=0;srand(unsigned)time(NULL);while(1)i=rand()%x;j=rand()%y;if(*g).game_intij=9) continue;(*g).game_intij=9;+sum;for(next1=-1; next1<2; next1+)for(next2=-1; next2<2; next2+)if( -1<i+next1 && next1+i<x&& -1<j+next2 && j+next2<y )if(*g).game_inti+nex
27、t1j+next2!=9)(*g).game_inti+next1j+next2+=1;if(sum=b) break;void print_game(struct Games *g,int Logo)int i,j;int as;for(i=0; i<x; i+)ai=i+1;if(Logo=1)printf(" %d",a0);for(i=1; i<x; i+) printf(i<10? " %d" : " %d",ai);printf("nn");for(i=0; i<x; i+)31if(i+1<10) printf("%d ",i+1);for(j=0; j<y; j+) printf("%d ",(*g).game_intij);printf("n");elseprintf("%d ",i+1);for(j=0; j<y; j+) printf("%d ",(*g).game_intij);printf("n");if(Logo=2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- BRL-34778-生命科学试剂-MCE
- Boc-NH-C5-NH-Me-生命科学试剂-MCE
- 电力交易员岗前理论知识考核试卷含答案
- 电力交易员班组管理知识考核试卷含答案
- 稀土电解工岗前QC管理考核试卷含答案
- 绒线编织工操作规范强化考核试卷含答案
- 再生物资挑选工安全培训效果水平考核试卷含答案
- 2026年境外来电诈骗防范知识测试题
- 托育师安全生产基础知识评优考核试卷含答案
- 2026年建设工程消防验收岗面试库
- 2026年人文社科知识测试题目
- 解读《特种设备使用管理规则》TSG 08-2026与2017版对比
- 体育管理职业规划
- 2026湖南新五丰股份有限公司兽医管理岗招聘1人笔试历年参考题库附带答案详解
- 《第2课 陶器上的纹样》课件2025-2026学年人教版美术三年级下册
- 2026年十五五都市圈城际通勤效率提升工程实施指南
- 川教版-三年级下册【【【信息科技】】】第一单元第2节《掌握在线学习工具》课件
- 法制校本课程:生活中的法律案例故事
- 2026年及未来5年中国健康城行业市场调查研究及发展战略规划报告
- 2025年贵州大数据产业集团有限公司第一次社会招聘155人备考题库及完整答案详解一套
- 2026湖北事业单位联考鄂州市招聘249人备考题库及1套完整答案详解
评论
0/150
提交评论