摘要:写在前面我们已经写过了三子棋小游戏肯定没玩过瘾,我们再写个扫雷小游戏吧目录写在前面认识游戏游戏规则游戏框架游戏实现效果展示全部代码文件文件文件认识游戏相信大家对扫雷都不陌生每台电脑必备的小游戏游戏规则就是在规定的时间将
我们已经写过了三子棋小游戏肯定没玩过瘾,我们再写个扫雷小游戏吧!
相信大家对扫雷都不陌生!每台电脑必备的小游戏!
就是在规定的时间将埋藏的地雷全部找到,即游戏胜利!
胜利条件:你需要在不点错雷的情况下尽可能快的将所有的雷都标记出来,如果你点错,就得重新开始,所以扫雷也有一定的运气成分。
简单说
就是将所有不是雷的地方全部标记出来,剩下地雷,游戏胜利,如果标记点到了地雷,游戏失败!
如何找到不是地雷标记出来呢?
每点开一个小格子,如果是雷,就游戏结束,如果不是就会出现数字,出现的数字表示,周围一圈雷的个数!
2
表示周围一圈的地雷数为2
个。
根据这些数字即可将地雷全部排除走向胜利!
游戏框架和三子棋一样!
//游戏框架 int input = 0; do { menu();//菜单 scanf("%d", &input); //选择 switch (input) { case 1:game(); break; case 0:printf("退出游戏/n"); break; default:printf("输入错误,请重新输入/n"); break; } } while (input);
我们写小游戏的框架基本上都是这样!
游戏的实现是我们这个游戏的重点内容!
我们如何才能将游戏实现呢?
先从原理入手!
埋雷
如何买雷呢?
我们所玩的扫雷都是由许多小格子组成的矩阵!
所以我们可以利用二维数组埋地雷!
显示该点周围雷的个数
周围雷数的计算,就是判断改点周围是非为雷,并且计算个数显示给玩家!
判断游戏状态
点到地雷说明游戏结束,将所有地雷找到,游戏胜利。
实现思想
用一个二维数组埋雷
另一个二维数组显示给玩家
当我们将雷弄成AxA
的雷阵藏雷,会发现如果我们进行周围雷数的查找是会发生数组越界,所以我们可以创建(A+2)x(A+2)
的雷阵,然后埋雷在AxA
中!
void game(){ //初始化布雷数组—— > 初始化棋盘数组—— > //设置地雷—— > 显示棋盘—— > 玩家扫雷 //埋雷 char mine[ROWS][COLS] = { 0 }; //雷区图 char show[ROWS][COLS] = { 0 }; //玩家图 //初始化棋盘 InitBoard(mine, ROWS, COLS,"0"); InitBoard(show, ROWS, COLS, "*"); //设置地雷 SetMine(mine, ROW, COL,MineCount); PrintBoard(show, ROW, COL); //玩家扫雷 int count = ROW*COL-MineCount; while (CheckMine(mine,show, ROW, COL)) { count--; PrintBoard(show, ROW, COL); if (count == 0) { printf("恭喜你,游戏胜利/n"); PrintBoard(mine, ROW, COL); break; } }}
//初始化棋盘void InitBoard(char board[ROW][COL], int row, int col, char x){ int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { board[i][j] = x; } } return ;}
//打印棋盘void PrintBoard(char board[ROW][COL], int row, int col){ int i = 0; //打印列号 for (i = 0; i <= col; i++) printf(" %d ", i); printf("/n"); for (i = 0; i < row; i++) { printf(" %d ", i+1); int j = 0; for (j = 0; j <col; j++) { printf(" %c ", board[i][j]); } printf("/n"); } return;}
//埋雷void SetMine(char board[ROW][COL], int row, int col, int count){ while (count) { int i = rand() % row; int j = rand() % col; if (board[i][j] == "0") { board[i][j] = "1"; count--; } }}
核心代码
//查雷int CheckMine(char mine[ROW][COL],char show[ROW][COL], int row, int col){ printf("请输入你要扫雷的坐标:>"); while (1) { int i = 0, j = 0; scanf("%d%d", &i, &j); if (i >=1 && i <= row && j >=1 && j <= col) { if (mine[i-1][j-1] != "1") { int count=IsMineCount(mine,i-1,j-1); show[i-1][j-1] = count+"0"; return 1; } else { printf("很遗憾,你被炸死了/n"); PrintBoard(mine, ROW, COL); return 0; } } } }int IsMineCount(char mine[ROW][COL], int x, int y){ int count = 0; int i= 0; for (i = x - 1; i <= x + 1; i++) { int j = 0; for (j = y - 1; j <=y + 1; j++) { if (mine[i][j] == "1") { count++; } } } return count;}
test.c
文件#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h"void menu(){ printf("******************************/n"); printf("********** 1.play ******/n"); printf("********** 0.exit ******/n"); printf("******************************/n"); printf("Input(1/0):>");}void game(){ //初始化布雷数组—— > 初始化棋盘数组—— > 设置地雷 //—— > 显示棋盘—— > 玩家扫雷 //埋雷 char mine[ROWS][COLS] = { 0 }; //雷区图 char show[ROWS][COLS] = { 0 }; //玩家图 //初始化棋盘 InitBoard(mine, ROWS, COLS,"0"); InitBoard(show, ROWS, COLS, "*"); //设置地雷 SetMine(mine, ROW, COL,MineCount); PrintBoard(show, ROW, COL); //玩家扫雷 int count = ROW*COL-MineCount; while (CheckMine(mine,show, ROW, COL)) { count--; PrintBoard(show, ROW, COL); if (count == 0) { printf("恭喜你,游戏胜利/n"); break; } }}
game.h
文件#pragma once#include #include #include #define ROW 9 #define COL 9#define ROWS ROW+2#define COLS COL+2#define MineCount 6void InitBoard(char board[ROWS][COLS],int row,int col,char x);void SetMine(char board[ROWS][COLS], int row, int col,int count);void PrintBoard(char board[ROW][COL], int row, int col);int CheckMine (char mine[ROWS][COLS], char show[ROW][COL], int row, int col);int IsMineCount(char mine[ROWS][COLS],int i, int j);
game.c
文件#include"game.h"void InitBoard(char board[ROW][COL], int row, int col, char x){ int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { board[i][j] = x; } } return ;}void SetMine(char board[ROW][COL], int row, int col, int count){ while (count) { int i = rand() % row; int j = rand() % col; if (board[i][j] == "0") { board[i][j] = "1"; count--; } }}void PrintBoard(char board[ROW][COL], int row, int col){ int i = 0; //打印列号 for (i = 0; i <= col; i++) printf(" %d ", i); printf("/n"); for (i = 0; i < row; i++) { printf(" %d ", i+1); int j = 0; for (j = 0; j <col; j++) { printf(" %c ", board[i][j]); } printf("/n"); } return;}int CheckMine(char mine[ROW][COL],char show[ROW][COL], int row, int col){ printf("请输入你要扫雷的坐标:>"); while (1) { int i = 0, j = 0; scanf("%d%d", &i, &j); if (i >=1 && i <= row && j >=1 && j <= col) { if (mine[i-1][j-1] != "1") { int count=IsMineCount(mine,i-1,j-1); show[i-1][j-1] = count+"0"; return 1; } else { printf("很遗憾,你被炸死了/n"); return 0; } } } }int IsMineCount(char mine[ROW][COL], int x, int y){ int count = 0; int i= 0; for (i = x - 1; i <= x + 1; i++) { int j = 0; for (j = y - 1; j <=y + 1; j++) { if (mine[i][j] == "1") { count++; } } } return count;}
持续更新..... 文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119105.html
摘要:函数游戏菜单请选择扫雷游戏退出游戏选择错误解析函数内部利用时间戳,形成随机数,主要目的是实现游戏中地雷的随机埋放。 前言 本篇文章使用C语言实现简单小游戏---扫雷。(文章最后有完整代码链接) 想必大多数人都玩过或者了解过扫雷的游戏规则,但是在这里,我们在一起重温一下扫雷的游戏规则,也更好...
摘要:上一期咱们用语言实现了三子棋的小游戏语言实现三子棋今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是玩扫雷的高手。 上一期咱们用C语言实现了三子棋的小游戏 C语言实现三子棋 今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是...
摘要:玩家选择开始游戏后,出现雷盘,并且随机布置雷。雷盘的数组大小为,方便计算扫雷时周围雷的数量,并防止数组越界。放置布置的雷的信息放置排查出雷的信息初始化雷盘初始化展示界面打印展示界面效果如下布置雷随机在数组中让十个变成作为雷。 目录 前言 一、游戏思路 二、游戏框架 1.菜单界面 1.菜单:...
摘要:目录前言前言前期的准备前期的准备游戏代码的具体实现游戏代码的具体实现完整版的扫雷小游戏代码完整版的扫雷小游戏代码总结总结前言扫雷是一款大众类的益智小游戏,于年发行。 目录 前言 前期的准备 游戏代码的具体实现 1、text.c 2、game.h 3、game.c 完整版的扫雷小游戏代码: 1...
摘要:展示雷盘和初始化雷盘不一样,展示雷盘只需要用即可,并不需要将都展示出来,只是为了我们更好的计算扫雷的位置周围的雷的数量。 目录 1、需求分析 2、程序架构 3、代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)游戏主函数实现 分析: (3)初始化函数的实现 分析: (4...
阅读 3487·2021-11-12 10:36
阅读 2859·2021-09-22 15:35
阅读 2809·2021-09-04 16:41
阅读 1165·2019-08-30 15:55
阅读 3576·2019-08-29 18:43
阅读 2071·2019-08-23 18:24
阅读 1414·2019-08-23 18:10
阅读 1923·2019-08-23 11:31