#include
#define random(x) (rand()%x)
int n=0;//-------------------------------------------完成度判断
int bomb[12][12]={{},{},{},{},{},{},{},{},{},{},{},{},};//地雷分布(地雷1、无雷0)
int tru[10][10]={{},{},{},{},{},{},{},{},{},{}};//真相数组[truth](地雷数、地雷*、误判/、空白O) int tbl[12][12]={{' ','X',1,2,3,4,5,6,7,8,9,10},
{'Y','+','-','-','-','-','-','-','-','-','-','-'}, {1,'|','_','_','_','_','_','_','_','_','_','_'}, {2,'|','_','_','_','_','_','_','_','_','_','_'}, {3,'|','_','_','_','_','_','_','_','_','_','_'}, {4,'|','_','_','_','_','_','_','_','_','_','_'}, {5,'|','_','_','_','_','_','_','_','_','_','_'}, {6,'|','_','_','_','_','_','_','_','_','_','_'}, {7,'|','_','_','_','_','_','_','_','_','_','_'}, {8,'|','_','_','_','_','_','_','_','_','_','_'}, {9,'|','_','_','_','_','_','_','_','_','_','_'},
{10,'|','_','_','_','_','_','_','_','_','_','_'}}; //棋盘数组[table](坐标系|-12、地雷数、红旗P、地雷*、爆炸X、误判/) int main()//---------------------主函数 { welcome(); do {
game(); } while (n<=9);//未胜利,继续进行游戏 if(n==10)
printf(\!\\n\全部地雷标记完成,胜利 else
printf(\!\\n\引爆地雷,失败 return 0; }
int welcome() {
int i,j,m,a,num;
printf(\to Bomb Hunter!\\nFirst of all,please input the number of bombs(eg:30):\\n\ scanf(\
printf(\ srand((int)time(0)); for (m=0;m a=random(100);//----------------------0到99生成随机数,取个位和十位 j=a+1; i=(a-j)/10+1; if(bomb[i][j]!=1) { bomb[i][j]=1; m++; } }//------------------------------------地雷数组生成 printf(\ updt_tru();//---------------tru生成 dspl();//-------------------打印棋盘 return 0; } int updt_tru()//---------------------------真相数组的生成[update_truth] { int e,f; for(e=1;e<11;e++) for(f=1;f<11;f++) { if(bomb[e][f]==1) tru[e-1][f-1]='*'; else tru[e-1][f-1]='_'; } return 0; } int updt_tbl()//---------------------------------游戏中棋盘的更新 { int i,j; for (i=1;i<11;i++) for (j=1;j<11;j++) { if(tru[i-1][j-1]!='/'&&tru[i-1][j-1]!='*') tbl[i+1][j+1]=tru[i-1][j-1]; } return 0; } int fnl_tbl()//-----------------------------结局棋盘的更新[final_table] { int i,j; for (i=1;i<11;i++) for (j=1;j<11;j++) { if(tru[i-1][j-1]=='/'||tru[i-1][j-1]=='*') tbl[i+1][j+1]=tru[i-1][j-1]; }//---------------------------------tbl的最终刷新 return 0; } int dspl()//----------------------------棋盘打印函数[display] { int s,t; updt_tbl(); printf(\ for(s=0;s<12;s++) { for(t=0;t<12;t++) if(tbl[s][t]=='_'||tbl[s][t]=='*'||tbl[s][t]=='X'||tbl[s][t]=='P'||tbl[s][t]=='/'||tbl[s][t]=='O'||tbl[s][t]=='+'||tbl[s][t]=='-'||tbl[s][t]=='|'||tbl[s][t]=='_'||tbl[s][t]==' '||tbl[s][t]=='Y') printf(\打印字符 else printf(\打印数字 printf(\ } printf(\ return 0; } int srdng(int x,int y)//-------------------------周围雷数计算[surrounding] { int z; z=bomb[x-1][y-1]+bomb[x-1][y]+bomb[x-1][y+1]+bomb[x][y-1]+bomb[x][y+1]+bomb[x+1][y-1]+bomb[x+1][y]+bomb[x+1][y+1]; return z; } int anls_1(int x,int y)//-------------------------------------左方境况分析(空白点的迭代)[analyse] { int a; a=srdng(x,y); if(a!=0) { tru[x-1][y-1]=a; tbl[x+1][y+1]=a; } else {
原创C语言扫雷程序大作业代码



