C语言小程序扫雷实践报告_第1页
C语言小程序扫雷实践报告_第2页
C语言小程序扫雷实践报告_第3页
C语言小程序扫雷实践报告_第4页
C语言小程序扫雷实践报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

成果形式:C语言小程序扫雷实践报告成果名称:C语言小程序扫雷实践活动题目(三号宋体加粗居中)实践目的(一级标题)熟悉我们自己所用的计算机的C语言开发环境,并且能够熟练掌握,达到错误能找到原因并且加以改正。加深对课本理论知识的理解,进一步掌握书中重点、难点实例,锻炼自己的编写程序能力和实际应用能力。上机调试程序的过程中,发现错误,解决错误,保证程序的正确运行,运行结果与给定结果完全相同。学会用书中基本知识解决实际中的一些问题,将书本所学的内容与实际操作相结合,掌握把实际问题转变为C语言描述的算法的方法,明确思路。将自身的不足与缺陷改掉,养成良好编辑风格。培养我们的主观能动性、沟通、表达能力和团队合作意识,为我们以后的发展打下基础。熟练掌握if、if…else、if…elseif语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。二、实践内容通过对c语言的学习,老师要求我们来完成一些小程序或者小项目的制作。时间实训内容第一天上午对全年级进行实习总动员,进行短学期实习内容的整体安排介绍,下午带领学生复习C语言所学知识点,讲解复习系统设计方面的内容,内容包括结构体、文件读写、数组、指针等。第二天对C语言开发系统的流程进行讲解,包括部分软件工程的知识。内容包括流程图设计、需求分析、形成初步的系统设计方案。第三天对具体待开发系统(为方便老师讲解和学生讨论,同时又尊重学生的兴趣,学生选题时可以2选1)进行讲解,内容包括:对题目进行分析,需要完成的功能,数据结构的设计等。第四至七天针对所选程序题目进行编码,完成具体功能对应的各个函数的代码和实现。第八天对系统进行测试,运行,对出现的问题,思考解决。可以正常运行的同学进行优化代码。第九天设计文档编写和修订。把开发过程中的重点内容写出来。第十天系统演示、验收及评价。验收过程中可对学生做一定指引,激发学生的编程兴趣,使其在针对完成的程序改进现有功能,扩充其它功能,以提高所完成程序的实用性。三、实践过程算法思路:定义一个二维数组,用来表示扫雷游戏的行,列。定义初始化使得二维数组的行,列为0;将二维数组中的10个数组坐标设置为“雷”,用“1”来表示雷。其余数组坐标全部为0,即为安全地带;在每一个数组坐标周围进行搜寻,每搜寻到一个有“雷”的数组坐标则该数组坐标表示的值加1,但是这种情况会出现数组越界的问题。所以添加一辅助数组,但打印数组时,不打印辅助数组,只打印游戏数组即原来定义的二维数组辅助数组辅助数组游戏数组游戏数组功能说明:游戏开局会有选择进入或者退出游戏的选择界面,可以使其自动选择开始或结束游戏;本游戏是通过C语言环境下来运行的,可以通过输入坐标点来实现扫雷游戏的运行;如果游戏过程中,玩家输入的坐标刚好有地雷的话,则会显示游戏失败。雷区每个坐标下都只有一颗地雷或者没有地雷;如果输入的坐标点没有地雷,则会显示本坐标点周围拥有的地雷个数。或者在本坐标点周围没有地雷,那么本游戏会将没有地雷的坐标点自动揭开;游戏失败或者胜利后会显示是否继续或者选择退出游戏两个选项;功能框图:自动更新游戏界面输入扫雷游戏(主框架)自动更新游戏界面输入扫雷游戏(主框架)输出是否继续游戏退出输出是否继续游戏退出将辅助数组全部定义为0,可以表示出雷的个数和位置;在游戏开始后,将辅助和游戏两个二维数组分别初始化为*和0这样就不能看到*下所显示的数字,即可正常游戏。将游戏数组进行排雷操作,重新定义一个变量,使其每找到一个雷便会使这个变量加1,直到变量等于雷数,即可判定游戏胜利。在游戏过程中,玩家每输入一个坐标点便会重新打印一次游戏数组,打印后的游戏数组不包含玩家已输入过的坐标点。如果玩家在游戏过程中,输入的坐标点正好有雷,便会自动结束游戏。函数原型:void*memset(void*s,intch,

size_t

n);初始化函数#define用来宏定义定义的子函数:voidinit_board()初始化二维数组voiddisplay()用来打印棋盘voidset_boom()用来布置雷区voidfun()对周围八个方位扫描intget_boom()计算周围八个方位的雷数voidgame()游戏运行voidmenu()游戏开始界面voidtest()游戏选择界面system("pause")冻结屏幕,用户按键结束三、数据组织:1、数据类型定义:整型,浮点型,空类型,字符型,整型常量数据存储:调试和运行:1、调试过程:在调试过程中,想采用两个for函数来寻找雷的个数,但是系统显示有问题,之后用递归的方法来重新进行调试发现没有问题。2、运行结果:第一步:开始运行程序第二步:程序的运行无误第三步:程序结束执行退出游戏或者重新开始游戏源代码:#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#defineROW9#defineCOL9#defineROWS(ROW+2)#defineCOLS(COL+2)#defineMAX10//初始化voidinit_board(chararr[ROWS][COLS],charset,introw,intcol){memset(arr,set,row*col*sizeof(arr[0][0]));}//打印棋盘voiddisplay(chararr[ROWS][COLS],introw,intcol){inti=1,j=1;printf("");for(i=1;i<=row-2;i++){printf("%2d",i);}printf("\n");for(i=1;i<=row-2;i++){printf("%2d",i);for(j=1;j<=col-2;j++){printf("%2c",arr[i][j]);}printf("\n");}}//布雷voidset_boom(chararr[ROWS][COLS]){intcount=MAX;while(count>0){intx=rand()%9+1;//产生1~9的随机数inty=rand()%9+1;if(arr[x][y]=='0'){arr[x][y]='1';count--;//布雷}}}//扫描雷intget_boom(chararr[ROWS][COLS],intx,inty){returnarr[x-1][y-1]+arr[x-1][y]+arr[x-1][y+1]+arr[x][y-1]+arr[x][y+1]+arr[x+1][y-1]+arr[x+1][y]+arr[x+1][y+1]-8*'0';//计算周围八个位置雷的个数}//对某一点进行扩展voidfun(chararr[ROWS][COLS],charshow[ROWS][COLS],intx,inty){if((x>=0)&&(x<=11)&&(y>=0)&&(y<=11))//递归约束条件{if(get_boom(arr,x,y)==0)//判断雷的个数{show[x][y]='';if(show[x-1][y-1]=='*')//对周围八个位置分别进行递归{fun(arr,show,x-1,y-1);}if(show[x-1][y]=='*'){fun(arr,show,x-1,y);}if(show[x-1][y+1]=='*'){fun(arr,show,x-1,y+1);}if(show[x][y-1]=='*'){fun(arr,show,x,y-1);}if(show[x][y+1]=='*'){fun(arr,show,x,y+1);}if(show[x+1][y-1]=='*'){fun(arr,show,x+1,y-1);}if(show[x+1][y]=='*'){fun(arr,show,x+1,y);}if(show[x+1][y+1]=='*'){fun(arr,show,x+1,y+1);}}elseshow[x][y]=get_boom(arr,x,y)+'0';//如果周围有雷则显示雷的个数}}voidgame(){ chararr[ROWS][COLS]={0};charshow[ROWS][COLS]={0};intwin=0;intx=0;inty=0;init_board(arr,'0',ROWS,COLS);init_board(show,'*',ROWS,COLS);set_boom(arr);display(show,ROWS,COLS);while(win!=MAX)//判断是否排完雷{printf("请输入坐标:");scanf("%d%d",&x,&y);if(((x>=1)&&(x<=ROW))&&((y>=1)&&(y<=COL))){if(arr[x][y]=='1'){printf("游戏结束!\n");break;}else{fun(arr,show,x,y);for(inti=1;i<=9;i++){for(intj=1;j<=9;j++){if(show[i][j]=='*'){win++;}}}display(show,ROWS,COLS);}}else{printf("输入坐标有误\n");}}if(win==MAX){printf("恭喜你赢得游戏!");}printf("雷阵如下:\n");display(arr,ROWS,COLS);}voidmenu(){printf("*************************************\n");printf("******扫雷游戏***********\n");printf("******1.开始游戏***********\n"); printf("******0.退出游戏***********\n"); printf("**************************************\n"); }voidtest(){intinput=0;srand((unsignedint)time(NULL));do{menu();printf("请选择:");scanf("%d",&input);switch(input){case1:game();break;case0:break;default:printf("选择错误,请重新选择!");break;}}while(input);}intmain(){test();system("pause");return0;}四、实践体会在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。在这个俩个星期里,我们专业的学生在周延杰老师的带领下进行了C语言程序实践学习。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理。简单界面程序。高级界面程序。程序的添加修改。用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。在大学里C语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。老师在第一见面时说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个学期的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。同时,我觉得C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。要了解C语言就要从语法基础来学习起,首先要是要了解它的结构,比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。在C语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以我们在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。这些都是语法基础也是C语言的基础如果把它们都了解很好了,那么你编起程序来就很得心应手了。在短学期末老师要求我们多找一些实例来进行练习。多做习题,找一些经典例子自己来编写,这样才能学好这门课。写程序千万不要半途而费,想到一个思路,就要按自己思路把它写完,就算错了,也可以让自己了解为什么这样做会错?会出什么结果?以后自己千万不要在这个地方犯同样的错误。当学到一个新的知识点,就立刻上机实验,这样不但能巩固了以前学的内容,也更加能加强对新知识的理解。下面是对C语言中有许多重要知识的总结: 1、一些基本的函数和基本数据类型的应用。其中,基本数据类型分为整型、浮点型、字符型、枚举类型。基本函数包括输入输出函数。 2、把运算符的优先顺序排列清楚,要分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论