C语言:数组的应用2——扫雷(递归实现地图变化)

2023-11-06

之前呢跟大家分享了二维数组实现的小游戏——三子棋(井字棋),大家都看懂了吗?今天给大家分享一下用数组实现的扫雷小游戏。先看看最终的效果吧。

 我设计的这个扫雷游戏,可以让玩家自己选择游戏难度,有简单,适中,困难三种模式。并利用递归的方式去改变地图,使得在视觉上看着跟真正的扫雷游戏相近。接下来我们一步一步的实现游戏的功能。

游戏开始

首先我们得让玩家知道怎么样去开始游戏,所以我们得先打印一个游戏头,让玩家自己选择是开始游戏还退出游戏。我们把打印游戏头得功能封装到一个函数里面。

// 打印游戏头
void game_head() {
	printf("######################\n");
	printf("#        1.PLAY      #\n");
	printf("#        0.EXIT      #\n");
	printf("######################\n");
}

有了游戏头之后就是实现我们游戏的主体逻辑了,就是输入1就开始游戏,输入0就结束游戏。那假如玩家在玩了一把之后还想玩怎么办呢?所以我们的 主要框架得放到一个循环中,所以代码如下

int main(){
    int input = 0;
    do{
        game_head(); // 上面提到的打印游戏头的函数
        printf("请输入1开始游戏>>");
        scanf("%d", &input);
        switch(input){
            case 1:
                printf("开始扫雷\n");
                break;
            case 0:
                printf("结束游戏\n");
                break;
            default:
                printf("输入错误,请重新输入\n");
                break;
        }
    }while(input);


    return 0;
}

 有了上面这个框架我们只需要把那些共能函数和一些其他的细节逐渐完善就好了。

我们在文章开头讲了,这个扫雷游戏是可以选择难度的。所以当玩家选择开始游戏之后,就是让玩家选择想玩的游戏难度。再想一想,这个游戏难度是不是跟游戏棋盘的大小有关呢?简单的是9*9的棋盘,适中的是16*16的棋盘,困难的是16*30的棋盘。而且不同难度的地雷数是不一样的。所以玩家选择的难易程度是和后面很多都有关联的,所以用来存放难易程度值得变量得设计成一个全局变量。

在选择了难度之后,我们就得初始化地图了。如果,我们这里采用的使用两个二维数组来完成我们的地图,一个是呈现给玩家看的地图,第二个数组就用来处理 玩游戏时的数据,比如地雷的位置放到第二个数组中,那么具体要怎么初始化呢?先看看代码:

int in = 0; //全局变量
#define ES 9
#define MD 16
#define HI 30
// 初始化数组
void init(int*** data, char*** map) {
	int i = 0;
	printf("==================\n");
	printf("      1.EASY      \n");
	printf("      2.MEZZO      \n");
	printf("      3.DIFF      \n");
	printf("==================\n");
	printf("请选择游戏难度>>");
	scanf("%d", &in);
	switch (in) {
	case EASY:
		*data = (int**)malloc(sizeof(int*) * (ES+2));
		*map = (char**)malloc(sizeof(char*) * (ES + 2));
		for (i = 0; i < ES + 2; i++) {
			(*data)[i] = (int*)malloc(sizeof(int) * (ES+2));
			(*map)[i] = (int*)malloc(sizeof(int) * (ES + 2));
		}
		for (i = 0; i < ES + 2; i++) {
			int j = 0;
			for (j = 0; j < ES + 2; j++) {
				(*data)[i][j] = 0;
				(*map)[i][j] = '*';
			}
		}
		break;
	case MEZZO:
		*data = (int**)malloc(sizeof(int*) * (MD + 2));
		*map = (char**)malloc(sizeof(char*) * (MD + 2));
		for (i = 0; i < MD + 2; i++) {
			(*data)[i] = (int*)malloc(sizeof(int) * (MD + 2));
			(*map)[i] = (int*)malloc(sizeof(int) * (MD + 2));
		}
		for (i = 0; i < MD + 2; i++) {
			int j = 0;
			for (j = 0; j < MD + 2; j++) {
				(*data)[i][j] = 0;
				(*map)[i][j] = '*';
			}
		}
		break;
	case DIFF:
		*data = (int**)malloc(sizeof(int*) * (MD + 2) );
		*map = (char**)malloc(sizeof(char*) * (MD + 2));
		for (i = 0; i < MD + 2; i++) {
			(*data)[i] = (int*)malloc(sizeof(int) * (HI + 2));
			(*map)[i] = (int*)malloc(sizeof(int) * (HI + 2));
		}
		for (i = 0; i < MD + 2; i++) {
			int j = 0;
			for (j = 0; j < HI + 2; j++) {
				(*data)[i][j] = 0;
				(*map)[i][j] = '*';
			}
		}
		break;
	default:
		break;
	}
}

当我们选择 不同的难度时,我们初始化的地图大小也是不一样的。所以在程序中我们使用了switch语句,针对不同的难度,初始化不同大小的数组。细心的朋友应该可以发现,比如我9*9的地图,初始化的二维数组大小是11*11的,这是为什么呢?这就跟扫雷游戏的原理有关了。我们在玩扫雷的时候,只要点一个格子,那个位置就会出现一个数字。这个数字是怎么来的呢,其实那就是那个格子周围一圈雷的数量。那么,如果玩家点击了地图边缘的格子,我们在判断的时候是不是就越界了呢。所以我们把数组创建大一圈,就不会越界了。

初始化地图之后就是打印我们的游戏地图了,就是把我们初始化的第一个数组打印出来就好了。同样的,不同的难度打印的地图也是不一样的。具体就看看代码吧

void DispMap(char** map) {
	int i = 0;
	int j = 0;
	system("CLS");
	switch (in) {  // in是全局变量,所以在这里可以直接用
	case EASY:
		for (i = 1; i < ES + 1; i++) {
			if (i == 1) {
				printf(" |%d", i);
			}
			else
			{
				printf(" %d", i);
			}

		}
		printf("\n");
		for (i = 1; i < ES+1; i++) {
			printf("%d|", i);
			for (j = 1; j < ES+1; j++) {
				printf("%c ", map[i][j]);
			}
			printf("\n");
		}
		break;
	case MEZZO:
		for (i = 1; i < MD + 1; i++) {
			if (i == 1) {
				printf("  |%-2d", i);
			}
			else
			{
				printf(" %-2d", i);
			}

		}
		printf("\n");
		for (i = 1; i < MD+1; i++) {
			if (i < 10)
				printf("%d |", i);
			else
				printf("%d|", i);
			for (j = 1; j < MD+1; j++) {
				printf("%c  ", map[i][j]);
			}
			printf("\n");
		}
		break;
	case DIFF:
		for (i = 1; i < HI + 1; i++) {
			if (i == 1) {
				printf("  |%-2d", i);
			}
			else
			{
				printf(" %-2d", i);
			}

		}
		printf("\n");
		for (i = 1; i < MD+1; i++) {
			if (i < 10)
				printf("%d |", i);
			else
				printf("%d|", i);
			for (j = 1; j < HI+1; j++) {
				printf("%c  ", map[i][j]);
			}
			printf("\n");
		}
		break;
	}
	
}

接着呢就是来布置地雷,在初始化地图的时候我们把data数组初始化为全0的数组。所以在布置地雷的时候,把地雷所在的位置改成1。这样,在玩家输入一个坐标后,如果在data数组中对应坐标的那个值是1的话,就说明踩到地雷了。代码如下:

// 放置地雷
void SetMine(int*** data) {
	int i = 0;
	int x = 0;
	int y = 0;
	srand((unsigned int)time(NULL));
	switch (in) {
	case EASY:
		i = 0;
		while (i < 10) {
			x = rand() % ES + 1;
			y = rand() % ES + 1;
			if ((*data)[x][y] == 0) {
				(*data)[x][y] = 1;
				i++;
			}
		}
		break;
	case MEZZO:
		i = 0;
		while (i < 30) {
			x = rand() % MD + 1;
			y = rand() % MD + 1;
			if ((*data)[x][y] == 0) {
				(*data)[x][y] = 1;
				i++;
			}
		}
		break;
	case DIFF:
		i = 0;
		while (i < 54) {
			x = rand() % MD + 1;
			y = rand() % HI + 1;
			if ((*data)[x][y] == 0) {
				(*data)[x][y] = 1;
				i++;
			}
		}
		break;
	}
}

到这一步,地雷和地图都已经布置好啦。接下来就是玩家玩游戏了,当玩家输入一个坐标(x,y)后,如果这个坐标没有地雷,我们就得计算一下它的周围一共有多少颗雷。上代码

int play_game(int** data, int x, int y) {
	int count = 0;
	if (data[x][y] == 1) {
		return 9;
	}
	else {
		if (data[x][y - 1] == 1) count++;
		if (data[x - 1][y - 1] == 1) count++;
		if (data[x - 1][y] == 1) count++;
		if (data[x - 1][y + 1] == 1) count++;
		if (data[x][y + 1] == 1) count++;
		if (data[x + 1][y + 1] == 1) count++;
		if (data[x + 1][y] == 1) count++;
		if (data[x + 1][y - 1] == 1) count++;
	}
	return count;
}

可能你又会问了“这个判断出来了怎么在地图上体现出来呢?”,所以,下面的一个函数来啦,这个函数就是改变地图。比如说玩家输入一个坐标,这个坐标的周围有3颗地雷,那么打印出来的时候,坐标位置就不是" * ",而是“ 3 ”。如果这个坐标的 周围一个雷也没有,那么这个坐标打印出来的时候就是‘ ’(空格)。然后用递归的方式,把一片雷数为0的左边变成空格。看代码:

// 更改地图
void change_map(char*** map, int** data, int x, int y) {
	int ret = 0;
	switch (in) {
	case EASY:
		if ((x <= ES && x >0) && (y <= ES && y >0)) {
			ret = play_game(data, x, y);
			if (ret != 0) {
				(*map)[x][y] = ret + 48;
				win++;
			}
			else {
				(*map)[x][y] = ' ';
				win++;
                // 如果坐标的周围一颗雷也没有  向坐标的上、下、左、 右四个方向递归
				if ((*map)[x][y - 1] == '*')  // 坐标的位置不能等于‘ * ’,是防止重复递归  
					change_map(map, data, x, y - 1);
				if ((*map)[x][y + 1] == '*')
					change_map(map, data, x, y + 1);
				if ((*map)[x - 1][y] == '*')
					change_map(map, data, x - 1, y);
				if ((*map)[x + 1][y] == '*')
					change_map(map, data, x + 1, y);
			}
		}
		break;
	case MEZZO:
		if ((x <= MD && x > 0) && (y <= MD && y > 0)) {
			ret = play_game(data, x, y);
			if (ret != 0) {
				(*map)[x][y] = ret + 48;
				win++;
			}
			else {
				(*map)[x][y] = ' ';
				win++;
				if ((*map)[x][y - 1] == '*')
					change_map(map, data, x, y - 1);
				if ((*map)[x][y + 1] == '*')
					change_map(map, data, x, y + 1);
				if ((*map)[x - 1][y] == '*')
					change_map(map, data, x - 1, y);
				if ((*map)[x + 1][y] == '*')
					change_map(map, data, x + 1, y);
			}
		}
		break;
	case DIFF:
		if ((x <= MD && x > 0) && (y <= HI && y > 0)) {
			ret = play_game(data, x, y);
			if (ret != 0) {
				(*map)[x][y] = ret + 48;
				win++;
			}
			else {
				(*map)[x][y] = ' ';
				win++;
				if ((*map)[x][y - 1] == '*')
					change_map(map, data, x, y - 1);
				if ((*map)[x][y + 1] == '*')
					change_map(map, data, x, y + 1);
				if ((*map)[x - 1][y] == '*')
					change_map(map, data, x - 1, y);
				if ((*map)[x + 1][y] == '*')
					change_map(map, data, x + 1, y);
			}
		}
		break;
	}
}

判断输赢

int is_win() {
	switch (in) {
	case EASY:
		if (win == ES*ES-10)  // win是一个全局变量
			return 1;
		break;
	case MEZZO:
		if (win == MD*MD-30)
			return 1;
		break;
	case DIFF:
		if (win == HI*HI-54);
			return 1;
		break;
	}
	return 0;
}

最后我们再把游戏的框架再完善一下:

#include"minesweeping.h"

int main() {
	int input = 0;
	int** data = NULL;
	char** map = NULL;
	int ret = 0;
	do {
		game_head();
		printf("输入1开始游戏>>");
		scanf("%d", &input);
		switch (input) {
		case PLAY:
			init(&data, &map);
			SetMine(&data);
			DispMap(map);
			int x = 0;
			int y = 0;
			
			while (1) {
				if (is_win() == 1) {
					printf("你赢了\n");
					break;
				}
				printf("请输入要查看的坐标>>");
				scanf("%d%d", &x, &y);
				ret = play_game(data, x, y);
				if (ret == 9) {
					printf("很遗憾,踩雷了\n");
					break;
				}
				else {
					change_map(&map, data, x, y);
				}
				DispMap(map);
			}
			break;
		case EXIT:
			printf("游戏结束\n");
			free(data);
			free(map);
			break;
		default:
			break;
		}
	} while (input != 0);
	return 0;
}

完整代码:https://gitee.com/damiing/game

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言:数组的应用2——扫雷(递归实现地图变化) 的相关文章

  • 内网穿透工具frp安装使用

    摘要 之前使用的 nps 目前没有维护更新了 和在使用的过程中做内网穿透的的网速应该有限制 不论云服务器带宽是多少 下载速度都比较慢 这里切换到 frp 试试 对安装和使用简单记录 其和 nps 有很大的操作配置不同之处 相关文章 内网穿透
  • 手机未来发展的趋势与挑战

    随着科技的飞速发展 手机已经成为我们生活中不可或缺的一部分 然而 随着5G 人工智能等新技术的不断涌现 手机的未来发展面临着前所未有的机遇和挑战 本文将探讨手机未来发展的趋势与挑战 一 手机未来发展的趋势 5G技术的普及 随着5G技术的不断
  • 盘点第三方支付行业中一些“专用术语”

    每个行业都有自己的行业术语 在官方场合被称为 术语 如果你是支付行业的新手 或者正在努力深入了解这个复杂但充满机遇的领域 那么掌握行业术语就是打开这扇门的关键 支付系统的需求文档和技术方案文档都充斥着专业词汇和行业术语 有些词汇容易理解 有
  • 提升口才:掌握技巧,展现自信

    口才 是现代社会中不可或缺的一种能力 无论是在职场 社交场合还是日常生活中 良好的口才都能为我们带来更多的机会和成功 然而 很多人却因为缺乏自信或者技巧不足而无法充分发挥自己的口才 那么 如何提升口才呢 下面就让我们一起来探讨这个问题 如果
  • 视频语音翻译在线哪个工具好?看我推荐

    最近大家是不是也刷到不少去东北游玩的视频啦 作为一个南方人 看到那些视频里的鹅毛大雪真的好羡慕 不过我也看见了不少出国旅行的小伙伴 纷纷抱怨说自己的外语水平不够好 在国外连问个路都会磕磕绊绊 这个时候我就想到 那怎么不用软件实现语音翻译在线
  • Camtasia2024中文绿色版本下载安装详细步骤教程

    Camtasia2024是一款功能强大的屏幕录制和视频编辑软件 它可以帮助用户轻松地记录电脑屏幕上的任何操作 并可以将录制的视频进行编辑和制作成高质量的视频教程 演示文稿 培训课程等 Camtasia具有直观的界面和易于使用的工具 包括添加
  • 手写转文字扫描软件有哪些?方便又好用的工具谁不喜欢?

    大家有没有仔细数过 你们在从小到大的学习生涯中使用了多少笔记本 反正我是经常被我妈催着把以前的笔记本丢掉 但是它们承载的可都是我学生时代的记忆 就连当时觉得复杂难懂的内容 其实也挺有意思的 所以 我一直在思考 到底有什么方法可以让我在不占用
  • 在线智能抠图软件有哪些?证件照背景颜色更换不求人

    2024年上半年全国计算机等级考试 NCRE 报名开始啦 不出意外 这次报名仍然是需要提交证件照 具体要求如下 本人近期正面免冠 白色背景 彩色证件照 不得使用生活照 美颜照 最小像素高宽为192x144 最小成像区高宽为48mmx33mm
  • 职场人最忌讳的10件事:从人性的角度揭示职场中的禁忌行为

    职场人最忌讳的10件事 从人性的角度揭示职场中的禁忌行为 在职场中 每个人都有自己的行为准则和价值观 然而 有些事情却是普遍被认为不可取的 从人性的角度来看 这些事情可能会触碰到人们的某些心理或道德底线 导致他人产生反感或不信任 本文将探讨
  • 拍照翻译用什么软件?这些软件帮你轻松实现拍照翻译

    巴山楚水凄凉地 Submission dear me 去年考过四级的朋友应该都懂这个梗吧 作文的题目咱是从头到尾看了十几遍 但还是猜不出来 submission 是啥意思 于是开头就来个 Dear submission 写完还美滋滋的觉得自
  • 在线识别图片文字工具有哪些?教你快速提取文字

    文字识别工具 也称为光学字符识别 OCR 工具 是一种能将图像中的文本信息转化为可编辑和可搜索的数字格式的过程 它是现代信息处理和人工智能领域的重要应用之一 文字识别工具的作用在于 无论是纸质文档 电子文档还是照片上的文字 都能通过该工具进
  • 机器配音在线工具有哪些? 让你的语音合成更自然

    你是不是也想成为一名大博主 随着现在的互联网时代蓬勃发展 出现了一批又一批的网红 在家里带带货 拍拍视频就能赚大钱 越来越多的人朝向网络世界进击 那么这些大博主制作一个爆款视频 必不可少的就是配音啦 但是其实很多博主用的并不是真人配音 而是
  • 处理不舒服的同事关系:实用建议与技巧

    处理不舒服的同事关系 实用建议与技巧 在工作中 我们难免会遇到一些与同事关系不和谐的情况 这些不舒服的关系可能会影响到我们的工作情绪和效率 那么 如何处理这些不舒服的同事关系呢 本文将为你提供一些实用的建议 一 保持冷静和理智 在处理同事关
  • 基于信号完整性的PCB设计原则

    最小化单根信号线质量的一些PCB设计建议 1 使用受控阻抗线 2 理想情况下 所有信号都应该使用完整的电源或地平面作为其返回路径 关键信号则使用地平面作为返回路径 3 信号的返回参考面发生变化时 在尽可能接近信号换层孔的位置增加至少一个返回
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发中常见系统梳理之背包系统的实现一

    游戏中几乎都存在大大小小的背包系统 接下来我将讲述背包系统具体是如何实现的 完整源码 以下是使用unity NGUI实现 使用txt配置的方法 后续更新UGUI Json实现的背包系统敬请期待 背包中的物品我们常常将其制作成预设体 通过改变
  • 电脑操作系统的发展史:从初级到高级的演变

    自电脑诞生以来 操作系统作为其重要组成部分 不断推动着电脑技术的进步与发展 本文将带您回顾电脑操作系统的发展历程 探究其在不同阶段的特点与影响 一 早期操作系统 真空管与批处理 在电脑诞生初期 真空管技术占主导地位 此时的操作系统尚未形成完
  • 会议设备:提升会议体验与效率的关键

    在当今高度信息化的社会 会议已成为企业 机构和团队之间交流与合作的重要方式 而会议设备的选择与使用 对于提升会议的体验与效率具有举足轻重的地位 本文将详细探讨会议设备的重要性 以及如何选择和使用合适的会议设备 以实现高效 顺畅的沟通 首先

随机推荐

  • 【Flutter 系列——1】Flutter环境搭建及配置这一篇就够了(Windows)

    最近正式入坑Flutter 首先从环境搭建开始 看了网上好多关于Windows环境搭建的资料 基本都是按官方文档写的 看完的感受是 还不如直接去看官方文档 官方英文文档传送门 Get Started Install on Windows 本
  • 数据要素流通视角下数据安全保障研究报告

    报告围绕数据要素流通视角下流通数据 流通活动 流通设施的安全需求 分析健全我国数据安全保障体系的推进思路 并从分类分级 流通环境 安全技术 协同共治等方面提出措施建议 为完善我国数据要素流通视角下数据安全保障提供有益参考与借鉴 关注公众号
  • WinCE5.0显卡驱动修改笔记

    WinCE5 0显卡驱动修改笔记公司前段时间让我在Geode上安装一个CE5 0 我把系统安装好之后发现显卡驱动不支持开发板的屏幕 我们的屏幕是800x480的 所以我只能自己动手写修改了一下驱动让它能够支持800x480 一下是我对驱动的
  • python报错code for hash md5 was not found解决方案

    因为开发机服务器不能上网 只能手动安装Python 但是装完后import hashlib出现异常 出现不支持sha256 sha512 md5等错误 现象如下 gt gt gt import hashlib ERROR root code
  • 排序算法之时间复杂度为O(N^2)的算法

    背景知识 排序算法算是比较基础的算法了 但是在面试过程中偶尔也会被问到 虽然很多语言都内置了排序函数 例如php的sort函数等等 但是还是有必要聊聊排序算法 这篇文章中将介绍时间复杂度为O N 2 的几个排序算法 本文基于从小到大排序讲解
  • react面试题(30个)

    1 React Native相对于原生的ios和Android有哪些优势 react native一套代码可以开发出跨平台app 减少了人力 节省了时间 避免了 iOS 与 Android 版本发布的时间差 开发新功能可以更迅速 等等 2
  • go语言后端调用以太坊rpc

    任务要求 使用golang作为后端语言 获取eth 私链 中的账户信息以及创建新的账号 1 启动geth geth identity aaron datadir data0 rpcport 8545 rpccorsdomain port 3
  • 分布式工程团队建设的十大教训

    转自 https www zybuluo com lsmn note 1059823 摘要 人才招聘 培养并促进分布式工程团队的发展并非一日之功 但是值得投资 Bruno提出了一些非常重要的见解 揭示了如何让团队全力以赴 而不管地理位置在哪
  • 初识springBoot

    springboot初学应该了解哪些 了解更多请看Spring Boot 初识 系列 会持续更新 Spring Boot 初识丨一 入门实战 Spring Boot 初识丨二 maven Spring Boot 初识丨三 starter S
  • springcloud搭建标配配置(参考)

    文章目录 架构图 shop parent 后端父项目 pom xml shop common 公共项目 pom xml CommonConstants UserInfo 用户对象 BusinessException 自定义异常 Common
  • SpringBoot+WebSocket+Netty实现消息推送

    实现思路 前端使用webSocket与服务端创建连接的时候 将用户ID传给服务端 服务端将用户ID与channel关联起来存储 同时将channel放入到channel组中 如果需要给所有用户发送消息 直接执行channel组的writeA
  • FusionSphere华为服务器虚拟化解决方案定位、架构、原理、应用场景

    目录 定位 应用场景 架构 原理 定位 华为fusion sphere虚拟化套件是业界领先的虚拟化解决方案 能够帮助客户解决数据中心基础设施的资源利用率低 业务上线周期时间长 数据中心能耗高等问题 应用场景 1 从应用侧来看 可应用于帮助客
  • 配置控制(自用)

    wd 123123 snh 123123
  • android开发之代理Window.Callback

    Window Callback是window类的一个内部接口 该接口包含了一系列类似于dispatchXXX和onXXX的接口 当window接收到外界状态改变的通知时 就会回调其中的相应方法 比如 当用户点击某个控件时 就会回调Windo
  • enncy-admin ant design vue 后台管理系统脚手架

    github 项目地址 https github com enncy enncy admin vue3 版本的请看我的另一个项目 https github com enncy funny blog admin 在 template 分支你可
  • Hyper-V服务开启or关闭

    1 概念 Hyper V服务是一个微软的虚拟机 所以如果要在windows上启动虚拟机的话 先需要把Hyper V服务功能关闭 2 Hyper V服务关闭 以管理员身份运行命令提示符 执行以下命令 bcdedit set hyperviso
  • BSN-DDC 基础网络关键知识点(五)跨链机制、官方 SDK 说明、开发资料汇总

    id BSN 2021 公众号 BSN研习社 2022年1月25日 区块链服务网络发展联盟 简称 BSN联盟 上线推出了 BSN DDC基础网络 并进入试商用阶段 同时 BSN DDC官网门户 ddc bsnbase com 上线发布 供D
  • C# 写入二进制文件

    试验1 using System using System IO using System Runtime Serialization Formatters Binary namespace 创建二进制文件 Serializable cla
  • 利用ChatGPT做市场营销的终极指南【建议收藏】

    ChatGPT是一种基于AI技术的语言模型 它可以与用户进行对话和交互 它被广泛应用于各个领域 包括市场营销 作为一名市场营销人员 您可以使用ChatGPT来获得创意 解决问题和生成内容 下面是190个ChatGPT提示 可帮助营销人员更好
  • C语言:数组的应用2——扫雷(递归实现地图变化)

    之前呢跟大家分享了二维数组实现的小游戏 三子棋 井字棋 大家都看懂了吗 今天给大家分享一下用数组实现的扫雷小游戏 先看看最终的效果吧 我设计的这个扫雷游戏 可以让玩家自己选择游戏难度 有简单 适中 困难三种模式 并利用递归的方式去改变地图