C语言程序编写实践_第1页
C语言程序编写实践_第2页
C语言程序编写实践_第3页
C语言程序编写实践_第4页
C语言程序编写实践_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序编写实践

一、实践目标

1.培养生综合运用所学知识独立完成课题的能力。

2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和

方法。3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的

基本素质。

4.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,

全方位考虑

问题等科学技术人员应具有的素质。

5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到

解决问题的

新途径的悟性,初步培养工程意识和创新能力。

6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计

能力、书面

及口头表达能力进行考核2.课程设计目的

1.培养生综合运用所学知识独立完成课题的能力。

2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和

方法。

3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素

质。

4.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到

解决问题的新途径的悟性,初步培养工程意识和创新能力。

二、实践内容

扫雷游戏是Tndows操作系统自带的一款小游戏。在过去的几年里Windows

操作系统历经数次换代更新,变得越来越庞大复杂,功能也越来越强大,但是这

款小看戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。

参考系统自带的扫雷程序自行开发设计一款扫雷游戏。春重冒要求:

(1)鼠标左击排雷,右击插小旗,打问号:

(2)方格里面的数字表示方格周围的雷数:

(3)能够显示未标记雷数和游戏用时:

三、实践过程

功能框图

二、算法设计:

1、算法思路::定义一个二维数组,用来表示扫雷游戏的行,歹h定

义初始化使得二维数组的行,列为0;

将二维数组中的10个数组坐标设置为“雷”,用“I”来表示雷。其余数组

坐标全部为0,即为安全地带;

在每一个数组坐标周围进行搜寻,每搜寻到一个有“雷”的数组坐标则该数

组坐标表示的值加1,但是这种情况会出现数组越界的问题。所以添加一辅助数

组,但打印数组时,不打印辅助数组,只打印游戏数组即原来定义的二维数组。

将辅助数组全部定义为0,可以表示出雷的个数和位置;

在游戏开始后,将辅助和游戏两个二维数组分别初始化为*和0这样就不能

看到*下所显示的数字,即可正常游戏。将游戏数组进行排雷操作,重新定义一

个变量,使其每找到一个雷便会使这个变量加1,直到变量等于雷数,即可判定

游戏胜利。

在游戏过程中,玩家每输入一个坐标点便会重新打印组一次游戏数组,打印

后的游戏数组不包含玩家已输入过的坐标点。如果玩家在游戏过程中,输入的坐

标点正好有雷,便会自动结束游戏。

2、算法流程图:

线人工尊耳W

chararrpOffSICOLSl

A'nMMAXcharshoWRCWS)<_

[CCLS].irtx.mty

345x«11)&aly

&Siy<«11

<='02

«?<X.y

2丽

owp(-1Ty-1i==一

snowx-ITy==1

:<=row-2

snowM^-1=='

*>,+「==•

af1*y"•1

Ihowtx*1ry=='

sh3w(xly]=

;et_bO3m|ar,x,y)*

3、函数原型:

#define用来宏定义

定义的子函数:voidinit_board()初始化二维数组

voiddisplay()用来打印棋盘

voidset_boom()用来布置雷区

voidfun()对周围八个方位扫描

intget_boom()计算周围八个方位的雷数

voidgame。游戏运行

voidmenu。游戏开始界面

voidtest。游戏选择界面

system("pause”)冻结屏幕,用户按键结束

三、数据组织:

1、数据类型定义:整型,空类型,字符型,字符常量

2、数据存储:无

四、调试和运行:

1、调试过程:

WBMSBS0«■«KDISO00^0WUfl

□gQQCtta6K应0・£•・-180088i/«AMTOMKC,•i<•“,u”

包・■e-*|

W14IMt.—“clMrL[Mba](C0uSLcharwt.tM0,IMcel>

(

..•3.立

〃力”,

wW•it*Uy«terE9AMC2>*0.♦c»l>

2(j•11J<**U

XWixFUJI”

BMa*99AMQaya

刚开始出现运行显示错误,仔细检查发现代码没问题,最后在同学提示下才发现是

标点符号的错误。

-DMUMtU«HRY)SQIAO)O&uJI

□«■•«]«a4”私私•£•••ISQB88✓■•・—•»―

<]41SS4“i

«RWW・;・事

■'MC

i.fe»a

o.uth»«

SilW:

-•出文传冬:UPx”\——W\D«.rR\素备书].・《•

-•叨大小iK1B

-4.S4I

MEBA

最后经过几次彻底检查,程序运行成功。

2、运行结果:

1,启动程序,运行成功

□a8xaa<8•・■isas88/■~

EM“・,)>

<W(i•t|I<•

■'MC

i.fa»a

O.UHlAa

JK1B

2,执行程序,瑜入1开始游戏,输入0退出游戏。

IECAUsers\^^5\DesktopV^€1.exe—□X

1.开始游戏*«•♦♦♦♦***

0.退出游戏♦♦♦»♦»**♦*♦

0输入坐标:■

|CCAUsers\^fe^9\DesktopV^€1.exe-□X

1.开始游戏♦«(•♦»♦♦***

0.退出游戏♦♦♦♦♦»****♦

请选择:0

请按任:意健继续...

3,输入坐标,开始游戏。

■"CAUsers\€^!9\Desktop\*^€1.exe□X

2»♦

3•♦

4•♦

7♦♦

8**

9«*

。瑜入坐标

12

31

42

53

624

7•♦

8»♦

9»♦

¥输入坐标

12

1

2

31

42

53

624

7»♦

4结束游戏

□X

1.开始游戏♦•♦»**»*»♦»

0.退出游戏♦»♦•****»♦»

代码附件

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#inclucle<string.h>

#defineROW9

#defineCOL9

ftdefineROWS(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,int

col)

(

inti=1,j=1;

printf(z,〃);

for(i=1;i<=row-2;i++)

{

printf(〃%d〃,i);

printf(〃\rT);

for(i=1;i<=row-2;i++)

(

printf(z,%d〃,i);

for(j=1;j<=col-2;j++)

printf(z,%c〃,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]=='O')

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*'O';//计

算周围八个位置雷的个数

}

〃对某一点进行扩展

voidfun(chararr[ROWS][COLS],char

show[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+l][y+1]=='*')

{

fun(arr,show,x+1,y+1);

)

else

show[x][y]=get_boom(arr,x,y)+'O';〃如果周

围有雷则显示雷的个数

voidgame()

chararr[R0WS][COLS]={0};

charshow[ROWS][COLS]={0};

intwin=0;

intx=0;

inty=0;

init_board(arr,'O',ROWS,COLS);

init_board(show,',ROWS,COLS);

set_boom(arr);

display(show,ROWS,COLS);

while(win!=MAX)〃判断是否排完雷

(

printf(〃请输入坐标:〃);

scanf(z,%d%dz,,&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(〃******L开始游戏0.退出游戏

*******\n〃);

printfI”******************************");

voidtest()

intinput=0;

srand((unsignedint)time(NULL));

do

(

menu();

printf(〃请选择:〃);

scanf&input);

switch(input)

{

case1:

game();

break;

case0:

break;

default:

printf(〃选择错误,请重新选择!〃);

break;

)

}while(input);

intmain()

test();

system("pause");

return0;

四、实践体会

在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写

一个比较复杂的程序系统。在为期两个周的时间里,我们明显的感觉到了

在实践过程中所面对的与平时上课时所面临的有着很大区别,我们在实践

时面对的明显要比在课堂上所面对的更要复杂,困难。但这并没有阻挡我

们前进的脚步,我们明天都在不停的学习更多关于C语言方面的知识,为

最后程序的完成做好准备。好在同组的搭档们精诚合作,分工明确,有问

题共同解决,攻克了C语言实训的复杂程序。在这次实训中,我在C语言

方面有了很大的进步,并不在是最开始什么都不知道的懵懵懂懂的少年了,

在这一方面有了很大的进步,有最开始的时候什么都不知道也开始在慢慢

的成长,也在不知不觉得进步,有开始的不懂什么是编程,到现在的也会

开始写一些简单地小程序,对于我来说,也是一种进步,每天都在尝试编

程,虽然也会失败,但也会一次次地在失败中慢慢的吸取经验,也会有成

功的一次。

还是这次实训,最令人激动的就是合作做项目,最开始的时候,由于

彼此之间大家也并不的熟系,所以对大家之间的合作也并没有太大的交流,

但慢慢地随着问题的不停探讨,我

温馨提示

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

评论

0/150

提交评论