迟来的扫雷游戏

2024-01-05 02:20
文章标签 游戏 扫雷 迟来

本文主要是介绍迟来的扫雷游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天我们讲如何用C语言编写出一个简单扫雷,扫雷也算是一个比较原始的游戏了吧,那么我们今天就来实现他!

首先我们要来缕一缕游戏框架

我们在代码中我们肯定会写许多函数来实现扫雷,那么我们为了简便看出游戏的运行逻辑,我们创建一个test.c的源文件来进行大体代码主体的实现,那么我们再创建一个game.c来写各种游戏部分的功能函数,最后因为功能函数和其他库函数使用时都要声明函数和引头文件所以我们建立一个头文件game.h用来解决这些问题!!!如下!

首先我们从第一步开始布局,test.c为主体框架所以我们跟着test.c来进行讲解!首先我们先看完成的菜单选择,如下:

 do   while 循环里运用switch语句来完成!然后一一看看内容·!

menu菜单

因为简洁版我们就不弄那么复杂了!


void    game( ) 游戏大体功能

InitBorad(mine, ROWS, COLS, '0');
InitBorad(show, ROWS, COLS, '*');
Setmine(mine, ROW, COL);
Print(show, ROW, COL);
Print(mine, ROW, COL);
Findmine(mine, show, ROW, COL); 

这些函数都是放在game.c来编写实现的!!!


下面一一剖析

建立两个数组和 ROWS 和  COLS  及  ROW和 COL的原因

首先我们肯定是要运用数组知识来完成扫雷但为什么要建立两个数组呢?原因是---->一边我们要在数组中埋雷(即”1“)放在棋盘里,但我们刚开始和过程又必须要将棋盘的各各位置隐藏(即”*“)而且再扫雷过程中要显示无雷位置周围的雷数数字,所以我们必须用一个棋盘用作比对棋盘,另一个用作显示给玩家,所以我们建立两个数组即show和mine两个数组。然后是ROWS,COLS,ROW,COL为什么会有这些呢,首先我们要知道当我们在检周围雷数时是3X3的范围,当我们棋盘时ROW X COL时 ,比如9X9时,在边缘检验周围雷数时就会越界,为了不让它越界我们就要在原来多加两行两数确保四边都空一行防止越界,所以我们就有了COWS,COLS。


InitBorad(mine, ROWS, COLS, '0')    InitBorad(show, ROWS, COLS, '*') ------格式化

就简单的赋值进数组中,show数组全为”*“,mine则先赋值为”0“,后续在进行设置雷!


 

Setmine(mine, ROW, COL)---------设置雷的位置

这里用到设置随机数的知识,其实就是运用rand(),但也要利用时间戳来设置为种子,这样我们才可以使每次的随机数不一样,在这里便可以每把雷的位置不一样.


int Getmine(char arr[ROWS][COLS], int x, int y) 

 

这个函数是一个检查周围雷数的函数,注意的只要最后减去8个‘0’,也就是将字符类型通过转换成整型数字。


void expend(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y, int win) 

void expend(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y, int win)
{if (x >= 1 && x <= ROW && y >= 1 && y <= COL)     //避免坐标非法{if (mine[x][y] != '1')      //确定没有踩到雷{if (Getmine(mine, x, y) == 0)   //确定其周围没有雷时展开继续进行{if (show[x][y] == '*')   //确保其展开对象是*{show[x][y] = ' ';int i = 0, j = 0;for (i = x - 1; i <= x + 1; i++){for (j = y - 1; j <= y + 1; j++){if (show[i][j] == '*'){expend(mine, show, i, j, win);}}}}win++;}else      //当其周围有雷时显示雷数{show[x][y] = Getmine(mine, x, y) + '0';}}}}

 这个函数便是展开函数,通过上面函数可以看见我们用到了很多if语句,主要的功能其旁边也写有注释,各位可以看注释进行理解!


void Findmine(char mine[ROWS][COLS],char show [ROWS][COLS],int row,int col) 

void Findmine(char mine[ROWS][COLS],char show [ROWS][COLS],int row,int col)
{int x, y,win=0;while(win<row*col-Easy_count){scanf("%d %d", &x, &y);if (0 < x && x <= row && y <= col && y > 0 ){if (mine[x][y] == '1'){printf("太可惜了,您踩到雷了呢~~~~~\n");break;}else if (show[x][y]!='*'){printf("老弟位置已排过雷了呢~~~~~~");printf("\n您可以重新输入坐标呢~~~~~\n");}else if(mine[x][y]=='0'){expend(mine, show, x, y, win);printf("恭喜你排雷成功了\n");Print(show, ROW, COL);}}if (win == row * col - Easy_count){printf("恭喜你游戏胜利了呢~~~~~~~\n");printf("您是否决定在玩一把呢~~~~~~~~~\n\n");break;}}}

 这个函数就是玩家操作的函数,通过输入坐标进行开始扫雷,代码中的win便是函数棋盘中的*的数量。


最后这篇文章的其他细节需要各位慢慢消化,有不懂的可以私聊我!最后给大家展示所有的代码。

game.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROWS 11
#define COLS 11
#define ROW 9
#define COL 9
#define Easy_count 10
void InitBorad(char board[ROWS][COLS], int rows, int cols, char set);
void Print(char board[ROWS][COLS], int row, int col);
void Setmine(char board[ROWS][COLS], int row, int col);
void Findmine(char mine[ROWS][COLS], char[ROWS][COLS], int row, int col);
int Getmine(char arr[ROWS][COLS], int x, int y);
void expend(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y, int win);

 

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"menu()
{printf("******************************************\n");printf("******************************************\n");printf("*********** 1. play   0.exit *************\n");printf("******************************************\n");printf("******************************************\n");}void game()
{char mine[ROWS][COLS];char show[ROWS][COLS];//建立两个数组InitBorad(mine, ROWS, COLS, '0');InitBorad(show, ROWS, COLS, '*');Setmine(mine, ROW, COL);Print(show, ROW, COL);Print(mine, ROW, COL);Findmine(mine, show, ROW, COL);}int main()
{int input, i;srand((unsigned int)time(NULL));do{menu();scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏了");break;default :printf("输入错误");break;}}while (input);return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void InitBorad(char board[ROWS][COLS],int rows,int cols ,char set)
{int i, j;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = set;}}
}void Print(char board[ROWS][COLS], int row, int col)
{int i, j;for (i = 0; i <= col; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= row; i++){printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("\n");
}void Setmine(char board[ROWS][COLS],int row,int col)
{int x, y;int count = Easy_count;while (count){x = rand() % row + 1;y = rand() % col + 1;if (board[x][y] != 1&&x<=ROW&&y<=COL){board[x][y] = '1';count--;}} 
}int Getmine(char arr[ROWS][COLS], int x, int y)
{return (arr[x - 1][y - 1] + arr[x - 1][y] + arr[x - 1][y + 1] + arr[x][y - 1] + arr[x][y + 1]+ arr[x + 1][y - 1] + arr[x + 1][y + 1] + arr[x + 1][y] - 8 * '0');}void expend(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y, int win)
{if (x >= 1 && x <= ROW && y >= 1 && y <= COL){if (mine[x][y] != '1') {if (Getmine(mine, x, y) == 0){if (show[x][y] == '*'){show[x][y] = ' ';int i = 0, j = 0;for (i = x - 1; i <= x + 1; i++){for (j = y - 1; j <= y + 1; j++){if (show[i][j] == '*'){expend(mine, show, i, j, win);}}}}win++;}else{show[x][y] = Getmine(mine, x, y) + '0';}}}}void Findmine(char mine[ROWS][COLS],char show [ROWS][COLS],int row,int col)
{int x, y,win=0;while(win<row*col-Easy_count){scanf("%d %d", &x, &y);if (0 < x && x <= row && y <= col && y > 0 ){if (mine[x][y] == '1'){printf("太可惜了,您踩到雷了呢~~~~~\n");break;}else if (show[x][y]!='*'){printf("老弟位置已排过雷了呢~~~~~~");printf("\n您可以重新输入坐标呢~~~~~\n");}else if(mine[x][y]=='0'){expend(mine, show, x, y, win);printf("恭喜你排雷成功了\n");Print(show, ROW, COL);}}if (win == row * col - Easy_count){printf("恭喜你游戏胜利了呢~~~~~~~\n");printf("您是否决定在玩一把呢~~~~~~~~~\n\n");break;}}}

 

 

今天这篇文章就结束了!

希望大家多多支持!

这篇关于迟来的扫雷游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571352

相关文章

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

hihocoder1114 小Hi小Ho的惊天大作战:扫雷·一

1114 : 小Hi小Ho的惊天大作战:扫雷·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 故事背景:密室、监视器与充满危机的广场 “我们还是循序渐进,先来考虑这样一个简单化问题:”小Hi思索片刻,道:“在一个大小为2*N的广场,其中第一行里的某一些格子里可能会有至多一个地雷,而第二行的格子里全都为数字,表示第一行中距离与这个格子不超过2的格子里总共有多少个

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

第四次北漂----挣个独立游戏的素材钱

第四次北漂,在智联招聘上,有个小公司主动和我联系。面试了下,决定入职了,osg/osgearth的。月薪两万一。 大跌眼镜的是,我入职后,第一天的工作内容就是接手他的工作,三天后他就离职了。 我之所以考虑入职,是因为 1,该公司有恒歌科技的freex平台源码,可以学学,对以前不懂的解解惑。 2,挣点素材钱,看看张亮002的视频,他用了6000多,在虚幻商城买的吸血鬼游戏相关的素材,可以玩两年。我

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

如果出一个名叫白神话悟空的游戏

最近黑神话由于与原著不符引起了原著派的争议。 所以我在摸鱼的时候想到如果游科或者某个别的公司“痛改前非”不夹带私货完全复刻吴承恩百回版剧情制作一个“重走西游路”的游戏,会有一个什么样的销量?(设定为原著派已经多方渠道认证,此游戏的确没有夹带私货,绝大部分复刻了原著剧情) 游戏玩法我想了几类 超长线性有岔路蜈蚣形状地图,蜈蚣的腿部是探索区域和支线,重走西游路线,开篇就是开始取经前唐玄宗御弟cg

《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂》可以在苹果Mac电脑上玩吗?

在宏大的世界观游戏中,《黑暗之魂2:原罪学者》脱颖而出,以其探索性和挑战性征服了全球玩家的心灵。下面我们来看看《黑暗之魂2:原罪学者》是什么类型的游戏,《黑暗之魂2:原罪学者》可以在苹果电脑玩吗的相关内容。 一、《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂2:原罪学者》作为《黑暗之魂2》的增强版和重制版,是一款FromSoftware制作、BANDAI NAMCO和FromSoft

简单取石子游戏~博弈

很坑爹的小游戏,至于怎么坑爹,嘎嘎~自己研究去吧~! #include<stdio.h>#include<windows.h>#include<iostream>#include<string.h>#include<time.h>using namespace std;void Loc(int x,int y);/*定位光标*/void Welcome(); /*创建欢迎界面*/

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑