利用C语言编写扫雷游戏

这个扫雷游戏没有设置玩家第一个扫雷的坐标一定不是雷

思路:

1.要定义两个数组,一个用来显示棋盘,一个用来储存棋盘的布局信息

2.如果设计一个9✖9的扫雷游戏,就需要定义一个11✖11的数组,这样才方便判断边界所显示的周围雷的个数

3.利用随机函数埋雷,每一次扫雷操作都要进行判定,来实现对玩家输赢的判断

Utili.h

#ifndef _UTILI_H_
#define _UTILI_H_#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>#endif /* _UTILI_H_ */

Game.h

#ifndef _GAME_H_
#define _GAME_H_#include"Utili.h"#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10void InitBoard(char board[ROWS][COLS], int row, int col, char set);
void DisplayBoard(char board[ROWS][COLS], int row, int col);void SetMine(char mine[ROWS][COLS], int row, int col);int GetMineCount(char mine[ROWS][COLS], int x, int y);
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
void StartGame();#endif /* _GAME_H_ */

Game.c

#include"Game.h"void InitBoard(char board[ROWS][COLS], int row, int col, char set)
{for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){board[i][j] = set;}}
}void DisplayBoard(char board[ROWS][COLS], int row, int col)
{for (int i = 0; i <= col; ++i)printf("%d ", i);printf("\n");for (int i = 1; i <= row; ++i){printf("%d ", i);for (int j = 1; j <= col; ++j){printf("%c ", board[i][j]);}printf("\n");}
}void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;srand(time(0));while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}int GetMineCount(char mine[ROWS][COLS], int x, int y)
{return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +mine[x][y - 1] + mine[x][y + 1] +mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - (8 * '0');
}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS],int row, int col)
{int win = 0;int x, y;while (win < row * col - EASY_COUNT){printf("请输入坐标:>");scanf("%d %d", &x, &y);if ((x >= 1 && x <= row) && (y >= 1 && y <= col)){if (mine[x][y] == '1'){DisplayBoard(mine, ROW, COL);printf("游戏结束,你输了\n");break;}int n = GetMineCount(mine, x, y);show[x][y] = n + '0';system("cls");DisplayBoard(show, ROW, COL);win++;}else{printf("输入错误,请重新输入\n");}}if (win >= row * col - EASY_COUNT){printf("游戏结束,你赢了\n");DisplayBoard(mine, ROW, COL);}
}void StartGame()
{char mine[ROWS][COLS];char show[ROWS][COLS];//初始化棋盘InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//埋雷SetMine(mine, ROW, COL);//展示雷区DisplayBoard(show, ROW, COL);//扫雷FindMine(mine, show, ROW, COL);}

MineMain.c

#include"Game.h"int main(int argc, char* argv[])
{int select = 1;while (select){printf("************************\n");printf("*        1.play        *\n");printf("*        0.exit        *\n");printf("************************\n");printf("请选择:>");scanf("%d", &select);if (select == 0)break;if (select != 1){printf("输入错误,请重新输入\n");continue;}StartGame();}printf("再见\n");return 0;
}

扫雷TigerMinesweeper_01相关推荐

  1. 神经网路对于非线性问题_再论强化学习和非线性最优控制卡特彼勒问题的神经节点...

    神经网路对于非线性问题 Learnt strategies: 1-go swing up (left), resonant incremental swing up (right) 学习的策略:1向上 ...

  2. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  3. 一步一步实现扫雷游戏(C语言实现)(三)

    使用WIN32API连接窗口 此项目相关博文链接 一步一步实现扫雷游戏(C语言实现)(一) 一步一步实现扫雷游戏(C语言实现)(二) 一步一步实现扫雷游戏(C语言实现)(三) 一步一步实现扫雷游戏(C ...

  4. java递归排雷_C语言实现扫雷小游戏

    源代码链接:https://github.com/Sasura321/Minesweeper 扫雷游戏也算是一个简单的小项目,这儿是之前写的代码,来写成博文回顾一下.首先,代码要实现几个功能: 第一下 ...

  5. C语言新手写扫雷攻略3

    界面绘制好后,雷数也布置了,接下来就是游戏的运行过程了,今天先不说具体过程,再来看看需要用到的辅助函数 先是简单的画红旗,鼠标右键的功能是画红旗,至此我们都是在使用函数自己绘图,效率是低,但有助于理解 ...

  6. 如何利用C#开发“扫雷”小游戏

    本文详细说明了利用C#语言开发"扫雷"小游戏的开发过程.

  7. 破纪录了!用 Python 实现自动扫雷!

    用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧. 中级 - 0.74秒 3BV/S=60.81 相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有 ...

  8. 厉害了,用Python实现自动扫雷!

    微信改版,加星标不迷路! 转载自博客圆:chestnut_egg 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 ...

  9. Python+OpenCV实现自动扫雷,挑战扫雷世界记录!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自知乎Artrix https://zhuanlan.zh ...

最新文章

  1. Java中的对象和包
  2. 数据库的默认用户名和默认口令
  3. C语言程序设计 | 指针的进阶(一):字符指针、数组指针、指针数组、函数指针
  4. Linux Shell之一 Shell简介
  5. mysql2008优化_SQL server 2008 数据库优化常用脚本
  6. 入门——使用TensorFlow.js进行AI图像分类
  7. 计算机算法设计与分析 工作安排问题
  8. ceil() 与 floor() 与 round()
  9. 两篇一区SCI可认定A类博士!享​200平住房+40万科启!硕士也入编!
  10. 【整理】超细节的BERT/Transformer知识点
  11. OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.
  12. 段错误(核心已转储)问题的分析方法(未成功)
  13. 【问链财经-区块链基础知识系列】 第二十课 区块链联盟链攻伐战
  14. vue 运行启动命令_如何使用Vue启动和运行
  15. 5g消息服务器,5G消息开启信息服务新篇章
  16. 电脑上个别按键失灵可能原因
  17. Spark RDD 持久化
  18. php文字链接下划线怎么取消,css怎么去掉超链接下划线
  19. P1462 通往奥格瑞玛的道路
  20. MapReduce Hold不住?

热门文章

  1. flex array java_Flex中ArrayCollection 与java中的ArrayList互转
  2. linux mysql开远程访问,Linux mysql开启远程访问
  3. 手机的AI之路:从营销噱头到产业变革 | 深度
  4. 计算机系学雷活动,软件专业举行学雷锋专题活动-最新动态-成都理工大学工程技术学院电子信息与计算机工程系...
  5. Unity - 遮挡剔除(Occlusion Culling)优化
  6. Unity Shader - Occlusion Map 遮挡贴图
  7. 微博将会成为SEO的下一个利器
  8. 熊市是建立元宇宙重要时机 经济衰退往往伴随着科技变革 最后仅有少数投资者能获得回报?
  9. java this作为参数_Java this关键字
  10. dcloud mui html5plus 5+sdk