文档库 最新最全的文档下载
当前位置:文档库 › 北邮 C语言 原创 扫雷程序

北邮 C语言 原创 扫雷程序

北邮 C语言 原创 扫雷程序
北邮 C语言 原创 扫雷程序

#include

#include

#include

void count(int x,int y); //函数声明用于计雷数

void display_1(int x,int y); //函数声明用于翻牌的显示

void deal(int x,int y); //函数声明用于将bomb_3选中的坐标周围的数字赋值给display void printf_1(); //用于输出数组

void printf_2(); //用于输出数组

void win(); //函数声明用于判断输赢

void clrscr(); //清屏函数

int bomb[10][10]={0}; //设置放雷的矩阵2 用于幕后处理雷

int bomb_2[10][10]={0};//设置矩阵3 用于标记小红旗(用‘!’号表示)

int bomb_3[10][10]={0};//设置矩阵4 用于放置数字和雷用于比较将会被改动

int num[10][10]={0};//设置矩阵5 用于标记每个格子的状态

int rnum[10][10]={0};//设置矩阵6 用于标记每个格子周围有多少雷数并且不改动

char display[8][8]={

{'*','*','*','*','*','*','*','*'},

{'*','*','*','*','*','*','*','*'},

{'*','*','*','*','*','*','*','*'},

{'*','*','*','*','*','*','*','*'},

{'*','*','*','*','*','*','*','*'},

{'*','*','*','*','*','*','*','*'},

{'*','*','*','*','*','*','*','*'},

{'*','*','*','*','*','*','*','*'}, //设置方阵1 8*8 用于显示

};

int i,j,e,f,n,h,k,l,m,o,p,q,r,s;

int r=0;

void main(void)

{

printf("------------------------------------世纪大扫雷---------------------------------\n");

printf("=========================直接输入坐标,按回车表示翻开==========================\n");

printf("======================输入坐标后直接加0表示标记(如:2,20)======================\n");

printf("==============================='!'表示小红旗==================================\n");

printf("=========绝对原创!请支持原创!老师的支持就是我们最大的鼓励!=====================\n");

printf("\n");

for(i=0;i<8;i++)

{

for (j=0;j<8;j++)

{

printf(" %c",display[i][j]);

}

printf("\n");

}

srand( (unsigned)time( NULL ) );

while(m<=5)

{

m=(rand()%7)+10; //随机设置雷的数目

}

srand( (unsigned)time( NULL ) );

for(n=0;n<=m;n++)

{

e=(rand()%7)+2;

f=(rand()%7)+2; //随机取选择不大于m个两个数作为‘雷’的坐标,并且1表示雷赋值给生成的坐标

bomb[e][f]='n';

}

printf("请注意:此局雷的个数为%d个\n",m); //输出雷的个数提示玩家

for(h=0;h<10;h++)

{

for(k=0;k<10;k++)

{

switch(bomb[h][k])

{

case'n' :break;

default:bomb[h][k]=0;

}

} //只要bomb[][]!='n' 就等于0 整出一个新的矩阵2

}

printf("\n");

for(h=0;h<10;h++)

{

for(k=0;k<10;k++)

{

bomb_3[h][k]=bomb[h][k];

} //将bomb赋值给bomb_3 以便数字的处理

}

for(h=0;h<10;h++)

{

for(k=0;k<10;k++)

{

count(h,k); //调用count函数

}

}

for(i=0;i<10;i++)

{

for(j=0;j<10;j++)

{

bomb_2[i][j]='1'; //bomb_2用于标记初始全部为‘1’(‘1’是随便取得一个字符)

}

}

for(i=0;i<10;i++)

{

for (j=0;j<10;j++)

{

if(bomb[i][j]=='n')

{num[i][j]=1;}

if(bomb[i][j]==0) //设置num数组用于记录每个格子的状态

{num[i][j]=2;}

}

}

printf("请输入坐标(横坐标后加0表示标记此坐标):"); //开始输入坐标进行游戏

r=time(NULL);

for(l=0;l<100;l++)

{

scanf("%d,%d",&o,&p);

if(p<10)

{

switch(bomb_3[o][p])

{

case'n':clrscr();

printf("\n真遗憾!!你输了*~*\n\n");

s=time(NULL);

printf_1();

printf("您玩此盘游戏用时=%d秒\n",s-r);

printf("请再接再厉吧!!\n");return ;

default:clrscr();

display_1(o,p);

printf("\n请继续\n\n");

printf("\n请输入坐标(横坐标后加0表示标记此坐标):\n");

break; //设置一个函数,可以出现雷的数字让游戏继续设置bomb_2方阵

}

}

if(p>=10) //此时进入标记状态

{

p=p/10;

display[o-1][p-1]='!';

bomb_2[o][p]='n';

num[o][p]=o;//为了可以和bomb对比,

clrscr();

printf_2();

printf("\n请继续\n\n");

printf("\n请输入坐标(横坐标后加0表示标记此坐标):\n");

if(bomb[o][p]==bomb_2[o][p]) //bomb_2与同样只有雷的bomb比较

{

/*12.6*/r=r+1;

}

else{}

if(r==m)

{

s=time(NULL);

printf_1();

printf("游戏结束,恭喜玩家玩家赢了!\n");

printf("您玩此盘游戏用时=%d秒\n",s-r);

return ; //当标记的位置与实际雷的位置一致且数目也一致则玩家赢了

}

}

}

}

//函数部分

void count (int x,int y)

{

switch(bomb_3[x][y])

{

case'n':rnum[x][y]=9;break;

case 0:

q=0;

if(bomb_3[x-1][y-1]=='n')

{q=q+1;}else{}

if(bomb_3[x-1][y]=='n')

{q=q+1;}else{}

if(bomb_3[x-1][y+1]=='n')

{q=q+1;}else{}

if(bomb_3[x][y-1]=='n')

{q=q+1;}else{}

if(bomb_3[x][y+1]=='n')

{q=q+1;}else{} //处理bomb_3,

if(bomb_3[x+1][y]=='n')

{q=q+1;}else{}

if(bomb_3[x+1][y-1]=='n')

{q=q+1;}else{}

if(bomb_3[x+1][y+1]=='n')

{q=q+1;}else{}

bomb_3[x][y]=q;

rnum[x][y]=q;

break;

}

}

void printf_1()

{

int i;int j;

for(i=1;i<9;i++)

{

for (j=1;j<9;j++)

{

if(bomb[i][j]>100)

printf(" %c",bomb_3[i][j]);

if(bomb[i][j]<100)

printf(" %d",bomb_3[i][j]); //输出bomb_3

}

printf("\n");

}

}

void printf_2()

{

for(i=0;i<8;i++)

{

for (j=0;j<8;j++)

{

if(display[i][j]==42||display[i][j]=='!')

printf(" %c",display[i][j]);

if(display[i][j]==0||display[i][j]==0||display[i][j]==1||display[i][j]==2||display[ i][j]==3||display[i][j]==4

||display[i][j]==5||display[i][j]==6||display[i][j]==7||display[i][j]==8)

printf(" %d",display[i][j]);

}

printf("\n");

}

}

void display_1(int x,int y)

{ int i;

int j;

win();

display[x-1][y-1]=bomb_3[x][y];

deal(x,y); //调用deal函数,将bomb_[x][y]周围数字的函数赋值给display,以便输出有用的游戏信息

for(i=0;i<8;i++)

{

for (j=0;j<8;j++)

{

if(display[i][j]==42||display[i][j]=='!')

printf(" %c",display[i][j]);

if(display[i][j]==0||display[i][j]==1||display[i][j]==2||display[i][j]==3||

display[i][j]==4||display[i][j]==5||display[i][j]==6||display[i][j]==7||display[i][ j]==8)

printf(" %d",display[i][j]);

}

printf("\n");

}

}

void deal(int x,int y) //递归显示空白格子

{

if(num[x][y]==0)

{

return;

}

if(bomb[x][y]!='n'&&rnum[x][y]==0)

{

display[x-1][y-1]=bomb_3[x][y];

num[x][y]=0;

}

else

if(rnum[x][y]!=0)

{

display[x-1][y-1]=bomb_3[x][y];

num[x][y]=0;

return;

}

if(x!=1&&bomb[x-1][y]!='n')

{ deal(x-1,y);}

if(x!=1&&y!=8&&bomb[x-1][y+1]!='n')

{ deal(x-1,y+1);}

if(y!=8&&bomb[x][y+1]!='n')

{ deal(x,y+1);}

if(x!=8&&y!=8&&bomb[x+1][y+1]!='n')

{ deal(x+1,y+1);}

if(x!=8&&bomb[x+1][y]!='n')

{ deal(x+1,y);}

if(x!=8&&y!=1&&bomb[x+1][y-1]!='n')

{ deal(x+1,y-1);}

if(y!=1&&bomb[x][y-1]!='n')

{ deal(x,y-1);}

if(x!=1&&y!=1&&bomb[x-1][y-1]!='n')

{ deal(x-1,y-1);}

}

void win()

{

int s;

s=0;

for(i=0;i<8;i++)

{

for (j=0;j<8;j++)

{

if(display[i][j]=='*')

return;

if(display[i][j]!='*')

{

s=s+1;

if(s==64) //如果display内的所有元素(8*8=64个)都不再是*,证明全部的元素都被处理过了,游戏结束

{

printf("游戏结束!恭喜玩家赢了!\n");

s=time(NULL);

printf_1();

printf("您玩此盘游戏用时=%d秒\n",s-r);

}

}

}

}

}

void clrscr()

{

system("cls"); }

c语言课程设计——扫雷

扫雷设计 网101 陈超张艳 1.游戏规则 设计1010格区域,单击鼠标后,该格显示数字,则表示它周围8个空格内含有的地雷数,周围没有地雷的显示空白,则不能再单击了.如果是地雷,则游戏结束.如果判断是地雷,可以单击鼠标右键标出,显示红旗,要取消红旗标志则单击鼠标右键,当所有地雷都标出时,每个空格都处理过了,则胜利结束。 2.设计思路 扫雷程序主要用了一个10行10列的二维数组,数组的每个元素都是结构体类型,结构体中的num代表格内当前处于什么状态,值1表示有雷,值0表示已经变成空白格或者显示过数字,roundnum 统计每个格子周围有多少地雷,flag是鼠标右键的标志,如果flag为1表示格子显示红旗,这样鼠标左键点击在这个格子上无效。 在程序一开始统计好每个格子周围有多少地雷,然后当鼠标左键点击在没有地雷的格子上时进行两种判断,如果格子周围没有地雷,就在原来的格子位置显示空白格,然后用递归的方法同样判断周围的8个格子;如果格子周围有地雷,就在该空格显示具体的雷数。 在递归判断8个格子时,如果格子上有雷或者格子已经显示过雷数或者空白,以及格子上有红旗标志的话,就不再对格子进行任何判断。 具体函数流程图如下:

(1)main()主函数 定义使用到的常数,全局变量,函数原型说明。然后初始化图形系统,调用游戏控制函数,按任意键结束游戏,关闭图形系统,游戏结束。 (2)Control()游戏控制函数 调用函数GameBegain()显示游戏初始化界面,调用

GamePlay()函数具体实现游戏操作,该函数的返回值有可能有两种:一是正在玩中,提前结束游戏;一是玩完,要么失败,要么胜利。如果是前者,则重新开始游戏。如果是后者,则判断是否单击了笑脸,是则重新开始,否则结束程序。 (3)GameBegin()画初始界面 这个函数完成初始界面的设计以及随机生成地雷。初始界面的主要工作是确定图的位置和方格显示的位置。外边框的左上角为(190,60),右上角坐标为(390,290),显示笑脸和地雷数的区域为(190,60)~(390,90),每个方格的宽度和高度均为16. (4)DrawSmile()画笑脸 利用画椭圆的函数fillellipse()和bar()画笑脸,设置好填充模式。 (5)DrawEmpty()两种格子的显示 函数的参数为四个,确定格子的坐标i和j模式,颜色。格子有两种:一是可以单击的格子;一是已经显示空白的格子,比前一种格子小,通过参数模式和颜色来控制。 (6)DrawFlag()显示红旗 用单击鼠标右键表示起地雷,起雷后显示一个小红旗 (7)GamePlay()游戏控制 游戏过程主要是对鼠标按键的处理,集体算法实现如下: a.如果单击了鼠标左键则判断 如果单击了笑脸,则游戏重新开始‘

C语言实现扫雷游戏

C语言实现扫雷游戏运行环境:Windows系统,V isualC++6.0 _head.h #ifndef _HEAD_H_ #define _HEAD_H_ #define XX 40 #define YY 20 typedef struct { char boom; char flag; //默认为0,1代表标记为雷,2代表翻牌 char recursionMark; //默认为0,1代表已经被递归} Node; extern Node node[YY][XX]; void randomBoom(int width, int high, int num); void gotoxy(int x, int y); int clear_boom(int width, int high, int y, int x); void myPrint(int i); #endif clear_boom.c #include #include #include #include"_head.h" /* 功能:递归翻牌 参数:int width, high 雷区的宽度和高度 int y, x 要翻牌的坐标 返回值:int 返回 1 代表输了 */ int clear_boom(int width, int high, int y, int x) { node[y][x].recursionMark=1; node[y][x].flag=2; //本方格标记为翻牌 gotoxy(2*x, y);

if(node[y][x].boom=='*')//如果是雷就输出字符'*',否则输出数字 printf("%-2c\b\b", node[y][x].boom); else myPrint(node[y][x].boom);//调用输出双字符函数 if(node[y][x].boom=='*') return 1; //返回1代表输了 else if(node[y][x].boom==0) //说明周围8个方向的方格没有雷,在8个方向上做上翻牌标记 { if(y-1>=0) //在该方格上面的雷区做翻牌标记 { if(x-1>=0 && node[y-1][x-1].flag==0) //标记左上方 { node[y-1][x-1].flag=2; //2代表翻牌,1代表地雷 gotoxy(2*(x-1), y-1); //跳转到方格处并翻牌 if(node[y-1][x-1].boom=='*')//如果是雷就输出字符'*',否则输出数字 printf("%-2c\b\b", node[y-1][x-1].boom); else myPrint(node[y-1][x-1].boom);//调用输出双字符函数 if(node[y-1][x-1].boom==0 && node[y-1][x-1].recursionMark==0)//递归调用 clear_boom(width, high, y-1, x-1); } if(node[y-1][x].flag==0) { node[y-1][x].flag=2; //标记正上方 gotoxy(2*x, y-1); //跳转到方格处并翻牌 if(node[y-1][x].boom=='*')//如果是雷就输出字符'*',否则输出数字 printf("%-2c\b\b", node[y-1][x].boom); else myPrint(node[y-1][x].boom);//调用输出双字符函数 if(node[y-1][x].boom==0 && node[y-1][x].recursionMark==0)//递归调用 clear_boom(width, high, y-1, x); } if(x+1

简版扫雷代码

#include #include #include #define MAX 100 //最大范围为100x100 struct place{ int show;//显示状态(-1为不显示,0为显示@,1为显示status ) char status;//身份(数字为周围8位地雷数,*为地雷,#号为边界标志) }; /*显示函数*/ void print_all(place mine_area[][MAX+2]){ for(int i=0;i<=MAX+1;i++){ for(int j=0;j<=MAX+1;j++){ if(mine_area[i][j].status<=8) printf("%d",mine_area[i][j].status+48); else if(mine_area[i][j].status=='#') printf("#"); else if(mine_area[i][j].status=='*') printf("*"); printf(":%d ",mine_area[i][j].show); } printf("\n"); } } void print_all(place mine_area[][MAX+2],int length,int width){ for(int i=0;i

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,

c语言实现扫雷程序模拟

本人写的扫雷程序,由于时间紧迫,写的比较粗糙,但经过c编译可运行,下面是源代码: /*name:kaituozhe001saolei1125.cpp*/ #include #include #include #define N 9 int mine[N][N],game[N][N]; int row=0,col=0,a,b; void main() { void putmine(int n1); int expand(int row,int col); int Remain(); void myprintf1(); void myprintf2(); int aroundmine(int row,int col); /* 提示说明 */ printf(" -------------------------------------------------------------------\n* 您接下来要玩一个%d*%d的扫雷游戏。 *\n* 请按提示操作(否则会出意外的), *\n* 在这个游戏中“*”代表地雷,“#”代表未打开的盒子。 *\n* 当您将全部非雷盒子打开后,您就赢了! *\n* 谢谢参与游 戏!》》开拓者制作bo《《 *\n -------------------------------------------------------------------",N,N); int n1,i=0,j=0;

/*初始化雷区*/ for(i=0;i> ",N,N,N*N); scanf("%d",&n1); printf("\n下面是所布雷阵>> \n"); putmine(n1); myprintf1(); for(i=0;i> \n"); myprintf1(); while(Remain()!=n1) { printf("\n请输入扫雷坐标,以“,”分开>> "); scanf("%d,%d",&row,&col); for(i=0;i

c语言扫雷程序代码

#include #include #include #include #define Map_list 6 #define Map_line 6 void map_printf(int x,int y,int b[][Map_list]) { int i,j; for(i=0;i0&&b[i][j]<9) printf(" %d",b[i][j]); } printf("\n"); } } void Move(int x,int y) { HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos= {x, y}; SetConsoleCursorPosition(hOut, pos); } int kb_cursor() { int a=getch(); char input[2]; if(a<0) { input[0]=a; input[1]=getch(); } else {

input[1]=a; } return input[1]; } void HideCursor() { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void printf_0(int b[][Map_list],int x,int y) { int i,j,n; if(x==0&&y==0) { n=0; for(i=0;i<2;i++) for(j=0;j<2;j++) if(b[x+i][y+j]==11) n++; if(n==0) { for(i=0;i<2;i++) for(j=0;j<2;j++) { if(b[x+i][x+j]==10) { b[x+i][y+j]=0; printf_0(b,x+i,y+j); } } } else b[x][y]=n; } else if(x==0&&y0) { n=0; for(i=0;i<2;i++) for(j=-1;j<2;j++) if(b[x+i][y+j]==11) n++; if(n!=0) b[x][y]=n; else for(i=0;i<2;i++)

C语言经典题目“扫雷”代码

扫雷(选做) 输入 输入中将包括一系列的地图,每个地图的第一行有两个整数n 和m(0 #define N 110 void main() { char a[N][N]; int n,m,t,i,j,k=1; static int b[N][N]; for(n=m=1; n!=0 && m!=0; ) { for(i=0;i0;t--) scanf("%s",a[n-t]); for(i=0;i

{ if(a[i][j]=='*') { b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]+ +; } } } if(n!=0&&k>1) {printf("\nField #%d:\n",k); k++;} else if(n!=0) {printf("Field #%d:\n",k); k++;} for(i=0;i

C语言程序设计扫雷游戏实验报告

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

目录 1.课程设计内容 (3) 2.课程设计目的 (3) 3.背景知识 (3) 4.工具/准备工作 (5) 5.设计步骤、方法 (5) 5.1. 步骤1:步骤名称(二级标题) ....................................................... 错误!未定义书签。 5.1.1. 步骤1.1:步骤名称(三级标题) (5) 5.2. 步骤2:步骤名称.......................................................................... 错误!未定义书签。 5.3. 步骤n:步骤名称.......................................................................... 错误!未定义书签。 6.设计结果及分析 (5) 7.设计结论 (15) 8.问题及心得体会 (16) 9.对本设计过程及方法、手段的改进建议 (17) 10.参考文献 (17)

报告名称 1. 课程设计内容 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows 操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用C-free编写了与它功能相仿的挖地雷游戏,寓学于乐。 即:设计一个功能与Windows中的挖雷游戏相同的小游戏。 2. 课程设计目的 1.培养学生综合运用所学知识独立完成课题的能力。 2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 4.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核 3. 背景知识 游戏玩法:以windows XP自带扫雷winmine.exe为例 游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为9*9个方块10个雷,中级为16*16个方块40个雷,高级为16*30个方块99个雷,

c语言扫雷游戏报告

计算机实习报告 题目编号:c语言扫雷游戏 ①需求分析 本程序是上网查找的,程序没有注释,给我对程序的理解造成了很多不便, 首先我们在雷区上随机地放上雷,没有雷的地方被点击后就会显示一个数字表示它周围有几个雷,这是怎么实现的呢?我们可以把整个雷区看成一个二维数组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] 这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] 将被展开,一直波及到不可确定的雷区。这也是实现的关键。在被展开时,检查周围 的雷数是否与周围标示出来的雷数相等,如果相等则展开周围未标示的雷区。这样新的雷区展开又触发这个事件,就这样递归下去,一直蔓延到不可展开的雷区。 ②程序设计 说明程序中用到的所有数据类型的定义。绘制主程序的流程图

C语言程序设计扫雷游戏实验报告

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

目录 1.课程设计内容.......................................... 2.课程设计目的.......................................... 3.背景知识.............................................. 4.工具/准备工作......................................... 5.设计步骤、方法 ........................................ .步骤1:步骤名称(二级标题) ............................................ 步骤:步骤名称(三级标题).......................................... .步骤2:步骤名称 ...................................................... .步骤n:步骤名称 ...................................................... 6.设计结果及分析 ........................................ 7.设计结论.............................................. 8.问题及心得体会 ........................................ 9.对本设计过程及方法、手段的改进建议..................... 10................................................................ 参考文献 报告名称 1.课程设计内容 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常

c语言小游戏代码-扫雷代码

#include #include #include #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #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; void Init(void);/*图形驱动*/ void MouseOn(void);/*鼠标光标显示*/ void MouseOff(void);/*鼠标光标隐藏*/ void MouseSetXY(int,int);/*设置当前位置*/ int LeftPress(void);/*左键按下*/ int RightPress(void);/*鼠标右键按下*/ void MouseGetXY(void);/*得到当前位置*/ 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(); Control();

c语言课程设计_扫雷游戏设计

C语言课程设计_扫雷游戏设计 /*5.3.4 源程序*/ #include #include #include #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #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; void Init(void);/*图形驱动*/ void MouseOn(void);/*鼠标光标显示*/ void MouseOff(void);/*鼠标光标隐藏*/ void MouseSetXY(int,int);/*设置当前位置*/ int LeftPress(void);/*左键按下*/ int RightPress(void);/*鼠标右键按下*/ void MouseGetXY(void);/*得到当前位置*/ 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(); Control(); Close(); } void Init(void)/*图形开始*/ { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc"); } void Close(void)/*图形关闭*/ { closegraph();

C++语言程序设计课程设计扫雷

辽宁工业大学 《C++语言程序设计》课程设计(论文)题目:扫雷 院(系):软件学院 专业班级:软件工程111班 学号: 学生姓名: 指导教师:翟宝峰 教师职称:副教授 起止时间: 课程设计(论文)任务及评语

目录 第1章课程设计目的与要求 设计目的 将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼: (1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。 (4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象程序设计的方法。 (6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。 (7)进一步掌握在集成环境下如何调试程序和修改程序。

硬件要求能运行Windows 操作系统的微机系统。C++语言应用程序开发软件使用:VC++ 系统,或其他C++语言应用程序开发软件。 预备知识 熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。 设计要求 1.仔细分析设计题目,画出程序流程图,编写程序源代码。 2.积极上机调试源程序,增强编程技巧与调程能力。 3.认真书写课程设计预习报告,课程设计说明书。 4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。 第2章课程设计内容 课题描述 扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。不久之后,“方块”被改写成了游戏Rlogic。在Rlogic里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆·安德森在Rlogic的基础上又编写出了游戏地雷,由此奠定了现代扫雷游戏的雏形。1981年,微软公司的罗伯特和卡特两位工程师在Windows 系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。 本课程设计实现类似于Windows操作系统自带的扫雷游戏。在课程设计中,系统开发平台为Windows XP,程序设计语言采用Visual C++,程序运行平台为Windows 2000/XP。在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组的行和列、当前状态、方块属性、历史状态的结构体。整个游戏程序包括了布雷、扫雷过程和结果三个阶段,在处理鼠标响应事件中伴随着GDI绘图。程序通过调试运行,实现了设计目标,能够同时满足扫雷游戏初学者和高手的需要。

C语言程序设计扫雷游戏实验报告材料

实用标准 中南大学 程序设计基础实践报告 题目设计一个和window系统类似的小游戏【挖地雷】学生姓名张兰兰 学院信息科学与工程学院 专业班级物联网工程1301班 完成时间 2014.1

目录 1.课程设计内容 (3) 2.课程设计目的 (3) 3.背景知识 (3) 4.工具/准备工作 (5) 5.设计步骤、方法 (5) 5.1. 步骤1:步骤名称(二级标题) .......................... 错误!未定义书签。 5.1.1. 步骤1.1:步骤名称(三级标题) (5) 5.2. 步骤2:步骤名称.................................... 错误!未定义书签。 5.3. 步骤n:步骤名称.................................... 错误!未定义书签。 6.设计结果及分析 (5) 7.设计结论 (15) 8.问题及心得体会 (16) 9.对本设计过程及方法、手段的改进建议 (17) 10.参考文献 (17)

报告名称 1.课程设计内容 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows 操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用C-free编写了与它功能相仿的挖地雷游戏,寓学于乐。 即:设计一个功能与Windows中的挖雷游戏相同的小游戏。 2.课程设计目的 1.培养学生综合运用所学知识独立完成课题的能力。 2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 4.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核 3.背景知识 游戏玩法:以windows XP自带扫雷winmine.exe为例 游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为9*9个方块10个雷,中级为16*16个方块40个雷,高级为16*30个方块99个雷,

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. 背景知识 游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于

c语言课程设计 扫雷

C语言程序设计报告 题目:扫雷游戏 班级:网101 组长:~~ 成员:~~,~~ 日期:目录

一基本情况 二游戏规则 三设计思路 四函数说明 1.游戏控制部分 2.图形处理部分 3.鼠标处理部分 五调试与测试 六附录 一基本情况 开发平台:win-tc(windows-xp)

开发进度:~小组进行图形处理及鼠标相关资料收集,掌握相关图形处理及鼠标相关技术 ~小组成员讨论程序实现算法及任务分配 ~代码实现,调试 任务划分:陈超负责程序总体设计,游戏控制部分实现,后期调试 张艳负责程序图形处理及鼠标处理部分实现,总结文档编写 二游戏规则

玩家进入游戏界面后,只能通过鼠标进行操作,一旦有键盘输入,则退出游戏程序。游戏框图左上方显示的数字为此局游戏中包含的地雷数目。中间黄色笑脸为重新开始按钮,一旦鼠标左键单击此位置,则退出正在进行的扫雷游戏,游戏重新开始。游戏中包含10*10个空格,可以通过鼠标左键单击或者右键单击来进行扫雷游戏。鼠标单击表示打开此空格位置,若此位置为地雷,则输出所有的地雷分布,玩家输,游戏结束,等待玩家的选择退出或者继续开始下一次游戏。若此位置已经被左单击过,则再次进行鼠标左键单击时,游戏不做任何响应。单击过后若此位置无雷则显示空格或者数字。空格表示此处无雷,数字表示此处无雷且周围八个格子中的地雷数目为空格中的数字数目,若某个空格周围亦没有地雷分布则继续以每个方格为中心继续判断无雷就展开,显示数字或者空格,直至遇到地雷或者是边界。鼠标右键单击表示游戏玩家标识此位置为地雷,若游戏玩家在某位置右键单击过之后,再次右键单击此位置,则表示取消此处标注的地雷标志,若在此处鼠标左键单击,不做任何响应。游戏玩家依次对每一个空格,当游戏玩家把所有的非雷区域全部处理完毕,则游戏结束,玩家胜利,输出“YOU WIN”,等待玩家进一步选择。 三设计思路

c语言课程设计经典例题扫雷

扫雷源代码,完美运行 /* 模拟扫雷游戏 */ #include #include #include #include #include #include #include union REGS regs; int size=15;/*用于表示每个方块的大小(正方形的边长)*/ int pix,piy=50;/*pix,piy是矩阵的偏移量*/ char b[2]="1";/*用于显示方格周围的雷的个数*/ int pan[30][16];/*用于记录盘面的情况:0:没有、9:有雷、1~8:周围雷的个数*/ int pan1[30][16];/*pan1[][]纪录当前的挖雷情况,0:没有操作、1:打开了、2:标记了*/ int tt;/*纪录时间参数*/ int Eflags;/*用于标记鼠标按钮的有效性,0:有效,1:无效,2:这是鼠标的任意键等于重新开始*/ int Msinit(); void Draw(int x,int y,int sizex,int sizey); void Facedraw(int x,int y,int sizel,int k); void Dead(int sizel,int x,int y); void Setmouse(int xmax,int ymax,int x,int y); int Msread(int *xp,int *yp,int *bup,struct time t1,int k);

c语言课程设计扫雷

c语言课程设计扫雷集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

C语言程序设计报告 题目:扫雷游戏 班级:网101 组长:~~ 成员:~~,~~ 日期:目录 一基本情况 二游戏规则 三设计思路 四函数说明 1.游戏控制部分 2.图形处理部分 3.鼠标处理部分 五调试与测试 六附录 一基本情况 开发平台: win-tc(windows-xp) 开发进度:~小组进行图形处理及鼠标相关资料收集,掌握相关图形处理及鼠标相关技术 ~小组成员讨论程序实现算法及任务分配 ~代码实现,调试

任务划分:陈超负责程序总体设计,游戏控制部分实现,后期调试 张艳负责程序图形处理及鼠标处理部分实现,总结文档编写 二游戏规则 玩家进入游戏界面后,只能通过鼠标进行操作,一旦有键盘输入,则退出游戏程序。游戏框图左上方显示的数字为此局游戏中包含的地雷数目。中间黄色笑脸为重新开始按钮,一旦鼠标左键单击此位置,则退出正在进行的扫雷游戏,游戏重新开始。游戏中包含10*10个空格,可以通过鼠标左键单击或者右键单击来进行扫雷游戏。鼠标单击表示打开此空格位置,若此位置为地雷,则输出所有的地雷分布,玩家输,游戏结束,等待玩家的选择退出或者继续开始下一次游戏。若此位置已经被左单击过,则再次进行鼠标左键单击时,游戏不做任何响应。单击过后若此位置无雷则显示空格或者数字。空格表示此处无雷,数字表示此处无雷且周围八个格子中的地雷数目为空格中的数字数目,若某个空格周围亦没有地雷分布则继续以每个方格为中心继续判断无雷就展开,显示数字或者空格,直至遇到地雷或者是边界。鼠标右键单击表示游戏玩家标识此位置为地雷,若游戏玩家在某位置右键单击过之后,再次右键单击此位置,则表示取消此处标注的地雷标志,若在此处鼠标左键单击,不做任何响应。游戏玩家依次对每一个空格,当游戏玩家把所有的非雷区域全部处理完毕,则游戏结束,玩家胜利,输出“YOU WIN”,等待玩家进一步选择。 三设计思路 扫雷程序主要用了一个10行10列的二维数组,数组的每个元素都是结构体类型,结构体中的num代表格内当前处于什么状态,值1表示有雷,值0表示已经变成空白格或者显示过数字,roundnum统计每个格子周围有多少地雷,flag是鼠标右键的标志,如果鼠标左键单击此方格,则对应的二维数组结构体里的flag为1表示格子显示红旗,这样鼠标左键点击在这个格子上无效。 首先通过生成随机数的方式布置地雷,如果在该点生成的随机数为1,则该点存在地雷,将NUM(结构体)标为1,随机数为其它值NUM(结构体)标为0,每生成一个地雷,则全局变量minenum自增一。

相关文档
相关文档 最新文档