扫雷数组c语言最简单代码(扫雷c语言代码二维数组)
c语言扫雷,使用一维数组实现对9*9区域进行随机布雷
int?mine[N*N],i,c;
for(c=0;c10;c++)
{
????i=rand()%(N*N);
????if(mine[i]==0)?mine[i]=1;
????else?c--;
}
扫雷C语言
#include stdio.h
#define N 40
int a[N][2];
int num;
void display()
{
for(int j=0; j num; j++)
{
printf("%d ", a[j][1]);
}
printf("\n");
}
void test(int i)
{
if(i == num)
{
int j;
int flag = 1;
if(a[0][1]+a[1][1]!=a[0][0]a[num-1][1]+a[num-2][1]!=a[num-1][0])
{
}
for(j = 1; j num - 1; j++)
{
if(a[j-1][1] + a[j][1] + a[j+1][1] != a[j][0])
flag = 0;
}
if(flag)
display();
}
for(; i num; i++)
{
if(a[i][1] == 0)
{
if(i == 0)
{
if(a[i][1]+a[i+1][1] != a[i][0])
{
a[i][1] = 1;
test(i+1);
a[i][1] = 0;
}
}
if(i 0)
{
if(a[i-1][1] + a[i][1] + a[i+1][1] != a[i][0])
{
a[i][1] = 1;
test(i+1);
a[i][1] = 0;
}
}
}
}
}
int main()
{
int i;
printf("输入个数:\n");
scanf("%d",num);
printf("输入数据(0~3):\n");
for(i = 0; i num; i++)
{
scanf("%d",a[i][0]);
a[i][1]=0;
}
for(i = 1; i num - 1; i++)
{
if(a[i][0] == 3)
{
a[i-1][1] = 1;
a[i][1] = 1;
a[i+1][1] = 1;
}
}
test(0);
}
算法思想:
1、如果有输入数字是3则输出数字中对应上中下都必为1
2、输出数组中只有为0的才能为1;
3、用回溯法判断成立条件,成功则输出。
求c语言编译小游戏的代码,比如扫雷原代码等?
#include graphics.h
#include stdlib.h
#include dos.h
#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();
}
void MouseOn(void)/*鼠标光标显示*/
{
_AX=0x01;
geninterrupt(0x33);
}
void MouseOff(void)/*鼠标光标隐藏*/
{
_AX=0x02;
geninterrupt(0x33);
}
void MouseSetXY(int x,int y)/*设置当前位置*/
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}
int LeftPress(void)/*鼠标左键按下*/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX1);
}
int RightPress(void)/*鼠标右键按下*/
{
_AX=0x03;
geninterrupt(0x33);
return(_BX2);
}
void MouseGetXY(void)/*得到当前位置*/
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}
void Control(void)/*游戏开始,重新,关闭*/
{
int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/
while(1)
{
if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/
{
GameBegain(); /*游戏初始画面*/
GamePlay();/*具体游戏*/
if(gameAGAIN==1)/*游戏中重新开始*/
{
gameAGAIN=0;
continue;
}
}
MouseOn();
gameFLAG=0;
if(LeftPress())/*判断是否重新开始*/
{
MouseGetXY();
if(MouseX280MouseX300MouseY65MouseY85)
{
gameFLAG=1;
continue;
}
}
if(kbhit())/*判断是否按键退出*/
break;
}
MouseOff();
}
void DrawSmile(void)/*画笑脸*/
{
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);
}
void DrawRedflag(int i,int j)/*显示红旗*/
{
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);
}
void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/
{
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);
}
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;i10;i++)/*画格子*/
for(j=0;j10;j++)
DrawEmpty(i,j,0,8);
setcolor(7);
DrawSmile();/*画脸*/
randomize();__page_break__
for(i=0;i10;i++)/*100个格子随机赋值有没有地雷*/
for(j=0;j10;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;/*变量取空白格数量*/
MouseOn();
}
void GameOver(void)/*游戏结束画面*/
{
int i,j;
setcolor(0);
for(i=0;i10;i++)
for(j=0;j10;j++)
if(Mine[i][j].num==1)/*显示所有的地雷*/
{
DrawEmpty(i,j,0,RED);
setfillstyle(SOLID_FILL,BLACK);
fillellipse(200+j*20,100+i*20,7,7);
}
}
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==0j==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==0j==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==9j==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==9j==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++;
}__page_break__
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==0Mine[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);
outtextxy(195+j*20,95+i*20,randmineNUM);
Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/
return ;
}
/*8个方向递归显示所有的空白格子*/
if(i!=0Mine[i-1][j].num!=1)
ShowWhite(i-1,j);
if(i!=0j!=9Mine[i-1][j+1].num!=1)
ShowWhite(i-1,j+1);
if(j!=9Mine[i][j+1].num!=1)
ShowWhite(i,j+1);
if(j!=9i!=9Mine[i+1][j+1].num!=1)
ShowWhite(i+1,j+1);
if(i!=9Mine[i+1][j].num!=1)
ShowWhite(i+1,j);
if(i!=9j!=0Mine[i+1][j-1].num!=1)
ShowWhite(i+1,j-1);
if(j!=0Mine[i][j-1].num!=1)
ShowWhite(i,j-1);
if(i!=0j!=0Mine[i-1][j-1].num!=1)
ShowWhite(i-1,j-1);
}
void GamePlay(void)/*游戏过程*/
{
int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/
for(i=0;i10;i++)
for(j=0;j10;j++)
Mine[i][j].roundnum=MineStatistics(i,j);/*统计每个格子周围有多少地雷*/
while(!kbhit())
{
if(LeftPress())/*鼠标左键盘按下*/
{
MouseGetXY();
if(MouseX280MouseX300MouseY65MouseY85)/*重新来*/
{
MouseOff();
gameAGAIN=1;
break;
}
if(MouseX190MouseX390MouseY90MouseY290)/*当前鼠标位置在格子范围内*/
{
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)/*鼠标按下的格子是地雷*/
{
MouseOff();
GameOver();/*游戏失败*/
break;
}
else/*鼠标按下的格子不是地雷*/
{
MouseOff();
Num=MineStatistics(i,j);
if(Num==0)/*周围没地雷就用递归算法来显示空白格子*/
ShowWhite(i,j);
else/*按下格子周围有地雷*/
{
sprintf(randmineNUM,"%d",Num);/*输出当前格子周围的雷数*/
setcolor(RED);
outtextxy(195+j*20,95+i*20,randmineNUM);
mineNUM--;
}
MouseOn();
Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/
if(mineNUM1)/*胜利了*/
{
GameWin();
break;
}
}
}
}
}
if(RightPress())/*鼠标右键键盘按下*/
{
MouseGetXY();
if(MouseX190MouseX390MouseY90MouseY290)/*当前鼠标位置在格子范围内*/
{
j=(MouseX-190)/20;/*x坐标*/
i=(MouseY-90)/20;/*y坐标*/
MouseOff();
if(Mine[i][j].flag==0Mine[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;
}
}
MouseOn();
sleep(1);
}
}
}
如何用C语言编程 扫雷!~
俄罗斯方快
扫雷
#includestdio.h
#includegraphics.h
#includestdlib.h
struct list
{
int x;
int y;
int num;
int bomb;
int wa;
};
struct list di[10][10];
int currentx=210;
int currenty=130;
void initxy(void)
{
int i,j;
for(i=0;i=9;i++)
for(j=0;j=9;j++)
{
di[j].x=i*20+200;
di[j].y=j*20+120;
di[j].wa=0;
di[j].bomb=0;
}
}
void initmu(void)
{
int i,j;
setcolor(2);
rectangle(200,120,400,320);
rectangle(190,110,410,330);
setfillstyle(8,14);
floodfill(191,111,2);
for(i=0;i=9;i++)
for(j=0;j=9;j++)
rectangle(di[j].x,di[j].y,di[j].x+19,di[j].y+19);
outtextxy(450,200,"press 'enter' to kick");
outtextxy(450,250,"press '\' to mark");
}
void randbomb(void)
{
int k;
int i,j;
randomize();
for(i=0;i=9;i++)
for(j=0;j=9;j++)
{
k=random(5);
if(k==2)
di[j].bomb=1;
}
}
void jisuan(void)
{
int k=0;
int i,j;
for(i=0;i=9;i++)
for(j=0;j=9;j++)
{
if(ijdi[i-1][j-1].bomb)
k=k+1;
if(idi[i-1][j].bomb)
k=k+1;
if(jdi[j-1].bomb)
k=k+1;
if(i=8di[i+1][j].bomb)
k=k+1;
if(j=8di[j+1].bomb)
k=k+1;
if(i=8j=8di[i+1][j+1].bomb)
k=k+1;
if(ij=8di[i-1][j+1].bomb)
k=k+1;
if(i=8jdi[i+1][j-1].bomb)
k=k+1;
di[j].num=k;
k=0;
}
}
void xianbomb(void)
{
int i,j;
char biaoji[2];
char znum[2];
biaoji[0]=1;
biaoji[1]=NULL;
for(i=0;i=9;i++)
for(j=0;j=9;j++)
{
if(di[j].bomb==1)
outtextxy(di[j].x+2,di[j].y+2,biaoji);
else
{
itoa(di[j].num,znum,10);
setfillstyle(1,0);
bar(i*20+202,j*20+122,i*20+218,j*20+138);
outtextxy(i*20+202,j*20+122,znum);
}
}
}
void move(void)
{
int key;
key=bioskey(1);
if(key)
key=bioskey(0);
if(key==0x4800)
{
if(currenty130)
{
setcolor(0);
circle(currentx,currenty,5);
currenty-=20;
setcolor(4);
circle(currentx,currenty,5);
}
else
{
setcolor(0);
circle(currentx,currenty,5);
currenty=310;
setcolor(4);
circle(currentx,currenty,5);
}
}
if(key==0x4b00)
{
if(currentx210)
{
setcolor(0);
circle(currentx,currenty,5);
currentx-=20;
setcolor(4);
circle(currentx,currenty,5);
}
else
{
setcolor(0);
circle(currentx,currenty,5);
currentx=390;
setcolor(4);
circle(currentx,currenty,5);
}
}
if(key==0x4d00)
{
if(currentx390)
{
setcolor(0);
circle(currentx,currenty,5);
currentx+=20;
setcolor(4);
circle(currentx,currenty,5);
}
else
{
setcolor(0);
circle(currentx,currenty,5);
currentx=210;
setcolor(4);
circle(currentx,currenty,5);
}
}
if(key==0x5000)
{
if(currenty310)
{
setcolor(0);
circle(currentx,currenty,5);
currenty+=20;
setcolor(4);
circle(currentx,currenty,5);
}
else
{
setcolor(0);
circle(currentx,currenty,5);
currenty=130;
setcolor(4);
circle(currentx,currenty,5);
}
}
if(key==0x1c0d)
{
int i,j;
char snum[2];
snum[0]=NULL;
snum[1]=NULL;
i=(currentx-210)/20;
j=(currenty-130)/20;
if(di[j].bomb==1)
{
outtextxy(100,100,"game over");
xianbomb();
sleep(2);
exit(0);
}
if(di[j].bomb==0)
{
di[j].wa=1;
setfillstyle(1,0);
bar(currentx-8,currenty-8,currentx+8,currenty+8);
setcolor(15);
itoa(di[j].num,snum,10);
outtextxy(currentx-8,currenty-8,snum);
setcolor(4);
circle(currentx,currenty,5);
}
}
if(key==0x2b5c)
{
char biaoji[2];
biaoji[0]=1;
biaoji[1]=NULL;
setcolor(0);
bar(currentx-8,currenty-8,currentx+8,currenty+8);
setcolor(4);
outtextxy(currentx-8,currenty-8,biaoji);
circle(currentx,currenty,5);
}
}
void success(void)
{
int k=1;
int i,j;
for(i=0;i=9;i++)
for(j=0;j=9;j++)
if(di[j].bomb==0di[j].wa==0)
k=0;
if(k==1)
{
outtextxy(100,100,"success good");
xianbomb();
sleep(2);
exit(0);
}
}
void main(void)
{
int gd=DETECT,gm;
initgraph(gd,gm,"");
initxy();
initmu();
randbomb();
jisuan();
setcolor(4);
circle(210,130,5);
while(1)
{
move();
success();
}
}
C语言编简单的扫雷
给你一个完整的扫雷源码
#include conio.h
#include graphics.h
#include stdio.h
#include stdlib.h
#include time.h
#include ctype.h
#include "mouse.c"
#define YES 1
#define NO 0
#define XPX 15 /* X pixels by square */
#define YPX 15 /* Y pixels by square */
#define DEFCX 30 /* Default number of squares */
#define DEFCY 28
#define MINE 255-'0' /* So that when it prints, it prints char 0xff */
#define STSQUARE struct stsquare
STSQUARE {
unsigned char value; /* Number of mines in the surround squares */
unsigned char sqopen; /* Square is open */
unsigned char sqpress; /* Square is pressed */
unsigned char sqmark; /* Square is marked */
} *psquare;
#define value(x,y) (psquare+(x)*ncy+(y))-value
#define sqopen(x,y) (psquare+(x)*ncy+(y))-sqopen
#define sqpress(x,y) (psquare+(x)*ncy+(y))-sqpress
#define sqmark(x,y) (psquare+(x)*ncy+(y))-sqmark
int XST, /* Offset of first pixel X */
YST,
ncx, /* Number of squares in X */
ncy,
cmines, /* Mines discovered */
initmines, /* Number of initial mines */
sqclosed, /* Squares still closed */
maxy; /* Max. number of y pixels of the screen */
void Graph_init(void);
void Read_param(int argc, char *argv[]);
void Set_mines(int nminas);
void Set_square(int x, int y, int status);
void Mouse_set(void);
void Draw_squares(void);
int Do_all(void);
void Blow_up(void);
void Open_square(int x, int y);
int Open_near_squares(int x, int y);
/************************************************************************/
void main(int argc, char *argv[])
{
if (!mouse_reset()) {
cputs(" ERROR: I can't find a mouse driver\r\n");
exit(2);
}
Graph_init();
Read_param(argc, argv);
Mouse_set();
do {
randomize();
cleardevice();
Set_mines(cmines=initmines);
mouse_enable();
Draw_squares();
}
while (Do_all() != '\x1b');
closegraph();
}
/*************************************************************************
* *
* F U N C T I O N S *
* *
*************************************************************************/
/*----------------------------------------------------------------------*/
void Graph_init(void)
{
int graphdriver=DETECT, graphmode, errorcode;
if(errorcode 0) {
cprintf("\n\rGraphics System Error: %s\n",grapherrormsg(errorcode));
exit(98);
}
initgraph(graphdriver, graphmode, "");
errorcode=graphresult();
if(errorcode!=grOk) {
printf(" Graphics System Error: %s\n",grapherrormsg(errorcode));
exit(98);
}
maxy=getmaxy();
} /* Graph_init */
/*----------------------------------------------------------------------*/
void Read_param(int argc, char *argv[])
{
int x, y, m;
x=y=m=0;
if (argc!=1) {
if (!isdigit(*argv[1])) {
closegraph();
cprintf("Usage is: %s [x] [y] [m]\r\n\n"
"Where x is the horizontal size\r\n"
" y is the vertical size\r\n"
" m is the number of mines\r\n\n"
" Left mouse button: Open the square\r\n"
"Right mouse button: Mark the square\r\n"
" -The first time puts a 'mine' mark\r\n"
" -The second time puts a 'possible "
"mine' mark\r\n"
" -The third time unmarks the square\r\n"
"Left+Right buttons: Open the surrounded squares only if "
"the count of mines\r\n"
" is equal to the number in the square",argv[0]);
exit (1);
}
switch (argc) {
case 4: m=atoi(argv[3]);
case 3: y=atoi(argv[2]);
case 2: x=atoi(argv[1]);
}
}
XST=100;
ncx=DEFCX;
if (maxy==479) {
YST=30;
ncy=DEFCY;
}
else {
YST=25;
ncy=20;
}
if (x0 xncx)
ncx=x;
if (y0 yncy) {
YST+=((ncy-y)*YPX)1;
ncy=y;
}
initmines= m ? m : ncx*ncy*4/25; /* There are about 16% of mines */
if (((void near*)psquare=calloc(ncx*ncy, sizeof(STSQUARE)))==NULL) {
closegraph();
cputs("ERROR: Not enought memory");
exit(3);
}
} /* Read_param */
/*----------------------------------------------------------------------*/
void Set_mines(int nminas)
{
扫雷 c语言代码 告诉我~~
北京理工大学电子信息谢锦峰的答案,只要不是很奇怪的输入就应该可以过。
然而北理网络教室的一个隐藏用例过不了。艹
#includestdio.h
struct lei
{int n,m;
char ch[110][110];
};
static struct lei work[100];
void output(int ii);
int jishu(int j,int k,int ii);
void main()
{ int pd1=1,pd2=1; int i=1,j,k;
int flag=1;
while(flag)
{scanf("%d%d",pd1,pd2);getchar();
//printf("%d,%d\n",pd1,pd2);
if(pd1==0||pd2==0) flag=0;
else
{work[i].n=pd1;
work[i].m=pd2;
for(j=1;j=work[i].n;j++)
{for(k=1;k=work[i].m;k++)
scanf("%c",work[i].ch[j][k]);
getchar();
}
i++;
}
}
/*for(j=1;j=work[i].n;j++)
{for(k=1;k=work[i].m;k++)
printf("%c,",work[i].ch[j][k]);
printf("\n");
}*/
int ii;
for(ii=1;ii=i-1;ii++)
{if(ii==1)printf("Field #%d:\n",ii);
else printf("\nField #%d:\n",ii);
output(ii);
//if(ii==1i!=1)printf("\n");
}
}
void output(int ii)
{int j,k;
for(j=1;j=work[ii].n;j++)
{for(k=1;k=work[ii].m;k++)
{if(work[ii].ch[j][k]=='*')
printf("*");
else
{printf("%d",jishu(j,k,ii));
}
}
printf("\n");
}
}
int jishu(int j,int k,int ii)
{int ji,ki,count=0;
if(j==1k==1)
{if(work[ii].ch[1][2]=='*')count++;
if(work[ii].ch[2][1]=='*')count++;
if(work[ii].ch[2][2]=='*')count++;
return count;
}
if(j==1k==work[ii].m)
{if(work[ii].ch[1][k-1]=='*')count++;
if(work[ii].ch[2][k-1]=='*')count++;
if(work[ii].ch[2][k]=='*')count++;
return count;
}
if(j==work[ii].nk==1)
{if(work[ii].ch[j-1][1]=='*')count++;
if(work[ii].ch[j-1][2]=='*')count++;
if(work[ii].ch[j][2]=='*')count++;
return count;
}
if(j==work[ii].nk==work[ii].m)
{if(work[ii].ch[j-1][k]=='*')count++;
if(work[ii].ch[j][k-1]=='*')count++;
if(work[ii].ch[j][k]=='*')count++;
return count;
}
//四个角落处理完毕
if(j==1k1kwork[ii].m)
{for(ji=1;ji=2;ji++)
for(ki=k-1;ki=k+1;ki++)
{if(k==kij==ji)continue;
if(work[ii].ch[ji][ki]=='*')
count++;
}
return count;
}
if(j==work[ii].nk1kwork[ii].m)
{for(ji=j-1;ji=j;ji++)
for(ki=k-1;ki=k+1;ki++)
{if(k==kij==ji)continue;
if(work[ii].ch[ji][ki]=='*')
count++;
}
return count;
}
if(j1jwork[ii].nk==1)
{for(ji=j-1;ji=j+1;ji++)
for(ki=1;ki=2;ki++)
{if(k==kij==ji)continue;
if(work[ii].ch[ji][ki]=='*')
count++;
}
return count;
}
if(j1jwork[ii].nk==work[ii].m)
{for(ji=j-1;ji=j+1;ji++)
for(ki=k-1;ki=k;ki++)
{if(k==kij==ji)continue;
if(work[ii].ch[ji][ki]=='*')
count++;
}
return count;
}
//四条边处理完毕
if(j1jwork[ii].nk1kwork[ii].m)
{for(ji=j-1;ji=j+1;ji++)
for(ki=k-1;ki=k+1;ki++)
{if(k==kij==ji)continue;
if(work[ii].ch[ji][ki]=='*')
count++;
}
return count;
}
}