首页 > 其他分享 >基于c语言的扫雷系统的二次开发

基于c语言的扫雷系统的二次开发

时间:2024-03-06 15:25:26浏览次数:32  
标签:基于 int MAX COL 扫雷 二次开发 ROW col row

原代码扫雷基本流程
一、基本思路
首先创建二维数组,来表示地图

每一个格子要表示的信息:

未翻开状态(草地)和已翻开状态(数字)

该格子是地雷或者不是地雷(1表示是地雷,0表示不是地雷)

使用两个二维数组来表示以上两组状态:

第一组二维数组:
char showMap[9][9];表示每个格子的翻开和未翻开状态
*表示未翻开,字符‘0’-‘8’表示已翻开的数字

第二个二维数组:
char mineMap[9][9];表示每个格子是否是地雷
‘1’表示是地雷,‘0’表示不是地雷

define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

include<string.h>

include<stdlib.h>

include<time.h>

define MAX_ROW 9

define MAX_COL 9

define MINE_COUNT 10

void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]) {
memset(showMap, '*',MAX_ROW * MAX_COL);
memset(mineMap, '0', MAX_ROW * MAX_COL);
srand((unsigned int)time(0));
//随机产生十个位置作为地雷
int mineCount = 0;
while (mineCount < MINE_COUNT ){
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (mineMap[row][col] == '1') {
continue;
}
mineMap[row][col] = '1';
mineCount++;
}
}

//形参名字叫做'map'不合适. C++标准库里有一个std::map

void print(char theMap[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
printf("%c ", theMap[row][col]);
}
printf("\n");
}
}

void update(char showMap[MAX_ROW][MAX_COL],
char mineMap[MAX_ROW][MAX_COL],int row ,int col) {
//表示周围的地雷个数
int count = 0;
for (int r = row - 1; r <= row + 1; r++) {
for (int c = col - 1; c <= col + 1; c++) {
if (r < 0 || r >= MAX_ROW || c < 0 || c >= MAX_COL) {
//此时r c坐标超出棋盘范围,直接跳出
continue;
}
if (r == row && c == col) {
continue;
}
if (mineMap[r][c] == '1') {
count++;
}
}
}

  //如果直接赋值 showMap 是char count是int  
  //假设count是2,当前row col位置的元素就被设置成了ASCII值为2的字符,而不是‘2’
  // 类似于这样的转换,只是C语言中是这么写的,其他语言一般不允许 字符类型 和 整数类型 进行混合运算
  showMap[row][col] = '0'+ count;
}

int main(){
//创建地图并初始化
char showMap[MAX_ROW][MAX_COL] = { 0 };
char mineMap[MAX_ROW][MAX_COL] = { 0 };
init(showMap, mineMap);
int openedCount = 0;
while (1) {
//加上清屏
system("cls");
//2.打印地图
print(showMap);
//TODU此处为了验证update函数的正确性
/* 先把地雷的布局打印出来
printf("=====================\n");
print(mineMap);/
//3.玩家输入坐标
int row = 0;
int col = 0;
printf("请输入坐标(row,col)

标签:基于,int,MAX,COL,扫雷,二次开发,ROW,col,row
From: https://www.cnblogs.com/xiwennoslan/p/18056672

相关文章

  • 图书管理系统二次开发
    图书管理系统以下为源代码:includeincludeincludeusingnamespacestd;classuser;classcommon;classvip;classhonored;classbook{protected:stringbook_name;stringauthor;stringpublisher;doubleprice;book*next;public:book():next(NULL){};void......
  • 基于C语言中国象棋项目的二次开发
    这是一个由C语言所编写的中国象棋项目,以下给出原项目的链接、代码、运行截图。原项目链接:https://blog.csdn.net/weixin_45590872/article/details/109308798原C语言代码如下:点击查看代码#include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>#includ......
  • C语言-猜拳游戏二次开发
    引言当探究猜拳游戏的魅力时,人们往往会陶醉于其古老的历史和简单的规则之中。作为一种源远流长的竞技娱乐活动,猜拳游戏早已深入人们的生活,成为一种普遍且愉快的社交互动方式。然而,这看似简单的游戏背后却蕴含了深刻的智慧。在短暂的选择过程中,参与者不仅在思考自己的选择,更需要推......
  • 基于图书购买系统的二次开发
    这是大一学习c++的一位同学的大作业,里面存在着诸多缺点,我对其中的一部分进行了改进,增加了一部分功能,但是还是有一些bug我至今修复不了。这是系统原本的功能。在此基础上我添加了书籍排序,查找书籍和删除书籍的功能,并且对增加书籍进行了修改。首先我先讲讲对增加书籍的修改可......
  • Python实现五子棋人机对战的二次开发
    Python实现人机对战的二次开发    在网上找到了一个使用python实现五子棋游戏,其中通过加入一个简单的AI算法实现了人机对战的功能,我觉得这个人机对战还是蛮有意思的,下面我分析一下五子棋游戏的规则、棋盘表示方法、AI算法的实现原理以及代码实现过程。最后二次开发时引入新的......
  • 如何基于容器网络流量指标进行弹性伸缩
    本文分享自华为云社区《【自定义指标HPA】基于容器网络流量指标进行弹性伸缩》,作者:可以交个朋友。一、背景业务程序非CPU、memeory敏感类业务,希望可以基于流量指标进行HPA弹性伸缩,但是大部分程序并没有集成PrometheusSDK相关代码进行插桩。此时可以通过cAdvisor提供的容器网......
  • 基于unity和c#的障碍跑酷游戏的二次开发
    一、设计背景近年来,虚拟现实技术取得了突飞猛进的发展,为游戏行业带来了新的机遇。通过将跑酷游戏与虚拟现实技术相结合,可以为玩家提供更加真实、沉浸式的游戏体验,让玩家仿佛置身于现实世界中的跑酷场景中。现代游戏越来越注重玩家之间的互动和竞技。跑酷游戏可以设置多人在线模......
  • 基于java的彩票选号系统的二次开发
    引言:在网上看到了一个较为简易的基于java的彩票选号系统,其主要通过后台生成中奖号码,用户选择并输入号码的方式进行,界面设计较为的简陋,源代码也只实现了较为基础的功能,并存在一些问题,比如用户输入错误时的逻辑问题;故而我在源代码的基础上进行了一定的界面美化和功能的补全,以下先附......
  • 基于Struts2 MVC的人事管理系统的二次开发
    引言这系统是一个基于JavaWeb开发和Struts2框架的简单用户管理系统。主要功能包括用户的登录、注册、查看用户列表、更新用户信息、以及删除用户等操作。系统使用了MySQL数据库存储用户信息,通过DAO模式实现了数据访问逻辑的分离。通过Struts2框架,实现了前后端的交互,通过XML配置......
  • 自习室管理系统二次开发
    引言自习室是大学中非常重要的地方,自习室学习氛围比较浓,安静得只剩下奋笔疾书和键盘敲击的声音,更加适合需要备考和考研的学生。当学生们在某一时间暂时没课时,也可以到自习室进行短暂的学习。自习室作为面对全体师生都可以活动的场所,完善的自习室管理系统和相应的规章制度尤为重要......