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

关于扫雷优化

1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置。
2.使用宏常量,后期可以任意修改游戏难度。
3.关于扫雷拓展模块,目前使用的方法比较low,若周围均没有,则全部显示。
4.剩余位置数使用全局变量count,必须考虑拓展之后count变化。

有待改进之处

1.需设计标记雷的步骤,增加用户体验。
2.拓展方式有待改进。
3.界面布局仍需要进行优化。

这里推荐一下我建的C/C++语言学习交流秋秋裙,前三位是:110,中间三位是:355,最后三位是:025,里面有学习不错视频教程、开发工具、电子书籍,完整的项目源码等,专业的老师解答问题!

扫雷游戏代码

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
#include<time.h>
#define ROW 12
#define COL 12
#define MINE_NUM 15
#define TOTAL 100
#pragma warning(disable:4996)
int count = TOTAL;
void inter(){printf("=======================\n");printf("=======游戏菜单========\n");printf("======1.开始游戏=======\n");printf("========2.退出=========\n");printf("=======================\n");printf("请输入您的选择: \n");
}
int GetRandIndex(int start, int end){return rand() % (end - start + 1) + start;
}
void layout(char mine[][COL], int row, int col){srand((unsigned long)time(NULL));int count = 0;while (count<MINE_NUM){int x = GetRandIndex(1, 10);int y = GetRandIndex(1, 10);if (mine[x][y] == '0'){mine[x][y] = '1';count++;}}
}void Board(char board[][COL], int row, int col){printf(" ");int i = 1;for (; i <= 10; i++){printf(" %d ", i);}printf("\n----");for (i = 1; i <= 29; i++){printf("-");}printf("\n");for (i = 1; i <= 10; i++){printf("%2d|",i);int j = 1;for (; j <= 10; j++){printf(" %c|", board[i][j]);}printf("\n");int k = 1;for (k = 1; k <= 11; k++){printf("---");}printf("\n");}}char GetMines(char mine[][COL],int row,int col){return mine[row - 1][col - 1] + mine[row - 1][col] + mine[row - 1][col + 1]\+ mine[row][col - 1] + mine[row][col + 1]\+ mine[row + 1][col - 1] + mine[row + 1][col] + mine[row +1][col + 1]-7*'0';
}
void expand(char mine[ROW][COL], char board[ROW][COL], int x, int y){if ((x >= 1) && (y >= 1) && (x <= ROW) && (y <= COL)){if (GetMines(mine, x, y) == '0'){if (x > 1 && x < 10 && y>1 && y < 10){count = count - 8;}else if((x==1&&y==1)||(x==10&&y==10) || (x == 1 && y == 10) || (x == 10 && y == 1)) {count -= 3;}else {count -= 5;}board[x - 1][y - 1] = GetMines(mine, x-1, y-1);board[x - 1][y] = GetMines(mine, x - 1, y);board[x - 1][y + 1] = GetMines(mine, x - 1, y + 1);board[x][y - 1] = GetMines(mine, x , y - 1);board[x][y + 1] = GetMines(mine, x , y + 1);board[x + 1][y - 1] = GetMines(mine, x + 1, y - 1);board[x + 1][y] = GetMines(mine, x + 1, y);board[x + 1][y + 1] = GetMines(mine, x + 1, y + 1);}}
}
void Game(){char mine[ROW][COL];  char board[ROW][COL];   memset(mine,'0',sizeof(mine));memset(board, '*', sizeof(board));layout(mine, ROW, COL);Board(mine, ROW, COL);int x = 0;int y = 0;while (1){int i = 0;Board(board, ROW, COL);printf("请选择您要排除的位置: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= ROW - 2 && y >= 1 && y <= COL - 2){if (mine[x][y] == '0'){char num = GetMines(mine,x,y);board[x][y] = num;expand(mine, board, x, y);Board(board, ROW, COL);count--;if (count == MINE_NUM){Board(board, ROW, COL);printf("你赢了!\n");break;}}else{printf("您输了!\n");Board(mine, ROW, COL);break;}printf("还有%d个位置 \n", count);}else{printf("你输入的坐标有误,请重新输入!\n");}}
}
int main(){int quit = 0;int select = 0;while (!quit){inter();scanf("%d", &select);switch (select){case 1:Game();Sleep(5000);system("cls");break;case 2:printf("再见!\n");quit = 1;break;default:printf("您的输入不正确,请重新输入!\n");break;}}system("pause");return 0;
}

相关运行样例

以上就是本文的全部内容,希望对大家的学习有所帮助

C语言学习教程,用C语言编写扫雷游戏相关推荐

  1. C语言第十二课:编写扫雷游戏(综合练习2)

    目录 前言: 一.文件建立: 1.头文件game.h: 2.函数定义文件game.c: 3.工程测试文件test.c: 二.编写井字棋游戏: 1.程序整体执行思路: 2.menu菜单: 3.game游 ...

  2. c++扫雷游戏代码_C语言学习教程,用C语言编写扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...

  3. 转 LUA语言学习教程

    转 LUA语言学习教程 写在最前面,为什么要了解LUA语言?因为WOW的宏甚至插件的编写都离不开LUA!功欲擅其事,必先利其器,如果想玩转魔兽世界,而不是被魔兽世界玩的话,先来学习一下LUA语言吧! ...

  4. LUA语言学习教程(转)

    转自:http://www.cnblogs.com/chuncn/archive/2010/07/03/1770464.html 写在最前面,为什么要了解LUA语言?因为WOW的宏甚至插件的编写都离不 ...

  5. C语言学习教程:搬山游戏开发源码

    C语言学习教程:搬山游戏开发源码 #include<stdio.h> void main() {int n,k,x,y,cc,pc,g;clrscr();puts("****** ...

  6. 最新go语言学习教程

    go语言学习教程 集合了连接go routine.go连接redis.go连接kafka等示例,所有代码均经过实践,可以直接使用 GitHub - fastbpmn/go-study: go语言的个人 ...

  7. iOS开发Swift语言学习教程-欧阳坚-专题视频课程

    iOS开发Swift语言学习教程-16345人已学习 课程介绍         Swift这套视频是针对有Objective-C/iOS基础,想转成Swift开发的学习视频,视频中从Swift语法,结 ...

  8. Go语言学习教程(十一)

    一.结构体指针 * 由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用时结构体指针完成 * 可以结合new(T)函数创建结构体指针 peo := new(People) //因为结构体本质是 ...

  9. C语言学习教程:超级玛丽游戏开发源码分享

    C语言学习教程:超级玛丽游戏开发源码分享 这里推荐一下我建的C/C++语言学习交流秋秋裙,秋秋搜索群名称:小凯C/C++语言学习之家,裙里有不错的学习教程,从入门到项目实战.学习开发用到的开发工具,专 ...

  10. net语言学习教程 net语言从入门到精通视频教程

    net语言学习教程_0基础学net语言也可以,空闲时间学习,不耽误上班.2019年net语言新课程已经上线,多种课程任您选,随到随学,互动性强,效果好! NET语言学习介绍 NET学习课程说明 NET ...

最新文章

  1. 用C#实现FTP搜索引擎
  2. NetDevOps — NETCONF 协议
  3. socket传输过程
  4. python学习使用
  5. [编程题]数字分类 (20)
  6. 三种Ext提交数据的方法(转)
  7. Java开源项目EZMorph简介
  8. 使用Aptana搭建Python开发环境
  9. 【netty】Netty并发工具-Promise
  10. 通过函数名字符串调用函数【C语言版】
  11. 使用 ADO.NET 访问 Oracle 9i 存储过程
  12. 关于单细胞批次矫正那些事(一)
  13. 如何开启/关闭Pages文稿上的字数统计功能?
  14. 【机器学习】图像预处理
  15. 财智理财7破解思路与总结
  16. 静态网络爬虫之Xpath学习
  17. Leslie cheung's Speech
  18. mac被限制什么意思_苹果ip完美解决电脑ip被限制问题
  19. 小猿日记(8) - 接口优化从13秒到3秒,我做了什么
  20. Java反射机制的原理及作用

热门文章

  1. 中国5G基站将带动155GWh以上锂电池需求
  2. catalina java opts_CATALINA_OPTS与JAVA_OPTS – 有什么区别?
  3. 开天辟地--达特茅斯会议
  4. 用低代码+BPM赋能知识文档管理系统
  5. DNS劫持使用DNS加速有哪些作用
  6. word2010分页设置页眉
  7. 2021年编程语言排行榜出炉,第一名实至名归!
  8. 阿里云商标安心注册服务失败不通过可以退款?
  9. 用户价值分层——基于RFM模型的研究分析
  10. 广州市二手房源数据采集和可视化分析(链家二手房)Python