C语言扫雷源代码

时间:2019-05-11 22:55:30下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言扫雷源代码》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言扫雷源代码》。

第一篇:C语言扫雷源代码

C语言扫雷源代码.txt如果背叛是一种勇气,那么接受背叛则需要更大的勇气。爱情是块砖,婚姻是座山。砖不在多,有一块就灵;山不在高,守一生就行。#include #include #include #include

/*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define RIGHTPRESS 0xff02 #define RIGHTCLICK 0xff20 #define RIGHTDRAG 0xff2a #define MIDDLEPRESS 0xff04 #define MIDDLECLICK 0xff40 #define MIDDLEDRAG 0xff4c #define MOUSEMOVE 0xff08 struct { int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/ int roundnum;/*统计格子周围有多少雷*/ int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/ }Mine[10][10];

int gameAGAIN=0;/*是否重来的变量*/ int gamePLAY=0;/*是否是第一次玩游戏的标志*/ int mineNUM;/*统计处理过的格子数*/ char randmineNUM[3];/*显示数字的字符串*/

int Keystate;int MouseExist;int MouseButton;int MouseX;int MouseY;int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16];

void MouseMath()/*计算鼠标的样子*/ {int i,j,jj,k;long UpNum[16]={ 0x3fff,0x1fff,0x0fff,0x07ff, 0x03ff,0x01ff,0x00ff,0x007f, 0x003f,0x00ff,0x01ff,0x10ff, 0x30ff,0xf87f,0xf87f,0xfc3f };long DownNum[16]={ 0x0000,0x7c00,0x6000,0x7000, 0x7800,0x7c00,0x7e00,0x7f00, 0x7f80,0x7e00,0x7c00,0x4600, 0x0600,0x0300,0x0300,0x0180 };for(i=0;i<16;i++){ j=jj=15;while(UpNum[i]!=0){ up[i][j]=UpNum[i]%2;j--;UpNum[i]/=2;} while(DownNum[i]!=0){ down[i][jj--]=DownNum[i]%2;DownNum[i]/=2;} for(k=j;k>=0;k--)up[i][k]=0;for(k=jj;k>=0;k--)down[i][k]=0;for(k=0;k<16;k++)/*四种组合方式*/ { if(up[i][k]==0&&down[i][k]==0)mouse_draw[i][k]=1;else if(up[i][k]==0&&down[i][k]==1)mouse_draw[i][k]=2;else if(up[i][k]==1&&down[i][k]==0)mouse_draw[i][k]=3;else mouse_draw[i][k]=4;} } mouse_draw[1][2]=4;/*特殊点*/ }

void Init(void);/*图形驱动*/ void MouseOn(int,int);/*鼠标光标显示*/ void MouseOff(void);/*鼠标光标隐藏*/ void MouseSetXY(int,int);/*设置当前位置*/ int LeftPress(void);/*左键按下*/ int RightPress(void);/*鼠标右键按下*/ int MiddlePress();void MouseGetXY(void);/*得到当前位置*/ int MouseStatus();void Control(void);/*游戏开始,重新,关闭*/ void GameBegain(void);/*游戏开始画面*/ void DrawSmile(void);/*画笑脸*/ void DrawRedflag(int,int);/*显示红旗*/ void DrawEmpty(int,int,int,int);/*两种空格子的显示*/ void GameOver(void);/*游戏结束*/ void GameWin(void);/*显示胜利*/ int MineStatistics(int,int);/*统计每个格子周围的雷数*/ int ShowWhite(int,int);/*显示无雷区的空白部分*/ void GamePlay(void);/*游戏过程*/ void Close(void);/*图形关闭*/

void main(void){ Init();MouseMath();//MouseOn(MouseX,MouseY);Control();Close();}

void Init(void)/*图形开始*/ { int gd=DETECT,gm;registerbgidriver(EGAVGA_driver);initgraph(&gd,&gm,“");} void Close(void)/*图形关闭*/ { closegraph();} /*鼠标光标显示*/ void MouseOn(int x,int y){ int i,j;int color;

for(i=0;i<16;i++)/*画鼠标*/ { for(j=0;j<16;j++){ pixel_save[i][j]=getpixel(x+j,y+i);/*保存原来的颜色*/ if(mouse_draw[i][j]==1)putpixel(x+j,y+i,0);else if(mouse_draw[i][j]==2)putpixel(x+j,y+i,15);} } } /*隐藏鼠标*/ void MouseOff(){ int i,j,x,y,color;x=MouseX;y=MouseY;for(i=0;i<16;i++)/*原位置异或消去*/ for(j=0;j<16;j++){ if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)continue;color=getpixel(x+j,y+i);putpixel(x+j,y+i,color^color);putpixel(x+j,y+i,pixel_save[i][j]);} } void MouseSetXY(int x,int y)/*设置当前位置*/ { _CX=x;_DX=y;_AX=0x04;geninterrupt(0x33);} int LeftPress(void)/*鼠标左键按下*/ { _AX=0x03;geninterrupt(0x33);return(_BX&1);} int RightPress(void)/*鼠标右键按下*/ { _AX=0x03;geninterrupt(0x33);return(_BX&2);} /*是否按下中键

返回值同上 */ int MiddlePress(){ _AX=0x03;geninterrupt(0x33);return(_BX&4);} void MouseGetXY(void)/*得到当前位置*/ { _AX=0x03;geninterrupt(0x33);MouseX=_CX;MouseY=_DX;} /*鼠标按键情况,返回0表示只移动,返回1表示左右键同时按下,2表示只按了左键,3表示只按了右键*/

int MouseStatus(){ int x,y;int status;int press=0;

int i,j,color;status=0;/*默认鼠标没有移动*/

x=MouseX;y=MouseY;

while(x==MouseX&&y==MouseY&&status==0&&press==0){ if(LeftPress()&&RightPress())press=1;else if(LeftPress())press=2;else if(RightPress())press=3;MouseGetXY();if(MouseX!=x||MouseY!=y)status=1;} if(status)/*移动情况才重新显示鼠标*/ { for(i=0;i<16;i++)/*原位置异或消去*/ for(j=0;j<16;j++){ if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)continue;color=getpixel(x+j,y+i);putpixel(x+j,y+i,color^color);putpixel(x+j,y+i,pixel_save[i][j]);} MouseOn(MouseX,MouseY);/*新位置显示*/ } if(press!=0)/*有按键的情况*/ return press;return 0;/*只移动的情况*/ }

void Control(void)/*游戏开始,重新,关闭*/ { int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/ while(1){ MouseStatus();if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/ {

GameBegain();/*游戏初始画面*/ GamePlay();/*具体游戏*/ if(gameAGAIN==1)/*游戏中重新开始*/ { gameAGAIN=0;continue;} }

gameFLAG=0;if(LeftPress())/*判断是否重新开始*/ { if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85){ gameFLAG=1;continue;} } if(kbhit())/*判断是否按键退出*/ break;} } void DrawSmile(void)/*画笑脸*/ { MouseOff();setfillstyle(SOLID_FILL,YELLOW);fillellipse(290,75,10,10);setcolor(YELLOW);setfillstyle(SOLID_FILL,BLACK);/*眼睛*/ fillellipse(285,75,2,2);fillellipse(295,75,2,2);setcolor(BLACK);/*嘴巴*/ bar(287,80,293,81);MouseGetXY();MouseOn(MouseX,MouseY);} void DrawRedflag(int i,int j)/*显示红旗*/ { MouseOff();setcolor(7);setfillstyle(SOLID_FILL,RED);bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);setcolor(BLACK);line(198+j*20,95+i*20,198+j*20,95+i*20+10);MouseGetXY();MouseOn(MouseX,MouseY);} void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/ { MouseOff();setcolor(color);setfillstyle(SOLID_FILL,color);if(mode==0)/*没有单击过的大格子*/ bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);else if(mode==1)/*单击过后显示空白的小格子*/ bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);MouseGetXY();MouseOn(MouseX,MouseY);} void GameBegain(void)/*游戏开始画面*/ { int i,j;cleardevice();if(gamePLAY!=1){ MouseSetXY(290,70);/*鼠标一开始的位置,并作为它的初始坐标*/ MouseX=290;MouseY=70;} gamePLAY=1;/*下次按重新开始的话鼠标不重新初始化*/ mineNUM=0;setfillstyle(SOLID_FILL,7);bar(190,60,390,290);for(i=0;i<10;i++)/*画格子*/ for(j=0;j<10;j++)DrawEmpty(i,j,0,8);setcolor(7);DrawSmile();/*画脸*/ randomize();for(i=0;i<10;i++)/*100个格子随机赋值有没有地雷*/ for(j=0;j<10;j++){ Mine[i][j].num=random(8);/*如果随机数的结果是1表示这个格子有地雷*/ if(Mine[i][j].num==1)mineNUM++;/*现有雷数加1*/ else Mine[i][j].num=2;Mine[i][j].flag=0;/*表示没红旗标志*/ } sprintf(randmineNUM,”%d“,mineNUM);/*显示这次总共有多少雷数*/ setcolor(1);settextstyle(0,0,2);outtextxy(210,70,randmineNUM);mineNUM=100-mineNUM;/*变量取空白格数量*/ } void GameOver(void)/*游戏结束画面*/ { int i,j;setcolor(0);for(i=0;i<10;i++)for(j=0;j<10;j++)if(Mine[i][j].num==1)/*显示所有的地雷*/ {

DrawEmpty(i,j,0,RED);setfillstyle(SOLID_FILL,BLACK);MouseOff();fillellipse(200+j*20,100+i*20,7,7);

MouseGetXY();MouseOn(MouseX,MouseY);} } void GameWin(void)/*显示胜利*/ { setcolor(11);settextstyle(0,0,2);outtextxy(230,30,”YOU WIN!“);} int MineStatistics(int i,int j)/*统计每个格子周围的雷数*/ { int nNUM=0;if(i==0&&j==0)/*左上角格子的统计*/ { if(Mine[0][1].num==1)nNUM++;if(Mine[1][0].num==1)nNUM++;if(Mine[1][1].num==1)nNUM++;} else if(i==0&&j==9)/*右上角格子的统计*/ { if(Mine[0][8].num==1)nNUM++;if(Mine[1][9].num==1)nNUM++;if(Mine[1][8].num==1)nNUM++;} else if(i==9&&j==0)/*左下角格子的统计*/ { if(Mine[8][0].num==1)nNUM++;if(Mine[9][1].num==1)nNUM++;if(Mine[8][1].num==1)nNUM++;} else if(i==9&&j==9)/*右下角格子的统计*/ { if(Mine[9][8].num==1)nNUM++;if(Mine[8][9].num==1)nNUM++;if(Mine[8][8].num==1)nNUM++;} else if(j==0)/*左边第一列格子的统计*/ { if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j+1].num==1)nNUM++;if(Mine[i+1][j+1].num==1)nNUM++;} else if(j==9)/*右边第一列格子的统计*/ { if(Mine[i][j-1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j-1].num==1)nNUM++;if(Mine[i+1][j-1].num==1)nNUM++;} else if(i==0)/*第一行格子的统计*/ { if(Mine[i+1][j].num==1)nNUM++;if(Mine[i][j-1].num==1)nNUM++;if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j-1].num==1)nNUM++;if(Mine[i+1][j+1].num==1)nNUM++;} else if(i==9)/*最后一行格子的统计*/ { if(Mine[i-1][j].num==1)nNUM++;if(Mine[i][j-1].num==1)nNUM++;if(Mine[i][j+1].num==1)nNUM++;if(Mine[i-1][j-1].num==1)nNUM++;if(Mine[i-1][j+1].num==1)nNUM++;} else/*普通格子的统计*/ { if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j+1].num==1)nNUM++;if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j+1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i+1][j-1].num==1)nNUM++;if(Mine[i][j-1].num==1)nNUM++;if(Mine[i-1][j-1].num==1)nNUM++;} return(nNUM);/*把格子周围一共有多少雷数的统计结果返回*/ } int ShowWhite(int i,int j)/*显示无雷区的空白部分*/ { if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就不对该格进行任何判断*/ return;mineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/ if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/ { DrawEmpty(i,j,1,7);

Mine[i][j].num=0;} else if(Mine[i][j].roundnum!=0)/*输出雷数*/ { DrawEmpty(i,j,0,8);sprintf(randmineNUM,”%d“,Mine[i][j].roundnum);setcolor(RED);MouseOff();outtextxy(195+j*20,95+i*20,randmineNUM);MouseGetXY();MouseOn(MouseX,MouseY);Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/ return;} /*8个方向递归显示所有的空白格子*/ if(i!=0&&Mine[i-1][j].num!=1)ShowWhite(i-1,j);if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)ShowWhite(i-1,j+1);if(j!=9&&Mine[i][j+1].num!=1)ShowWhite(i,j+1);if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)ShowWhite(i+1,j+1);if(i!=9&&Mine[i+1][j].num!=1)ShowWhite(i+1,j);if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)ShowWhite(i+1,j-1);if(j!=0&&Mine[i][j-1].num!=1)ShowWhite(i,j-1);if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)ShowWhite(i-1,j-1);} void GamePlay(void)/*游戏过程*/ { int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/ for(i=0;i<10;i++)for(j=0;j<10;j++)Mine[i][j].roundnum=MineStatistics(i,j);/*统计每个格子周围有多少地雷*/ while(!kbhit()){ MouseStatus();if(LeftPress())/*鼠标左键盘按下*/ {

if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/*重新来*/ {

gameAGAIN=1;break;} if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/ { j=(MouseX-190)/20;/*x坐标*/ i=(MouseY-90)/20;/*y坐标*/ if(Mine[i][j].flag==1)/*如果格子有红旗则左键无效*/ continue;if(Mine[i][j].num!=0)/*如果格子没有处理过*/ { if(Mine[i][j].num==1)/*鼠标按下的格子是地雷*/ {

GameOver();/*游戏失败*/ break;} else/*鼠标按下的格子不是地雷*/ {

Num=MineStatistics(i,j);if(Num==0)/*周围没地雷就用递归算法来显示空白格子*/ ShowWhite(i,j);else/*按下格子周围有地雷*/ { MouseOff();sprintf(randmineNUM,”%d",Num);/*输出当前格子周围的雷数*/ setcolor(RED);outtextxy(195+j*20,95+i*20,randmineNUM);mineNUM--;

MouseGetXY();MouseOn(MouseX,MouseY);}

Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/ if(mineNUM<1)/*胜利了*/ { GameWin();break;} } } } } if(RightPress())/*鼠标右键键盘按下*/ {

if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/ { j=(MouseX-190)/20;/*x坐标*/ i=(MouseY-90)/20;/*y坐标*/

if(Mine[i][j].flag==0&&Mine[i][j].num!=0)/*本来没红旗现在显示红旗*/ { DrawRedflag(i,j);Mine[i][j].flag=1;} else if(Mine[i][j].flag==1)/*有红旗标志再按右键就红旗消失*/ { DrawEmpty(i,j,0,8);Mine[i][j].flag=0;} } delay(1000000);delay(1000000);delay(1000000);delay(1000000);delay(1000000);} } }

第二篇:C语言程序设计扫雷游戏

C语言程序设计报告

题目: 扫雷小游戏设计

电子通信与物理学院 日期:2018年7月 12 日

指导教师评语

目录

1.课程设计内容...........................................................................................................1 2.课程设计目的...........................................................................................................1 3.背景知识..................................................................................................................1 4.工具/准备工作..........................................................................................................3 5.设计步骤、方法.....................................................................................................3

5.1........................................................................................................................3 5.2定义全局变量..................................................................................................4 5.3挖雷部分函数的分析.......................................................................................5 6.设计结果及分析.....................................................................................................11 7.设计结论...............................................................................................................16 8.参考文献...............................................................................................................17 附录...........................................................................................................................17

1.课程设计内容

在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。

扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用C-free编写了与它功能相仿的挖地雷游戏,寓学于乐。

即:设计一个功能与Windows中的挖雷游戏相同的小游戏。

2.课程设计目的

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

2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。4.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。

5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。

6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核

3.背景知识

游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于 右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为9*9个方块10个雷,中级为16*16个方块40个雷,高级为16*30个方块99个雷,自定义级别可以自己设定雷区大小和雷数,但是雷区大小不能超过24*30),玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。

游戏的基本操作包括左键单击(Left Click)、右键单击(Right Click)、双击(Chording)三种。其中左键用于打开安全的格子,推进游戏进度;右键用于标记地雷,以辅助判断,或为接下来的双击做准备;双击在一个数字周围的地雷标记完时,相当于对数字周围未打开的方块均进行一次左键单击操作:

左键单击:在判断出不是雷的方块上按下左键,可以打开该方块。如果方块上出现数字,则该数字表示其周围3×3区域中的地雷数(一般为8个格子,对于边块为5个格子,对于角块为3个格子。所以扫雷中最大的数字为8);如果方块上为空(相当于0),则可以递归地打开与空相邻的方块;如果不幸触雷,则游戏结束。

双击:同时按下左键和右键完成双击。当双击位置周围已标记雷数等于该位置数字时操作有效,相当于对该数字周围未打开的方块均进行一次左键单击操作。地雷未标记完全时使用双击无效。若数字周围有标错的地雷,则游戏结束,标错的地雷上会显示一个“ ×”(见下图)

扫雷的设计原理: 扫雷游戏分为几个步骤: 第一步,使用二维数组表示地图; 第二步,随机生成几个地雷;

第三步,点击方格的反应,计算每个非雷区方格点开后的数字; 第四步,当方格数字为0的情况; 第五步,当方格为地雷的情况。

第一步地图的大小和第二步地雷的数量都应该是程序中给定的,或者玩家输入的。这个是多少自己决定吧。第三步,计算非雷区方格点开后的数字就把这个方格在二维数组中周围八个方向的方格是否是地雷都检查一遍,一定要注意不要越出数组边界。这个数字可以在游戏初始化时全都计算好,也可以在玩家点击的时候再计算。点 击非雷区方格,显示数字,这个方格标记为“已点过”。第四步,当方格数字为0时,这里要用到递归调用,就是让程序自动“点击”这个数字为0方格周围的八个方格,然后再看结果,如果不是0,就停止,如果是0,依然递归调用,直到没有0为止,或者直到点遍所有方格为止,一定要注意不要越出数组边界。第五步,很简单,宣布玩家死亡就可以了。

4.准备工作

查阅相关资料,了解扫雷的的玩法,了解扫雷的设计思想方法。借鉴他人写过的程序,从中找到突破口。从程序中了解需要的各种函数准备,再进一步获悉该函数的功能与使用方法。

对自己要设计的挖地雷游戏进行功能分析,大致如下:

总体游戏过程分析:在屏幕上显示一个游戏界面,雷区范围内预先埋设了一定数量的随机分布的地雷(用数字9代替地雷);玩家通过从键盘中输入(行数X,列数Y)↙进行点击;若能点中所有非雷区,则游戏胜利;否则踩雷,游戏失败。简易版扫雷游戏要具备以下功能:

1)开局:首先选择游戏等级,然后生成不同等级的雷区界面。游戏等级分 为三级:各等级行列数为———:简单:10×

10、普通:15×

15、困难:20×20;雷区每个*号下面或埋藏有1个地雷,或者没有地雷;

2)挖雷:从键盘中输入(行数X,列数Y),并按回车键,可挖开它;若所揭方块下有9,则踩雷,此时所有含地雷的块都出现9,该局游戏失败;如果方块上出现数字,它代表 在它周围的8个方块中共有多少颗地雷;

3)输入:通过键盘输入相关指示信息; 4)输出:提示游戏失败,是否继续再来一遍;

5.设计步骤、方法 5.1主函数第一步,写出主程序的基本框架,确定各子模块名字和参数。具体的函数流程如图5-3 所示:

定义使用到的常数、全局变量、函数原型说明。然后初始化图形系统,调用游戏控制函数,游戏只接受键盘,通过鼠标结束游戏,关闭系统,退出游戏。

主控模块的各子模块说明:

void InitialValue_game()用于棋盘初始化; InitialMine_game()用于棋盘的随机布雷; void print_game()用于打印棋盘; int judge_game()用于判断游戏是否结束; int openmap()用于点开地图;

5.2定义全局变量

#include #include “stdlib.h” #include“time.h” # define s 20 int x;/*棋盘行数*/ int y;/*棋盘列数*/ int b;/*选择游戏难度 1简单2普通3困难4 自定义*/ int h;/*雷的个数*/ struct Games g;struct Games { int game_int[s][s];char game_char[s][s];};使用结构体数组来完成棋盘的定义,引用时间头文件来完成对随机布雷的随时性。

5.3挖雷部分函数的分析

void InitialValue_game(struct Games *g){ int i,j;for(i=0;i

InitialMine_game(struct Games *g){ 5 int i,j,next1,next2;int sum=0;srand((unsigned)time(NULL));while(1){ i=rand()%x;j=rand()%y;if((*g).game_int[i][j]==9)continue;(*g).game_int[i][j]=9;++sum;for(next1=-1;next1<2;next1++){ for(next2=-1;next2<2;next2++){ if(-1

void print_game(struct Games *g,int Logo){ int i,j;int a[s];for(i=0;i

int judge_game(struct Games *g){ int sum=0;int i,j;for(i=0;i

运行第一步:

按ENTER键进入: 11

选择游戏难度(简单、普通、困难、任意),按ENTER键进入: 简单难度: 普通难度:

困难难度:

任意难度:

游戏界面,开始从键盘输入数字,格式为(行数X,列数Y),点击Enter键:

游戏结束页面: 7.设计结论

一学期结束了,对C语言也有了一些认识,不过自我感觉学得不太好,好在还是学到了知识: 了解了C的发展以及编程的基本步骤,学会了Printf输出语句,C语言的运算,知道了有哪几种数据类型,还有我觉得经常用的if语句,if--eles语句,for循环,while 语句,do-while语句等等,基本会用数组和指针,还有字符串的处理,对了还有才学的结构体。

还有许多知识点,不一罗列了,总之C语言要学的东西太多了,听大三的都说C很简单,但我并不认为他像人们说的那样简单,C是最基础的,基础不代表简单,也可能是我没学好才有这样的感受。

在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。

8.参考文献

郭翠英主编的《C语言课程设计实例精编》; 张芳妮 吕波 译《C语言编程常见问题解答》; 谭浩强《C程序设计题解与上机指导(第二版)》。伍俊良.VB课程设计与系统开发案例[M].北京

附录:

#include #include “stdlib.h” 17 #include“time.h” # define s 20 int x;/*棋盘行数*/ int y;/*棋盘列数*/ int b;/*选择游戏难度 1简单2普通3困难4 自定义*/ int h;/*雷的个数*/ struct Games g;struct Games { int game_int[s][s];char game_char[s][s];};

main(){ int i,j;/*定义i,j变量*/ int NO;int begin=1;int h;/*确定雷的个数*/ while(begin){ printf(“nnnnnnn” “ttt=================================n” “ttt 欢迎进入扫雷 nnn” “ttt 按回车键继续 n” “ttt=================================n” “ttt n”);getchar();/*游戏开始界面*/ system(“cls”);printf(“ nnnnnnnnn”);printf(“ 请选择游戏难度:nn”);printf(“ 1简单难度nn”);printf(“ 2普通难度nn”);printf(“ 3困难难度nn”);printf(“ 4自定义难度nn”);scanf(“%d”,&h);getchar();/*确定游戏难度*/ if(0

void InitialValue_game(struct Games *g){ int i,j;for(i=0;i

InitialMine_game(struct Games *g){ int i,j,next1,next2;int sum=0;srand((unsigned)time(NULL));while(1){ i=rand()%x;j=rand()%y;if((*g).game_int[i][j]==9)continue;(*g).game_int[i][j]=9;++sum;for(next1=-1;next1<2;next1++){ for(next2=-1;next2<2;next2++){ if(-1

void print_game(struct Games *g,int Logo){ int i,j;int a[s];for(i=0;i

int judge_game(struct Games *g){ int sum=0;int i,j;for(i=0;i

第三篇:c语言一朵花源代码

/////////////////////////////////////////////////// // 程序名称:一束漂亮的花

// 编译环境:Visual C++ 6.0 / 2010,EasyX 2011惊蛰版 // 作

者:yangw80 // 最后修改:2011-9-29 // #include #include #include

#define PI 3.14159265

// 画 花朵

void flower(int x, int y, COLORREF c){ int x1, y1, x2, y2;int d = 15;double e;setcolor(c);for(double a = 0;a < 2 * PI;a += PI / 360){ e = d *(1 + sin(a * 5));x1 = int(x + e * cos(a));y1 = int(y + e * sin(a));x2 = int(x + e * cos(a + PI / 5));y2 = int(y + e * sin(a + PI / 5));line(x1, y1, x2, y2);}

// 画 蝴蝶结

void tie(int x, int y, COLORREF c){ int x1, y1, x2, y2;} int d = 80;double e;setcolor(c);for(double a = 0;a < 2 * PI;a += PI / 360){ e = d *(1 + sin(a * 4));x1 = int(x + e * cos(a));y1 = int(y + e * sin(a)/ 2);x2 = int(x + e * cos(a + PI / 9));y2 = int(y + e * sin(a + PI / 9)/ 4.5);line(x1, y1, x2, y2);}

// 主函数 void main(){

// 画花朵

flower(320, 160, RED);flower(200, 120, YELLOW);flower(150, 140, LIGHTRED);flower(430, 176, RGB(255, 127, 0));flower(370, 110, RGB(239, 179, 52));flower(250, 72, RGB(235, 95, 186));initgraph(640, 480);

// 画枝干

setcolor(GREEN);line(189, 372, 180, 400);line(310, 160, 325, 68);line(310, 160, 187, 374);line(150, 140, 189, 374);line(430, 176, 190, 374);line(370, 110, 187, 374);line(250, 72, 189, 372);line(253, 192, 190, 374);line(189, 372, 187, 400);line(189, 372, 182, 400);line(189, 372, 200, 120);}

} flower(325, 68, RGB(228, 119, 98));flower(253, 190, RGB(247, 169, 117));// 画蝴蝶结

tie(195, 354, LIGHTMAGENTA);

// 按任意键退出 getch();closegraph();

第四篇:C语言程序设计扫雷游戏实验报告

中南大学

程序设计基础实践报告

学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完成时间 2014.1 题 目 设计一个和window系统类似的小游戏【挖地雷】

《计算机程序设计实践》403591717.docx 目录

1.课程设计内容.............................................................................................3 2.课程设计目的.............................................................................................3 3.背景知识....................................................................................................3 4.工具/准备工作............................................................................................5 5.设计步骤、方法.........................................................................................5

5.1.步骤1:步骤名称(二级标题).......................................................错误!未定义书签。

步骤1.1:步骤名称(三级标题)..............................................................................5 5.1.1.5.2.5.3.步骤2:步骤名称..........................................................................错误!未定义书签。步骤n:步骤名称..........................................................................错误!未定义书签。

6.设计结果及分析.........................................................................................5 7.设计结论..................................................................................................15 8.问题及心得体会.......................................................................................16 9.对本设计过程及方法、手段的改进建议....................................................17 10.参考文献..................................................................................................17

《计算机程序设计实践》403591717.docx

printf(“请输入棋盘行列数(小于20且用逗号隔开):”);

scanf(“%d,%d”,&x,&y);

getchar();

printf(“请输入雷的个数:”);

scanf(“%d”,&b);

getchar();

break;

}

break;

}

else

{

printf(“输入错误请重新输n”);

}

} while(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

{

switch(openmap(&g,i-1,j-1))

{

case 1:

print_game(&g,1);

printf(“游戏结束!按回车键再来一局n”);

《计算机程序设计实践》403591717.docx

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')begin=1;

else begin=0;

NO=0;

break;

}

else print_game(&g,2);NO=1;break;

default:break;

}

}

else

{

printf(“你输入错误!请重新输入n”);

} } } }

第五篇:C语言程序设计扫雷游戏实验报告

中南大学

程序设计基础实践报告

学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完成时间 2014.1 题 目 设计一个和window系统类似的小游戏【挖地雷】

《计算机程序设计实践》错误!未指定书签。

目录

1.课程设计内容.............................................................................................3 2.课程设计目的.............................................................................................3 3.背景知识....................................................................................................3 4.工具/准备工作............................................................................................5 5.设计步骤、方法.........................................................................................5

5.1.步骤1:步骤名称(二级标题).......................................................错误!未定义书签。

步骤1.1:步骤名称(三级标题)..............................................................................5 5.1.1.5.2.5.3.步骤2:步骤名称..........................................................................错误!未定义书签。步骤n:步骤名称..........................................................................错误!未定义书签。

6.设计结果及分析.........................................................................................5 7.设计结论..................................................................................................15 8.问题及心得体会.......................................................................................16 9.对本设计过程及方法、手段的改进建议....................................................17 10.参考文献..................................................................................................17

《计算机程序设计实践》错误!未指定书签。

case 4:

system(“cls”);

printf(“请输入棋盘行列数(小于20且用逗号隔开):”);

scanf(“%d,%d”,&x,&y);

getchar();

printf(“请输入雷的个数:”);

scanf(“%d”,&b);

getchar();

break;

}

break;

}

else

{

printf(“输入错误请重新输n”);

}

} while(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

{

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')begin=1;

else begin=0;

NO=0;

break;

}

else print_game(&g,2);NO=1;break;

default:break;

}

}

else

{

printf(“你输入错误!请重新输入n”);

} } } }

下载C语言扫雷源代码word格式文档
下载C语言扫雷源代码.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言课程设计火车票系统源代码

    #include #include #include //火车票结构体类型// typedef struct Node {int num; //编号// char name[20]; //起点和终点// char time[5]; //出发时间// int price; /......

    数据结构实验报告(报告+C语言源代码)

    目录 前言 ..................................................................................................................2 概要设计 ...............................

    c语言简单的计算器源代码(合集5篇)

    1.简单的计算器 #include void main { float calculator(float a,float b,char c); float a,b,d;char c; printf("请输入加数和运算符号n"); scanf("%f,%f,%c",&a,&b,&c......

    C语言课程设计——飞机订票系统源代码

    #include //标准输入、输出头文件 #include //包含字符串函数处理头文件 #include //包含access函数的头文件 #define N 9999 //定义最多的航班数 #define PRINT "%dtt......

    C语言机票订票管理系统源代码

    #include //标准输入、输出头文件 #include //包含字符串函数处理头文件 #include //包含access函数的头文件 #include #include #include #include #define N 9999 //定......

    c语言实现机票管理系统源代码

    /*1、用户和管理员及航班信息请以英文字母或数字输入*/ /*2、管理员账户为:boss,密码为:123。保存在txt文件中,需要修改请于程序中修改*/ /*3、部分文件读写为二进制读写,所以打......

    c语言课程设计-文件加密解密(含源代码)

    C 语 言 课 程 设 计 实 验 报 告 实验名称:文件加密解密 院系:软件学院 学号: 年9月3日—9月17日 日期:2012 一:设计题目 1:设计图形用户界面。 2:对文件进行加密并对加密文件进......

    c语言课程设计-学籍管理系统(含源代码)

    课 程 设 计 课程设计名称: C语言程序设计 题 目:学籍管理系统 学 生 姓 名: 学生学号 : 学 院(系): 软件学院 专 业 班 级: 112021 指 导 教 师: 设计时间: 2012 年 9 月 日......