全国最大诚信黑客接单

网站入侵,红包控制,密码破解,木马制作,app作弊程序开发

C语言实现扫雷破解(c语言扫雷小游戏)

本文导读目录:

C语言扫雷算法,也可以别的语言,解释清楚算法就好

在这上面不好说明, 我有C的代码, 你看一下(DEVC++)

#include stdio.h

#include stdlib.h

#include time.h

#include windows.h

#define n 15

int restart=0;

int last_sel_x,last_sel_y;

char in[20];

struct POINT

{

int x;

int y;

} pt;

//设置CMD窗口光标位置

void setxy(int x, int y)

{

   COORD coord = {x, y};

   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

//获取当前CMD当前光标所在位置

void getxy()

{

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    COORD coordScreen = {0, 0}; //光标位置

    CONSOLE_SCREEN_BUFFER_INFO csbi;

    if (GetConsoleScreenBufferInfo(hConsole, csbi))

    {

    //    printf("光标坐标:(%d,%d)\n",  csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y);

     pt.x=csbi.dwCursorPosition.X;

     pt.y=csbi.dwCursorPosition.Y;

    }

}

struct A

{

int value; //-1为雷 

int state; //显示状态: 0为未打开, 1为已打开 

int lock;  //锁定状态 

int bomb;  //雷已标记: 0为未标记, 1为已标记 

};

struct A s[10][10];

int calc()

{

int i,j,count=0;

for(i=0;i10;i++)

{

for(j=0;j10;j++)

{

if(s[i][j].state==0) count++;

}

}

return count;

}

int prt()

{

system("cls");

int count=calc();

int i,j;

printf("%3c",' ');

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_GREEN);  

for(i=0;i10;i++)

{

printf("%3d",i);

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  

for(i=0;i10;i++)

{

printf("\n");

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_GREEN);  

printf("%3d",i);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  

for(j=0;j10;j++)

{

if(s[i][j].bomb==1)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED);

printf("%3c",'*');

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  

}

else if(s[i][j].state==1)

{

if(s[i][j].value==0) printf("%3c",' ');

else printf("%3d",s[i][j].value);

}

else

{

printf("%3c",'-');

}

/* if(s[i][j].value==-1) printf("%3c",'*');

else printf("%3d",s[i][j].value);*/

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_GREEN);  

printf("%3d",i);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  

}

printf("\n");

printf("%3c",' ');

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_GREEN);  

for(i=0;i10;i++)

{

printf("%3d",i);

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  

printf("\n");

getxy();

setxy(45,0);

printf("%d",count);

setxy(40,5);

printf("说明"); 

setxy(40,7);

printf("1: 输入 *xy(如:*55),则把第5行第5列");

setxy(40,8);

printf("   标记为地雷"); 

setxy(40,10);

printf("2: 输入 xy(如55),则把第5行第5列打开"); 

if(count==n)

{

for(i=0;i10;i++)

{

for(j=0;j10;j++)

{

if(s[i][j].value==-1  s[i][j].bomb==0) s[i][j].bomb=1;

if(s[i][j].value!=-1  s[i][j].state==0) s[i][j].state=1;

}

}

setxy(50,2);

printf("success!");

setxy(pt.x,pt.y);

fflush(stdin);

getchar();

return 1;

}

setxy(pt.x,pt.y);

return 0;

}

void space_process(int x,int y)

{

int i,j;

if(x-1=0  y-1=0)

{

if(s[x-1][y-1].value==0   s[x-1][y-1].lock==0) {s[x-1][y-1].state=1; s[x-1][y-1].lock=1; space_process(x-1,y-1);}

else if(s[x-1][y-1].value!=-1) s[x-1][y-1].state=1;

}

if(x-1=0)

{

if(s[x-1][y].value==0  s[x-1][y].lock==0) {s[x-1][y].state=1; s[x-1][y].lock=1; space_process(x-1,y);}

else if(s[x-1][y].value!=-1) s[x-1][y].state=1;

}

if(x-1=0  y+110)

{

if(s[x-1][y+1].value==0   s[x-1][y+1].lock==0) {s[x-1][y+1].state=1; s[x-1][y+1].lock=1; space_process(x-1,y+1);}

else if(s[x-1][y+1].value!=-1) s[x-1][y+1].state=1;

}

if(y-1=0)

{

if(s[x][y-1].value==0   s[x][y-1].lock==0) {s[x][y-1].state=1; s[x][y-1].lock=1; space_process(x,y-1);}

else if(s[x][y-1].value!=-1) s[x][y-1].state=1;

}

if(y+110)

{

if(s[x][y+1].value==0  s[x][y+1].lock==0) {s[x][y+1].state=1; s[x][y+1].lock=1; space_process(x,y+1);}

else if(s[x][y+1].value!=-1) s[x][y+1].state=1;

}

if(x+110  y-1=0)

{

if(s[x+1][y-1].value==0  s[x+1][y-1].lock==0) {s[x+1][y-1].state=1; s[x+1][y-1].lock=1; space_process(x+1,y-1);}

else if(s[x+1][y-1].value!=-1) s[x+1][y-1].state=1;

}

if(x+110)

{

if(s[x+1][y].value==0  s[x+1][y].lock==0) {s[x+1][y].state=1; s[x+1][y].lock=1; space_process(x+1,y);}

else if(s[x+1][y].value!=-1) s[x+1][y].state=1;

}

if(x+110  y+110)

{

if(s[x+1][y+1].value==0  s[x+1][y+1].lock==0) {s[x+1][y+1].state=1; s[x+1][y+1].lock=1; space_process(x+1,y+1);}

else if(s[x+1][y+1].value!=-1) s[x+1][y+1].state=1;

}

}

int process_char(char* t,int* i,int* j)

{

int len=strlen(t);

int x,y=0;

for(x=0;xlen;x++)

{

if(t[x]==' ')

{

continue;

}

else

{

t[y++]=t[x];

}

}

t[y]='\0';

if(t[0]=='*')

{

*i=t[1]-'0';

*j=t[2]-'0';

if(s[*i][*j].bomb==1)

{

s[*i][*j].bomb=0;

s[*i][*j].state=0;

}

else if(s[*i][*j].bomb==0   s[*i][*j].state==0)

{

s[*i][*j].bomb=1;

}

return 1;

}

else if(t[0]='0'  t[0]='9')

{

*i=t[0]-'0';

*j=t[1]-'0';

return 0;

}

return 1;

}

int plus(int x, int y) //返回0为出错,返回1为正确,返回-1为取消 

{

int count=s[x][y].value;

int bomb=0;

if(count==0 || count==-1) return -1;

if(x-1=0  y-1=0)

{

if(s[x-1][y-1].bomb==1) bomb++;

}

if(x-1=0)

{

if(s[x-1][y].bomb==1) bomb++;

}

if(x-1=0  y+110)

{

if(s[x-1][y+1].bomb==1) bomb++;

}

if(y-1=0)

{

if(s[x][y-1].bomb==1) bomb++;

}

if(y+110)

{

if(s[x][y+1].bomb==1) bomb++;

}

if(x+110  y-1=0)

{

if(s[x+1][y-1].bomb==1) bomb++;

}

if(x+110)

{

if(s[x+1][y].bomb==1) bomb++;

}

if(x+110  y+110)

{

if(s[x+1][y+1].bomb==1) bomb++;

}

if(bomb==s[x][y].value)

{

if(x-1=0  y-1=0)

{

if(s[x-1][y-1].value==-1  s[x-1][y-1].bomb==0) {return 0;}

}

if(x-1=0)

{

if(s[x-1][y].value==-1  s[x-1][y].bomb==0) return 0;

}

if(x-1=0  y+110)

{

if(s[x-1][y+1].value==-1  s[x-1][y+1].bomb==0) return 0;

}

if(y-1=0)

{

if(s[x][y-1].value==-1  s[x][y-1].bomb==0) return 0;

}

if(y+110)

{

if(s[x][y+1].value==-1  s[x][y+1].bomb==0) return 0;

}

if(x+110  y-1=0)

{

if(s[x+1][y-1].value==-1  s[x+1][y-1].bomb==0) return 0;

}

if(x+110)

{

if(s[x+1][y].value==-1  s[x+1][y].bomb==0) return 0;

}

if(x+110  y+110)

{

if(s[x+1][y+1].value==-1  s[x+1][y+1].bomb==0) return 0;

}

space_process(x,y);

int i,j;

for(i=0;i10;i++)

{

for(j=0;j10;j++)

{

s[i][j].lock=0;

}

}

return 1;

}

else

{

return -1;

}

}

void prt_selected(int x, int y, int flag)

{

if(flag==0)

{

if(x=0) x=last_sel_x;

if(y=0) y=last_sel_y;

}

int plus=2;

getxy();

if(x=0)

{

last_sel_x=x;

setxy(3,x+1);

int j;

if(flag==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_BLUE | FOREGROUND_INTENSITY);

else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

for(j=0;j10;j++)

{

     if(s[x][j].bomb==1)

{

if(flag==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |  

            FOREGROUND_RED | BACKGROUND_BLUE);

             else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

printf("%3c",'*'); 

}

else if(s[x][j].state==1)

{

if(s[x][j].value==0) printf("%3c",' ');

else printf("%3d",s[x][j].value);

}

else

{

printf("%3c",'-');

}

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

}

if(y=0)

{

int i;

last_sel_y=y;

for(i=0;i10;i++)

{

if(last_sel_x==i) continue;

if(flag==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_BLUE | FOREGROUND_INTENSITY);

else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

setxy(3*y+3,i+1);

if(s[i][y].bomb==1)

{

if(flag==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |

            FOREGROUND_RED | BACKGROUND_BLUE);

           else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

printf("%3c",'*');

}

else if(s[i][y].state==1)

{

if(s[i][y].value==0) printf("%3c",' ');

else printf("%3d",s[i][y].value);

}

else

{

printf("%3c",'-');

}

}

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | 

            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

setxy(pt.x,pt.y);

}

void input() //实时获取键盘输入 

{

int c;

int x=-1,y=-1;

int i=0;

int first_num=0; 

while(1)

{

fflush(stdin);

c=getch();

printf("%c",c);

if(c==10 || c==13) break;

if(c==8  i0)

{

in[i-1]='\0';

if(in[0]=='*')

{

if(in[1]'0' || in[1]'9')

{

x=-1;

prt_selected(last_sel_x,-1,0);

}

if(in[2]'0' || in[2]'9')

{

y=-1;

prt_selected(-1,last_sel_y,0);

}

}

else

{

if(in[0]'0' || in[0]'9')

{

x=-1;

prt_selected(last_sel_x,-1,0);

}

if(in[1]'0' || in[1]'9')

{

y=-1;

prt_selected(-1,last_sel_y,0);

}

}

i--;

getxy();

setxy(pt.x,pt.y);

printf(" ");

setxy(pt.x,pt.y);

}

else if(c=='*' || (c='0'  c='9'))

{

in[i++]=c;

if(in[0]=='*')

{

if(in[1]!='\0'  in[1]='0'  in[1]='9')

{

x=in[1]-'0';

}

else

{

x=-1;

}

if(in[2]!='\0'  in[2]='0'  in[2]='9')

{

y=in[2]-'0';

}

else

{

y=-1;

}

}

else if(in[0]='0'  in[0]='9')

{

x=in[0]-'0';

if(in[1]='0'  in[1]='9')

{

y=in[1]-'0';

}

else

{

y=-1;

}

}

else x=-1;

if(x-1) prt_selected(x,-1,1);

if(y-1) prt_selected(-1,y,1);

}

}

}

int main()

{

int i=0,j,x,y;

while(1)

{

restart=0;

for(i=0;i10;i++)

{

for(j=0;j10;j++)

{

s[i][j].value=0;

s[i][j].state=0;

s[i][j].lock=0;

s[i][j].bomb=0;

}

}

srand((unsigned)time(0));

i=0;

while(in)

{

x=rand()%10;

y=rand()%10;

if(s[x][y].value!=-1)

{

s[x][y].value=-1;

i++;

}

}

for(i=0;i10;i++)

{

for(j=0;j10;j++)

{

if(s[i][j].value==-1) continue;

// n=0;

if(i-1=0)

{

if(s[i-1][j].value==-1) s[i][j].value++;

if(j-1=0)

{

if(s[i-1][j-1].value==-1) s[i][j].value++;

}

if(j+110)

{

if(s[i-1][j+1].value==-1) s[i][j].value++;

}

}

if(i+110)

{

if(s[i+1][j].value==-1) s[i][j].value++;

if(j-1=0)

{

if(s[i+1][j-1].value==-1) s[i][j].value++;

}

if(j+110)

{

if(s[i+1][j+1].value==-1) s[i][j].value++;

}

}

if(j-1=0)

{

if(s[i][j-1].value==-1) s[i][j].value++;

}

if(j+110)

{

if(s[i][j+1].value==-1) s[i][j].value++;

}

}

}

if(prt()==1)

{

restart=1;

continue;

}

while(1)

{

memset(in,'\0',20);

fflush(stdin);

// scanf("%[^\n]",in);

input();

if(process_char(in,i,j)==1)

{

if(prt()==1)

{

restart=1;

break;

}

continue;

}

for(x=0;x10;x++)

{

for(y=0;y10;y++)

{

s[x][y].lock=0;

}

}

if(s[i][j].value==-1)

{

printf("\nBomb");

fflush(stdin);

getchar();

restart=1;

}

else if(s[i][j].value==0)

{

s[i][j].state=1;

space_process(i,j);

}

else if(s[i][j].state==1)

{

int re=plus(i,j);

{

switch(re)

{

case -1:

break;

case 0:

printf("\nBomb");

fflush(stdin);

getchar();

restart=1;

break;

case 1:break;

}

}

}

else

{

s[i][j].state=1;

}

if(prt()==1 || restart==1)

{

restart=0;

break;

}

}

}

return 0;

}

扫雷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语言如何编程实现扫雷?使用WIN-TC或Microsoft Visual C++

我以前写过 很简单。

定义一个2维的数组,然后用rand() 随机布雷,然后计算没有雷的上面的数字。 有雷的定义为-1,没有雷的上面可能是0~8。

算法很简单,剩下的就是绘制界面了。总体不难,为何不自己试试?

如何用C语言编程 扫雷!~

俄罗斯方快http://topic.csdn.net/t/20051201/01/4429905.html

扫雷

#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语言的基本的语法的基本的编程以后该学什么?求高手指教?

再学数据结构,然后学算法,多编程序,至于windows编程是VC学习的基础,对算法要求不高,这属于实践性的,学习VC,然后就可以做框架,窗口之类的,也会蛮有成就感的

C语言扫雷怎么实现?

点击(x,y)

{

如果(x,y)格子不存在,return

如果是炸弹,GG

如果已经翻开,return

如果周围有雷,显示雷数量,并标记翻开

否则

{

显示空,并标记翻开

点击(x-1,y-1)....点击(x+1,y+1)共8个

}

}

基本思路是这样

C语言实现扫雷,用坐标的形式,不要C++

if (rand()%2)

{ // 放雷

}

else

{ // 不放雷

}

C语言扫雷游戏源代码

"扫雷"小游戏C代码

#includestdio.h

#includemath.h

#includetime.h

#includestdlib.h

main( )

{char a[102][102],b[102][102],c[102][102],w;

int i,j;  /*循环变量*/

int x,y,z[999];  /*雷的位置*/

int t,s;  /*标记*/

int m,n,lei;  /*计数*/

int u,v;  /*输入*/

int hang,lie,ge,mo;  /*自定义变量*/

srand((int)time(NULL));  /*启动随机数发生器*/

leb1:  /*选择模式*/

printf("\n   请选择模式:\n   1.标准  2.自定义\n");

scanf("%d",mo);

if(mo==2)  /*若选择自定义模式,要输入三个参数*/

{do

{t=0; printf("请输入\n行数 列数 雷的个数\n");

scanf("%d%d%d",hang,lie,ge);

if(hang2){printf("行数太少\n"); t=1;}

if(hang100){printf("行数太多\n");t=1;}

if(lie2){printf("列数太少\n");t=1;}

if(lie100){printf("列数太多\n");t=1;}

if(ge1){printf("至少要有一个雷\n");t=1;}

if(ge=(hang*lie)){printf("雷太多了\n");t=1;}

}while(t==1);

}

else{hang=10,lie=10,ge=10;}  /*否则就是选择了标准模式(默认参数)*/

for(i=1;i=ge;i=i+1)  /*确定雷的位置*/

{do

{t=0; z[i]=rand( )%(hang*lie);

for(j=1;ji;j=j+1){if(z[i]==z[j]) t=1;}

}while(t==1);

}

for(i=0;i=hang+1;i=i+1)  /*初始化a,b,c*/

{for(j=0;j=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }

for(i=1;i=hang;i=i+1)

{for(j=1;j=lie;j=j+1) {a[i][j]='+';} }

for(i=1;i=ge;i=i+1)  /*把雷放入c*/

{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}

for(i=1;i=hang;i=i+1)  /*计算b中数字*/

{for(j=1;j=lie;j=j+1)

{m=48;

if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;

if(c[i-1][j]=='#')m=m+1;  if(c[i+1][j+1]=='#')m=m+1;

if(c[i][j+1]=='#')m=m+1;  if(c[i+1][j]=='#')m=m+1;

if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;

b[i][j]=m;

}

}

for(i=1;i=ge;i=i+1)  /*把雷放入b中*/

{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}

lei=ge;  /*以下是游戏设计*/

do

{leb2:  /*输出*/

system("cls");printf("\n\n\n\n");

printf("    ");

for(i=1;i=lie;i=i+1)

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c  ",w);

}

printf("\n   |");

for(i=1;i=lie;i=i+1){printf("---|");}

printf("\n");

for(i=1;i=hang;i=i+1)

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c |",w);

for(j=1;j=lie;j=j+1)

{if(a[i][j]=='0')printf("   |");

else printf(" %c |",a[i][j]);

}

if(i==2)printf(" 剩余雷个数");

if(i==3)printf(" %d",lei);

printf("\n   |");

for(j=1;j=lie;j=j+1){printf("---|");}

printf("\n");

}

scanf("%d%c%d",u,w,v);  /*输入*/

u=u+1,v=v+1;

if(w!='#'a[u][v]=='@')

goto leb2;

if(w=='#')

{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}

else if(a[u][v]=='@'){a[u][v]='?'; lei=lei+1;}

else if(a[u][v]=='?'){a[u][v]='+';}

goto leb2;

}

a[u][v]=b[u][v];

leb3:  /*打开0区*/

t=0;

if(a[u][v]=='0')

{for(i=1;i=hang;i=i+1)

{for(j=1;j=lie;j=j+1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=1;i=hang;i=i+1)

{for(j=lie;j=1;j=j-1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;   if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=hang;i=1;i=i-1)

{for(j=1;j=lie;j=j+1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=hang;i=1;i=i-1)

{for(j=lie;j=1;j=j-1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=1;i=hang;i=i+1)  /*检测0区*/

{for(j=1;j=lie;j=j+1)

{if(a[i][j]=='0')

{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;

if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1;

if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1;

if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1;

if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1;

if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1;

if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;

if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;

}

}

}

if(t==1)goto leb3;

}

n=0;  /*检查结束*/

for(i=1;i=hang;i=i+1)

{for(j=1;j=lie;j=j+1)

{if(a[i][j]!='+'a[i][j]!='@'a[i][j]!='?')n=n+1;}

}

}

while(a[u][v]!='#'n!=(hang*lie-ge));

for(i=1;i=ge;i=i+1)  /*游戏结束*/

{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }

printf("    ");

for(i=1;i=lie;i=i+1)

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c  ",w);

}

printf("\n   |");

for(i=1;i=lie;i=i+1){printf("---|");}

printf("\n");

for(i=1;i=hang;i=i+1)

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c |",w);

for(j=1;j=lie;j=j+1)

{if(a[i][j]=='0')printf(" |");

else  printf(" %c |",a[i][j]);

}

if(i==2)printf(" 剩余雷个数");

if(i==3)printf(" %d",lei); printf("\n   |");

for(j=1;j=lie;j=j+1) {printf("---|");}

printf("\n");

}

if(n==(hang*lie-ge)) printf("你成功了!\n");

else printf("    游戏结束!\n");

printf("    重玩请输入1\n");

t=0;

scanf("%d",t);

if(t==1)goto leb1;

}

/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/

  • 评论列表:
  •  鸽吻折奉
     发布于 2022-06-03 20:53:25  回复该评论
  • setcolor(0); circle(currentx,currenty,5); currentx=210; setcolor(4); circle(curre

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.