當前位置:編程學習大全網 - 源碼下載 - (完整word版)純C語言寫的壹個小型遊戲 源代碼

(完整word版)純C語言寫的壹個小型遊戲 源代碼

"掃雷"小遊戲C代碼

#include<stdio.h>

#include<math.h>

#include<time.h>

#include<stdlib.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(hang<2){printf("行數太少\n"); t=1;}

if(hang>100){printf("行數太多\n");t=1;}

if(lie<2){printf("列數太少\n");t=1;}

if(lie>100){printf("列數太多\n");t=1;}

if(ge<1){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;j<i;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並回車*/

  • 上一篇:有哪些成功率高又能快速脫單的交友軟件推薦?
  • 下一篇:為什麽自己做交易感覺知道的東西越多越是做不好?
  • copyright 2024編程學習大全網