C++实现扫雷游戏(控制台版)分享!

本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下

需要开一个map.txt  写入地图

地图中 *表示空地   ; x表示地雷

**********
**********
**x*******
**********
**********
**********
**********
**********
**********

然后就是扫雷的控制台代码了,只简单的检测了一下

  #include <stdio.h>  #include <string.h>  #define SIZE 10  char img_map[SIZE + 2][SIZE + 2]; // the image of a map  int num_map[SIZE + 2][SIZE + 2]; // calculate the total number of mine in one block.  int open_map[SIZE + 2][SIZE + 2]; // which img shoud user open.  int sumMine = 0;  int sumBlock = 0;  int dir[8][2] = {{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1}};  int beyond_board (int x,int y){ // judge whether the step is out of board;   if( x < 0 || x >= SIZE || y < 0 || y >= SIZE ){   return 1; // beyond board return 1;   }   return 0;  }  void read_img_map(){  // get data from map.txt   FILE *p_file = fopen("map.txt","r");   int i = 0,j;   for (i = 0;i < SIZE;i++){   fread(img_map[i],sizeof(char),SIZE+1,p_file);   }  /* for (i = 0;i < SIZE;i++){   for (j = 0;j < SIZE;j++){   if(img_map[i][j] == '*'){   img_map[i][j] = ' ';   }   }   }  */  }     void write_num_map(){  // transfer img_map to num_map   int i = 0,j = 0,k = 0;   for (i = 0;i < SIZE;i++){   for (j = 0;j < SIZE;j++){   if (img_map[i][j] == 'x'){   sumMine++;  // the total number of mine in the map   num_map[i][j] = 9; // 9 represent a mine here   continue;   }   for (k = 0;k < 8;k++){   int stepx = i + dir[k][0],stepy = j + dir[k][1];   if ( !beyond_board (stepx,stepy) ){   if (img_map[stepx][stepy] == 'x'){    num_map[i][j] += 1;   }   }   }    }   }  /* for (i = 0;i < SIZE;i++){   for (j = 0;j < SIZE;j++){    printf("%d",num_map[i][j]);   }   printf("n");   }    */  }  void show_all_mine(){ // 在地图中显示所有的地雷的位置   int i,j;   for (i = 0;i < SIZE;i++){   for (j = 0;j < SIZE;j++){   if (num_map[i][j] == 9) {    open_map[i][j] = 1; // 找到地雷后在 openmap 中标记    }   }   }  }  void show_all_map(){   int i,j;   for (i = 0;i < SIZE;i++){   for (j = 0;j < SIZE;j++){   if(open_map[i][j]){   if(num_map[i][j] == 9){    printf("X"); // x represetn mine   }   else{    printf("%d",num_map[i][j]); // show the number has been opened   }   }   else{    printf("*");  // the block is coverd;   }   }   printf("n");   }  }  void find_empty(int x,int y){  //搜索算法   // printf("x = %d y = %dn",x,y);   // show_all_map();   if (beyond_board(x,y)){   return ;   }   if (open_map[x][y]){   return ;    }   if (!num_map[x][y]){ // 遇到零时还要继续翻上下左右   open_map[x][y] = 1;   }else if(num_map[x][y] != 9){ // 遇到数字了即搜索停止   open_map[x][y] = 1;   return ;   }   //else {  //****遇到雷时搜索停止   // return ;   // }   int i;   for (i = 0 ;i < 8;i++){   find_empty(x + dir[i][0],y + dir[i][1]);   }     }  int sum_one_open_map(){   int i,j;   int s = 0;   for (i = 0;i < SIZE;i++){   for ( j = 0;j < SIZE;j++)   if (open_map[i][j]){   s++;   }   }    return s;  }  int main()  {   read_img_map();   write_num_map();   show_all_map();   memset(open_map,0,sizeof(open_map)); // reset the open_map.   int x,y; // empty = 0 , mine = 9, number = others   sumBlock = SIZE * SIZE - sumMine;   int sum = 0;   while(sumBlock != sum){   printf("please input the postion x,y: ");   scanf("%d %d",&x,&y);   scanf("%*[^n]"); //clean the buffer   scanf("%*c");   x--;   y--;   if(beyond_board(x,y)){ // the position is beyond the board   printf("beyond the board and please input the position again:");   continue;   }   if(!num_map[x][y]){ //is empty    find_empty(x,y);     show_all_map(x,y);    }else if(num_map[x][y] == 9){ // is mine   show_all_mine();   show_all_map();   break;   }else{    // is number   open_map[x][y] = 1;   show_all_map();   }   sum = sum_one_open_map();   }   if (sum==sumBlock) printf("YOU WIN! n");   else {   printf("YOU LOSE!n");   }      return 0;  }

运行截图:

C++实现扫雷游戏(控制台版)

C++实现扫雷游戏(控制台版)

更多精彩游戏小代码,请点击《游戏专题》阅读

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解C++实现扫雷游戏(控制台版)分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/484274.html

(0)
上一篇 2020年11月10日
下一篇 2020年11月10日

精彩推荐