生活随笔
收集整理的這篇文章主要介紹了
C语言 扫雷小游戏
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
有一些標(biāo)雷的小bug,湊合著還能用。
偶然發(fā)現(xiàn)掃雷這個算法和 島嶼問題(LeetCode200) 有些相似
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
int coordinate_x
;
int coordinate_y
;int board_A
[16][16]={0};
int board_B
[16][16]={0};
int board_C
[16][16]={0};
int board_D
[16][16]={};int main()
{
srand((int)time(NULL));
void print_board_A(); void print_board_B(); void print_board_C(); void print_board_D(); void print_line(); int rand_number(); void mine_initialize(); void calculate_A_to_B(); void input_coordinate();void spread_B_to_C(int coordinate_x
,int coordinate_y
); void spread_C_to_C();int unknown_num() ;int unknown
=16*16;
rand_number();mine_initialize(); print_board_D(); calculate_A_to_B();print_board_A();print_board_B();for(;unknown
=40;){ input_coordinate();spread_B_to_C(coordinate_x
,coordinate_y
);spread_C_to_C();
system("cls");print_board_D(); unknown
=unknown_num();if(unknown
==40){printf("恭喜你,你贏了!"); break;}}
}
void print_board_A()
{int i
,j
;void print_line();printf(" 棋 盤 A :\n\n");printf(" \t");for(i
=0;i
<=15;i
++){printf("%4d ",i
+1);}printf("\n\n\n\n");for(i
=0;i
<=15;i
++){printf("%d\t",i
+1);for(j
=0;j
<=15;j
++){printf("%4d ",board_A
[i
][j
]);}printf("\n\n");}print_line
;
} void print_board_B()
{int i
,j
;void print_line();printf(" 棋 盤 B :\n\n");printf(" \t");for(i
=0;i
<=15;i
++){printf("%4d ",i
+1);}printf("\n\n\n\n");for(i
=0;i
<=15;i
++){printf("%d\t",i
+1);for(j
=0;j
<=15;j
++){printf("%4d ",board_B
[i
][j
]);}printf("\n\n");}print_line
;
} void print_board_C()
{int i
,j
;void print_line();printf(" 棋 盤 C :\n\n");printf(" \t");for(i
=0;i
<=15;i
++){printf("%4d ",i
+1);}printf("\n\n\n\n");for(i
=0;i
<=15;i
++){printf("%d\t",i
+1);for(j
=0;j
<=15;j
++){printf("%4d ",board_C
[i
][j
]);}printf("\n\n");}print_line
;
} void print_line()
{printf("\n==================================\n\n");
}
int rand_number()
{int num
;num
=rand()%16;
return num
;
}
void mine_initialize()
{int rand_number();int mine_total
=0;int x
,y
;for(;mine_total
<40;){x
=rand_number();y
=rand_number();if(board_A
[x
][y
]==0){board_A
[x
][y
]=1;mine_total
++;}}
}
void calculate_A_to_B()
{int i
,j
;for(i
=0;i
<=15;i
++){for(j
=0;j
<=15;j
++){if(board_A
[i
][j
]==1){board_B
[i
][j
]=88; }else{if(i
==0&&j
==0){board_B
[i
][j
]=board_A
[i
+1][j
]+board_A
[i
][j
+1]+board_A
[i
+1][j
+1];}if(i
==0&&j
==15){board_B
[i
][j
]=board_A
[i
+1][j
]+board_A
[i
][j
-1]+board_A
[i
+1][j
-1];}if(i
==15&&j
==0){board_B
[i
][j
]=board_A
[i
-1][j
]+board_A
[i
][j
+1]+board_A
[i
-1][j
+1];}if(i
==15&&j
==15){board_B
[i
][j
]=board_A
[i
-1][j
]+board_A
[i
][j
-1]+board_A
[i
-1][j
-1];}if(i
==0&&j
!=0&&j
!=15){board_B
[i
][j
]=board_A
[i
][j
+1]+board_A
[i
][j
-1]+board_A
[i
+1][j
]+board_A
[i
+1][j
+1]+board_A
[i
+1][j
-1];}if(i
==15&&j
!=0&&j
!=15){board_B
[i
][j
]=board_A
[i
][j
+1]+board_A
[i
][j
-1]+board_A
[i
-1][j
]+board_A
[i
-1][j
+1]+board_A
[i
-1][j
-1];} if(j
==0&&i
!=0&&i
!=15){board_B
[i
][j
]=board_A
[i
+1][j
]+board_A
[i
-1][j
]+board_A
[i
][j
+1]+board_A
[i
+1][j
+1]+board_A
[i
-1][j
+1];} if(j
==15&&i
!=0&&i
!=15){board_B
[i
][j
]=board_A
[i
+1][j
]+board_A
[i
-1][j
]+board_A
[i
][j
-1]+board_A
[i
+1][j
-1]+board_A
[i
-1][j
-1];}if(i
!=0&&i
!=15&&j
!=0&&j
!=15){board_B
[i
][j
]=board_A
[i
+1][j
+1]+board_A
[i
+1][j
]+board_A
[i
+1][j
-1]+board_A
[i
][j
+1]+board_A
[i
][j
-1]+board_A
[i
-1][j
+1]+board_A
[i
-1][j
]+board_A
[i
-1][j
-1];} }}}
}
void spread_B_to_C(int coordinate_x
,int coordinate_y
)
{if(board_A
[coordinate_x
][coordinate_y
]==0){if(board_B
[coordinate_x
][coordinate_y
]==0){board_C
[coordinate_x
][coordinate_y
]=99; if(board_B
[coordinate_x
+1][coordinate_y
]==0&&coordinate_x
+1<=15&&board_C
[coordinate_x
+1][coordinate_y
]!=99){board_C
[coordinate_x
+1][coordinate_y
]=99; spread_B_to_C(coordinate_x
+1,coordinate_y
);}if(board_B
[coordinate_x
-1][coordinate_y
]==0&&coordinate_x
-1>=0&&board_C
[coordinate_x
-1][coordinate_y
]!=99){board_C
[coordinate_x
-1][coordinate_y
]=99;spread_B_to_C(coordinate_x
-1,coordinate_y
);}if(board_B
[coordinate_x
][coordinate_y
+1]==0&&coordinate_y
+1<=15&&board_C
[coordinate_x
][coordinate_y
+1]!=99){board_C
[coordinate_x
][coordinate_y
+1]=99;spread_B_to_C(coordinate_x
,coordinate_y
+1);}if(board_B
[coordinate_x
][coordinate_y
-1]==0&&coordinate_y
-1>=0&&board_A
[coordinate_x
][coordinate_y
-1]!=99){board_C
[coordinate_x
][coordinate_y
-1]=99;spread_B_to_C(coordinate_x
,coordinate_y
-1);}} if(board_B
[coordinate_x
][coordinate_y
]!=0){board_C
[coordinate_x
][coordinate_y
]=77;} }if(board_A
[coordinate_x
][coordinate_y
]==1)printf("大佬,你踩到雷了!\n");
}
void spread_C_to_C()
{int i
,j
;for(i
=0;i
<=15;i
++) {for(j
=0;j
<=15;j
++){if(i
==0&&j
==0) {if(board_C
[i
][j
]==99) {if(board_C
[i
+1][j
]==0&&board_B
[i
+1][j
]!=0){board_C
[i
+1][j
]=77;}if(board_C
[i
][j
+1]==0&&board_B
[i
][j
+1]!=0){board_C
[i
][j
+1]=77;}if(board_C
[i
+1][j
+1]==0&&board_B
[i
+1][j
+1]!=0){board_C
[i
+1][j
+1]=77;}}}if(i
==0&&j
==15) {if(board_C
[i
][j
]==99) {if(board_C
[i
+1][j
]==0&&board_B
[i
+1][j
]!=0){board_C
[i
+1][j
]=77;}if(board_C
[i
][j
-1]==0&&board_B
[i
][j
-1]!=0){board_C
[i
][j
-1]=77;}if(board_C
[i
+1][j
-1]==0&&board_B
[i
+1][j
-1]!=0){board_C
[i
+1][j
-1]=77;}}}if(i
==15&&j
==0) {if(board_C
[i
][j
]==99) {if(board_C
[i
-1][j
]==0&&board_B
[i
-1][j
]!=0){board_C
[i
-1][j
]=77;}if(board_C
[i
][j
+1]==0&&board_B
[i
][j
+1]!=0){board_C
[i
][j
+1]=77;}if(board_C
[i
-1][j
+1]==0&&board_B
[i
-1][j
+1]!=0){board_C
[i
-1][j
+1]=77;}}}if(i
==15&&j
==15) {if(board_C
[i
][j
]==99) {if(board_C
[i
-1][j
]==0&&board_B
[i
-1][j
]!=0){board_C
[i
-1][j
]=77;}if(board_C
[i
][j
-1]==0&&board_B
[i
][j
-1]!=0){board_C
[i
][j
-1]=77;}if(board_C
[i
-1][j
-1]==0&&board_B
[i
-1][j
-1]!=0){board_C
[i
-1][j
-1]=77;}}}if(i
==0&&j
!=0&&j
!=15) {if(board_C
[i
][j
]==99) {if(board_C
[i
][j
+1]==0&&board_B
[i
][j
+1]!=0){board_C
[i
][j
+1]=77;}if(board_C
[i
][j
-1]==0&&board_B
[i
][j
-1]!=0){board_C
[i
][j
-1]=77;}if(board_C
[i
+1][j
+1]==0&&board_B
[i
+1][j
+1]!=0){board_C
[i
+1][j
+1]=77;}if(board_C
[i
+1][j
]==0&&board_B
[i
+1][j
]!=0){board_C
[i
+1][j
]=77;}if(board_C
[i
+1][j
-1]==0&&board_B
[i
+1][j
-1]!=0){board_C
[i
+1][j
-1]=77;}}}if(i
==15&&j
!=0&&j
!=15) {if(board_C
[i
][j
]==99) {if(board_C
[i
][j
+1]==0&&board_B
[i
][j
+1]!=0){board_C
[i
][j
+1]=77;}if(board_C
[i
][j
-1]==0&&board_B
[i
][j
-1]!=0){board_C
[i
][j
-1]=77;}if(board_C
[i
-1][j
+1]==0&&board_B
[i
-1][j
+1]!=0){board_C
[i
-1][j
+1]=77;}if(board_C
[i
-1][j
]==0&&board_B
[i
-1][j
]!=0){board_C
[i
-1][j
]=77;}if(board_C
[i
-1][j
-1]==0&&board_B
[i
-1][j
-1]!=0){board_C
[i
-1][j
-1]=77;}}}if(j
==0&&i
!=0&&i
!=15) {if(board_C
[i
][j
]==99) {if(board_C
[i
+1][j
]==0&&board_B
[i
+1][j
]!=0){board_C
[i
+1][j
]=77;}if(board_C
[i
-1][j
]==0&&board_B
[i
-1][j
]!=0){board_C
[i
-1][j
]=77;}if(board_C
[i
+1][j
+1]==0&&board_B
[i
+1][j
+1]!=0){board_C
[i
+1][j
+1]=77;}if(board_C
[i
][j
+1]==0&&board_B
[i
][j
+1]!=0){board_C
[i
][j
+1]=77;}if(board_C
[i
-1][j
+1]==0&&board_B
[i
-1][j
+1]!=0){board_C
[i
-1][j
+1]=77;}}}if(j
==15&&i
!=0&&i
!=15) {if(board_C
[i
][j
]==99) {if(board_C
[i
+1][j
]==0&&board_B
[i
+1][j
]!=0){board_C
[i
+1][j
]=77;}if(board_C
[i
-1][j
]==0&&board_B
[i
-1][j
]!=0){board_C
[i
-1][j
]=77;}if(board_C
[i
+1][j
-1]==0&&board_B
[i
+1][j
-1]!=0){board_C
[i
+1][j
-1]=77;}if(board_C
[i
][j
-1]==0&&board_B
[i
][j
-1]!=0){board_C
[i
][j
-1]=77;}if(board_C
[i
-1][j
-1]==0&&board_B
[i
-1][j
-1]!=0){board_C
[i
-1][j
-1]=77;}}}if(i
!=0&&i
!=15&&j
!=0&&j
!=15) {if(board_C
[i
][j
]==99) {if(board_C
[i
+1][j
+1]==0&&board_B
[i
+1][j
+1]!=0){board_C
[i
+1][j
+1]=77;}if(board_C
[i
+1][j
]==0&&board_B
[i
+1][j
]!=0){board_C
[i
+1][j
]=77;}if(board_C
[i
+1][j
-1]==0&&board_B
[i
+1][j
-1]!=0){board_C
[i
+1][j
-1]=77;}if(board_C
[i
][j
+1]==0&&board_B
[i
][j
+1]!=0){board_C
[i
][j
+1]=77;}if(board_C
[i
][j
-1]==0&&board_B
[i
][j
-1]!=0){board_C
[i
][j
-1]=77;}if(board_C
[i
-1][j
+1]==0&&board_B
[i
-1][j
+1]!=0){board_C
[i
-1][j
+1]=77;}if(board_C
[i
-1][j
]==0&&board_B
[i
-1][j
]!=0){board_C
[i
-1][j
]=77;}if(board_C
[i
-1][j
-1]==0&&board_B
[i
-1][j
-1]!=0){board_C
[i
-1][j
-1]=77;}}}}}
}
void input_coordinate()
{printf("如果要標(biāo)雷,請在坐標(biāo)前加66,(如:6611 669)\n"); printf("請輸入你要點(diǎn)擊的坐標(biāo),用空格隔開,(如:11 9):");printf("\n");scanf("%d %d",&coordinate_x
,&coordinate_y
); coordinate_x
--;coordinate_y
--;if(coordinate_x
>60||coordinate_y
>60) {if(coordinate_x
>1000){coordinate_x
=coordinate_x
-6600;printf("已標(biāo)雷1,%d\n",coordinate_x
);}else if(coordinate_x
<1000){coordinate_x
=coordinate_x
-660;printf("已標(biāo)雷2,%d\n",coordinate_x
);}if(coordinate_y
>1000){coordinate_y
=coordinate_y
-6600; printf("已標(biāo)雷3,%d\n",coordinate_y
);}else if(coordinate_y
<1000){coordinate_y
=coordinate_y
-660;printf("已標(biāo)雷4,%d\n",coordinate_y
);}board_D
[coordinate_x
][coordinate_y
]=666;printf("標(biāo)雷成功\n");}
}
void print_board_D()
{int i
,j
;char char_0
=' ';char char_c
='*';char char_lei
='M';void print_line();printf(" 棋 盤 D :\n\n");printf(" \t");for(i
=0;i
<=15;i
++){printf("%4d ",i
+1);}printf("\n\n\n\n");for(i
=0;i
<=15;i
++){printf("%d\t",i
+1);for(j
=0;j
<=15;j
++){if(board_C
[i
][j
]==99)printf("%4c ",char_0
);if(board_C
[i
][j
]==77&&board_A
[i
][j
]!=1)printf("%4d ",board_B
[i
][j
]);if(board_C
[i
][j
]==77&&board_A
[i
][j
]==1)printf("%4c ",char_c
);if(board_C
[i
][j
]!=77&&board_C
[i
][j
]!=99){if(board_D
[i
][j
]==666){printf("%4c ",char_lei
);}else printf("%4c ",char_c
);} }printf("\n\n");}print_line
;
}
int unknown_num()
{int unknown
=16*16;int i
,j
;for(i
=0;i
<=15;i
++){for(j
=0;j
<=15;j
++){if(board_C
[i
][j
]!=0){unknown
--;}}}printf("\n剩余格數(shù):%d\n",unknown
);return unknown
;
}
總結(jié)
以上是生活随笔為你收集整理的C语言 扫雷小游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。