扫雷游戏 控制台版 C++
来源:互联网 发布:末世之变种崛起下载知 编辑:程序博客网 时间:2024/05/16 05:35
需要开一个map.txt 写入地图
地图中 *表示空地 ; x表示地雷
**********
**********
**x*******
**********
**********
**********
**********
**********
**********
然后就是扫雷的控制台代码了,只简单的检测了一下
#include <stdio.h>#include <string.h>#define SIZE 10char img_map[SIZE + 2][SIZE + 2]; // the image of a mapint 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.txtFILE *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_mapint 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 mapnum_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 = %d\n",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 = otherssumBlock = 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;}
运行截图:
0 0
- C#控制台版扫雷游戏
- 扫雷游戏 控制台版 C++
- Linux控制台版扫雷游戏
- c++ 控制台版 扫雷游戏
- 控制台扫雷游戏
- 控制台版扫雷程序
- java控制台版扫雷
- c++扫雷控制台版
- C语言扫雷控制台程序
- C语言实现简易版扫雷游戏
- 【C#】扫雷游戏编程
- C实现---扫雷游戏
- C语言-扫雷游戏
- c语言扫雷游戏
- 【C】扫雷游戏
- c语言扫雷游戏
- c语言实现扫雷(简易版,控制台)
- c简单的扫雷扫雷游戏
- CISCO NAT负载均衡
- Android 的 SDK Manager 无法启动 闪退解决方法
- NAT技术与TCP负载均衡精讲
- 1013:摆积木
- Java String杂谈
- 扫雷游戏 控制台版 C++
- object-c中@property @synthesize的用法
- java.util.concurrent.Future
- Java中文乱码相关问题深入剖析
- hbase伪分布式安装
- C语言中.C头文件和.H头文件的概念以及关系
- 关于用户态协议栈的思考
- hdu4031之树状数组
- vim插件系列之taglist