• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言 扫雷程序的实现

C语言 扫雷程序的实现

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言扫雷程序,c语言扫雷程序设计,简单c语言程序 扫雷,c语言扫雷程序代码,程序逻辑和c语言实现等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C语言 扫雷程序的实现

这个游戏可以实现根据选择坐标后所显示无雷区范围的不同分为简单 ,普通和困难

游戏程序中,实现了游戏的计时(分钟)功能,实现了扫雷游戏的最基础功能。

 定义了一个9*9的棋盘,玩家只要根据提示选择游戏,和难度;

 根据提示输入 合法的坐标,如输入不合法则会进行提示;

 扫雷结束则会提示;如触雷则游戏自动结束;

整个游戏设计中主要的函数为:

1、初始化地雷棋盘和显示棋盘

2、棋盘打印函数

3、扫雷函数的实现

4、游戏主函数

大家可以在宏定义中改变棋盘大小,雷的个数,以及显示的无雷区范围。

废话不说 直接上代码:(未优化,请多包涵 )

<pre name="code" class="objc">#ifndef __MINE_H__ 
#define __MINE_H__ 
 
#define LINES 11     // 棋盘的行 
#define ROWS 11     // 棋盘的列 
#define mine_MAX 10    // 雷的数目 
#define EAXY 3      // 简单显示的范围 
#define COMMON 2     // 普通显示的范围 
#define DIFFICULT 1     // 困难显示的范围 
 
enum op 
{ 
 EXIT, 
 PLAY 
}; 
void game(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows);  //游戏基本实现函数 
void init_mine(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows);// 初始化棋盘函数 
void play_EAXY_game(char mine[LINES][ROWS],char text[LINES][ROWS]);    // 简单游戏函数 
void play_COMMON_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ;   //普通游戏函数 
void play_DIFFICULT_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ;  //困难游戏函数 
void mine_EAXY_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]);    //简单扫雷实现 
void mine_COMMON_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]);   //普通扫雷实现 
void mine_DIFFICULT_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]) ;  //困难扫雷实现 
void print(char tab[LINES][ROWS]); //打印棋盘 
 
#endif 
</div>

#include<stdio.h> 
#include"mine.h" 
#include<stdlib.h> 
#include<time.h> 
void init_mine(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows)  //初始化显示棋盘和雷盘 
{ 
 int i; 
 int j; 
 int a; 
 int b; 
 int count=0; 
 for(i=1; i<LINES-1;i++)   //初始化显示棋盘 
 { 
  for(j=1; j<ROWS-1;j++) 
  { 
   text[i][j]='*'; 
  } 
 } 
 for(i=1; i<LINES-1;i++)   //初始化雷盘 
 { 
  for(j=1; j<ROWS-1;j++) 
  { 
   mine[i][j]='1'; 
  } 
 } 
 srand((unsigned)time(NULL)); //随机产生两个数 
 while(count<mine_MAX) 
 { 
  a = rand()%9 + 1; 
  b = rand()%9 + 1; 
  if(mine[a][b]!='0') 
  { 
   mine[a][b]='0';    //定义雷为字符 0 
   count++; 
  } 
 } 
} 
void print(char tab[LINES][ROWS])      //打印棋盘函数 
{ 
 int i;  //行 
 int j;  //列 
 
 for(i=0;i<LINES-1;i++)  //定义第一行的打印 
 { 
  printf("%d ",i); 
 } 
 printf("\n"); 
 for(i=1; i<LINES-1;i++)  //输出棋盘 
 { 
  printf("%d",i); 
  printf("%c",'|'); 
  for(j=1; j<ROWS;j++) 
  { 
   printf("%c ",tab[i][j]); 
  } 
  printf("\n"); 
 } 
 
} 
void mine_EAXY_sweep(char mine[LINES][ROWS],char text[LINES][ROWS])    //简单整个游戏进程 
{ 
 int a; 
 int b; 
 int count = 0;  // 雷的个数 
 do     //是否将雷全部扫完 
 { 
  int i; 
  int j; 
  int x; 
  int y; 
  print(text); 
  print(mine); 
flag:  printf("请输入坐标=》"); 
  scanf("%d %d",&a,&b); 
  if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*') 
   { 
    printf("输入不合法!\n"); 
    goto flag; 
  } 
  else 
 if(mine[a][b]=='0')   //判断是否触雷 
 { 
  printf("您踩雷了!\n"); 
  break; 
 } 
 else 
 { 
  for(i=(a-EAXY);i<=(a+EAXY);i++) 
  { 
    for(j=(b-EAXY);j<=(b+EAXY);j++) 
    { 
     if(mine[i][j]=='1') 
     { 
      int x=0;         //周围雷的数量 
      if(mine[i-1][j-1]=='0') 
      { 
       x++; 
      } 
       if(mine[i-1][j]=='0') 
      { 
       x++; 
      }  
       if(mine[i-1][j+1]=='0') 
      { 
       x++; 
      }  
       if(mine[i][j-1]=='0') 
      { 
       x++; 
      }  
       if(mine[i][j+1]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j-1]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j+1]=='0') 
      { 
       x++; 
      }  
       text[i][j]=(x+'0'); 
     } 
 
    } 
  } 
 } 
  for(x=1;x<=(LINES-2);x++) 
  { 
   for(y=1;y<=(ROWS-2);y++) 
   { 
    if(text[x][y]=='*') 
     count++; 
   } 
  } 
  
 }while(count>mine_MAX); 
 if(count==mine_MAX) 
 { 
  printf("恭喜你 扫雷成功!\n"); 
 } 
} 
void mine_COMMON_sweep(char mine[LINES][ROWS],char text[LINES][ROWS])    //普通整个游戏进程 
{ 
 int a; 
 int b; 
 int count; 
 do     //是否将雷全部扫完 
 { 
  int i; 
  int j; 
  int x; 
  int y; 
   count = 0;  // 雷的个数 
  print(text); 
  print(mine); 
flag:  printf("请输入坐标=》"); 
  scanf("%d %d",&a,&b); 
  if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*') 
   { 
    printf("输入不合法!\n"); 
    goto flag; 
  } 
  else 
 if(mine[a][b]=='0')   //判断是否触雷 
 { 
  printf("您踩雷了!\n"); 
  break; 
 } 
 else 
 { 
  for(i=(a-COMMON);i<=(a+COMMON);i++) 
  { 
    for(j=(b-COMMON);j<=(b+COMMON);j++) 
    { 
     if(mine[i][j]=='1') 
     { 
      int x=0;         //周围雷的数量 
      if(mine[i-1][j-1]=='0') 
      { 
       x++; 
      } 
       if(mine[i-1][j]=='0') 
      { 
       x++; 
      }  
       if(mine[i-1][j+1]=='0') 
      { 
       x++; 
      }  
       if(mine[i][j-1]=='0') 
      { 
       x++; 
      }  
       if(mine[i][j+1]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j-1]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j+1]=='0') 
      { 
       x++; 
      }  
       text[i][j]=(x+'0'); 
     } 
 
    } 
  } 
  print(text); 
 } 
  for(x=1;x<=(LINES-2);x++) 
  { 
   for(y=1;y<=(ROWS-2);y++) 
   { 
    if(text[x][y]=='*') 
     count++; 
   } 
  } 
  
 }while(count>mine_MAX); 
 if(count==mine_MAX) 
 { 
  printf("恭喜你 扫雷成功!\n"); 
 } 
} 
void mine_DIFFICULT_sweep(char mine[LINES][ROWS],char text[LINES][ROWS])    //困难整个游戏进程 
{ 
 int a; 
 int b; 
 int count ;  // 雷的个数 
 do     //是否将雷全部扫完 
 { 
  int i; 
  int j; 
  int x; 
  int y; 
  count = 0; 
  print(text); 
  print(mine); 
flag:  printf("请输入坐标=》"); 
  scanf("%d %d",&a,&b); 
  if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*') 
   { 
    printf("输入不合法!\n"); 
    goto flag; 
  } 
  else 
 if(mine[a][b]=='0')   //判断是否触雷 
 { 
  printf("您踩雷了!\n"); 
  break; 
 } 
 else 
 { 
  for(i=(a-DIFFICULT);i<=(a+DIFFICULT);i++) 
  { 
    for(j=(b-DIFFICULT);j<=(b+DIFFICULT);j++) 
    { 
     if(mine[i][j]=='1') 
     { 
      int x=0;         //周围雷的数量 
      if(mine[i-1][j-1]=='0') 
      { 
       x++; 
      } 
       if(mine[i-1][j]=='0') 
      { 
       x++; 
      }  
       if(mine[i-1][j+1]=='0') 
      { 
       x++; 
      }  
       if(mine[i][j-1]=='0') 
      { 
       x++; 
      }  
       if(mine[i][j+1]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j-1]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j]=='0') 
      { 
       x++; 
      }  
       if(mine[i+1][j+1]=='0') 
      { 
       x++; 
      }  
       text[i][j]=(x+'0'); 
     } 
 
    } 
  } 
  print(text); 
 } 
  for(x=1;x<=(LINES-2);x++) 
  { 
   for(y=1;y<=(ROWS-2);y++) 
   { 
    if(text[x][y]=='*') 
     count++; 
   } 
  } 
  
 }while(count>mine_MAX); 
 if(count==mine_MAX) 
 { 
  printf("恭喜你 扫雷成功!\n"); 
 } 
} 
</div>




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言 扫雷程序的实现
  • 基于C语言实现的扫雷游戏代码

相关文章

  • 2017-05-28哈夫曼的c语言实现代码
  • 2017-05-28基于list循环删除元素,迭代器失效的问题详解
  • 2017-05-28C++如何通过ostringstream实现任意类型转string
  • 2017-05-28C++ 关于STL中sort()对struct排序的方法
  • 2017-05-28错误:sem_union的存储大小未知问题的解决方法
  • 2017-05-28c++中冒号(:)和双冒号(::)的使用说明
  • 2017-05-28C语言接口与实现方法实例详解
  • 2017-05-28C++实现二叉树非递归遍历方法实例总结
  • 2017-05-28C++实现判断字符串是否回文实例解析
  • 2017-05-28C++实现DES加密算法实例解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言数据结构二叉树简单应用
    • 解析C++中四种强制类型转换的区别详解
    • 关于memcpy和memmove的一点重要说明
    • C++面试题之数a、b的值互换(不使用中间变量)
    • 进制详解:二进制、八进制和十六进制
    • c语言打开文件函数使用方法
    • Cocos2d-x UI开发之菜单类使用实例
    • 深入解析C语言中的内存分配相关问题
    • 浅析C语言中typeof关键字用法
    • 详解设计模式中的模板方法模式及在C++中的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有