【C语言习题】12.扫雷游戏

文章目录

    • 1.扫雷游戏分析和设计
      • 1.1 扫雷游戏的功能说明
      • 1.2游戏界面:
      • 1.3游戏的分析和设计
        • 1.2.1 数据结构的分析
        • 1.2.2 ⽂件结构设计
    • 2.扫雷游戏的代码实现
    • 3.代码讲解


1.扫雷游戏分析和设计

1.1 扫雷游戏的功能说明

  • 使用控制台实现经典的扫雷游戏
  • 游戏可以通过菜单实现继续玩或者退出游戏
  • 扫雷的棋盘是9*9的格子
  • 默认随机布置10个雷
  • 可以排查雷
    • 如果位置不是雷,就显示周围有几个雷
    • 如果位置是雷,就炸死游戏结束
    • 把除10个雷之外的所有非雷都找出来,排雷成功,游戏结束

1.2游戏界面:

在这里插入图片描述在这里插入图片描述
初始界面排雷界面
在这里插入图片描述在这里插入图片描述
排雷失败界面排雷成功界面

为了方便演示,我把排雷成功的设置成了2x2的,方便成功。


1.3游戏的分析和设计

1.2.1 数据结构的分析

我们先看一下扫雷的图片:

在这里插入图片描述在这里插入图片描述

这一个个框框看着很像数组,事实上我们可以用数组来存放扫雷游戏需要的数据。

  • 点击前:全是*

  • 点击后:有雷,我们就存放1,没有雷就存放0。

如果我们没有被雷炸到,那么我们点击的地方会显示周围有几个雷。

在这里插入图片描述在这里插入图片描述

上面的表格里面,一开始我们不知道里面有啥,然后点了最中间的那个。

然后就出现了1(因为点击的周围有一个雷)。图2里面的雷和无雷是为了方便理解写出来的。

在这里插入图片描述

如果我们在[1][1]处点击,那么就要统计[0][0],[0][1],[0][2],[1][0],[1][2],[2][0],[2][1],[2][2]这8个地方一共有几个雷。

可如果在[2][2]这个地方点击呢?只要统计3个地方了。

难道我们要分多钟情况去考虑吗?

当然不是,我们可以建造一个比实际需要的扫雷数组大一圈的数组。

在这里插入图片描述

例如我们只需要中间的3X3的数组用作扫雷游戏,那么我们可以准备一个5X5的数组,这样每个扫雷游戏的区域都可以采用一样的方法来统计周围有几个雷了。

同样的,我们要准备两个结构一样的数组,一个用来存放雷和非雷的数据,另一个用来显示。

可以理解为一个是前端,一个是后端。

  • 然后我们让雷是1,非雷是0(后端)

  • 未知的地方放*,已知的地方显示周围雷的数字(前端)

1.2.2 ⽂件结构设计

因为工程有点大,我们可以用3个文件来完成这个游戏。

test.c //文件中写游戏的测试逻辑 
game.c //文件中写游戏中函数的实现等
game.h //文件中写游戏需要的数据类型和函数声明等

2.扫雷游戏的代码实现

game.h

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

#define EASY_COUNT 10

//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印棋盘
void DisplayBoard(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 show[ROWS][COLS], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"

//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) {
       int i = 0;
       int j = 0;
       for (i = 0; i < rows; i++) {
              for (j = 0; j < cols; j++) {
                      board[i][j] = set;
              }
       }
}
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col) {
       int i = 0;
       int j = 0;
       printf("-----------------扫雷游戏-----------------\n");
       for (j = 0; j <= col; j++) {
              printf("%d ", j);
       }
       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) {
    	//布置10个雷
 		//生成随机的坐标,布置雷

       int count = EASY_COUNT;

       //横坐标:1-9;纵坐标:1-9
       while (count) {
              int  x = rand() % row + 1;
              int  y = rand() % col + 1;

              if (board[x][y] == '0') {
                      board[x][y] = '1';
                      count--;
              }
       }
}
//计算指定位置附近雷的个数
int get_mine_count(char board[ROWS][COLS], int x, int y) {
       return (board[x - 1][y] +
              board[x - 1][y - 1] +
              board[x][y - 1] +
              board[x + 1][y - 1] +
              board[x + 1][y] +
              board[x + 1][y + 1] +
              board[x][y + 1] +
              board[x - 1][y + 1] - 8 * '0');
    //8个坐标的值要么是'0'要么是'1',加起来后减去8个'0'就可以得到他们的和了,也就是有几个雷
}
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {
       int x = 0;
       int y = 0;
       int win = 0;//找到非雷的个数
       while (win < row * col - EASY_COUNT) {
              printf("请输入要排查的坐标:>");
              scanf("%d%d", &x, &y);
              if (x >= 1 && x <= row && y >= 1 && y <= col) {
                      if (show[x][y] != '*') {
                             printf("该坐标被排查过了,不能重复排查\n");
                      }
                      else {
                             //如果是雷
                             if (mine[x][y] == '1') {
                                    printf("很遗憾,你被炸死了\n");
                                    DisplayBoard(mine, ROW, COL);
                                    break;
                             }
                             //如果不是雷
                             else {
                                    win++;
                                    //统计mine数组中x,y坐标周围有几个雷
                                    int count = get_mine_count(mine, x, y);
                                    show[x][y] = count + '0';//转换成  数字字符
                                    DisplayBoard(show, ROW, COL);
                             }
                      }
                      
              }
              else {
                      printf("输入坐标非法,请重新输入\n");
              }
       }
       if (win == row * col - EASY_COUNT) {
              printf("恭喜你,排雷成功\n");
              DisplayBoard(mine, ROW, COL);
       }
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"

void menu() {
    printf("************************************\n");
    printf("********  1. play  0. exit  ********\n");
    printf("************************************\n");
}

void game() {
    char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息
    char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息
    //初始化内容为指定的内容
    //mine 数组在没有布置雷的时候,都是‘0’
    InitBoard(mine, ROWS, COLS, '0');
    //show 数组在没有排查雷的时候,都是‘*’
    InitBoard(show, ROWS, COLS, '*');
    
    //设置雷
    SetMine(mine, ROW, COL);

    //DisplayBoard(mine, ROW, COL);
    DisplayBoard(show, ROW, COL);

    //排查雷
    FindMine(mine, show, ROW, COL);
}

int main() {
    int input = 0;
    //设置随机数的生成起点
    srand((unsigned int)time(NULL));
    do {
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input) {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误\n");
            break;
        }
    } while (input);

    return 0;
}

3.代码讲解

  1. 我们先找main()函数,在test.c文件里。

  2. int input = 0;这个定义了变量input用来让我们确认自己是玩游戏还是退出游戏。

  3. srand((unsigned int)time(NULL));这个是为了给rand 函数设定随机数种子。关于rand函数的详细解释在我之前发布的2.猜数字游戏这个文档里有详细解释,这里就不多赘述了。

    time()函数需要用到#include <time.h>这个头文件。
    rand函数的使用需要包含#include <stdlib.h>这个头文件。

  4. 接下来进入do while循环,先进入menu()函数【这个函数在test.c里面】,打印

    ************************************
    ********  1. play  0. exit  ********
    ************************************
    
  5. 然后进入【test.c】35行,printf("请选择:>");打印:请选择:>

  6. 进入【test.c】36,输入选择,根据不同选择进入switch语句里的case 1,case 0,default

  7. 进入case 0就打印退出游戏,然后退出游戏

  8. 进入default就打印选择错误,然后跳出switch语句,进入while的判断。因为input为0的时候才跳出循环,所以这里会继续进入循环。

  9. 进入case 1就进入game()函数【这个函数在test.c里面】

  10. 进入【test.c】11行char mine[ROWS][COLS] = { 0 };存放布置好的雷的信息(我们表面上看不到的后台的数据)

  11. 进入【test.c】12行char show[ROWS][COLS] = { 0 };存放排查出的雷的信息(我们看到的部分,前台的图案)

  12. 然后初始化内容为指定的内容,进入【test.c】15行 InitBoard(mine, ROWS, COLS, '0');设置mine 数组(后台)在没有布置雷的时候,都是‘0’

  13. 这个InitBoard()函数在【game.c】里面第5行,用来初始化棋盘。

    void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) {
           int i = 0;
           int j = 0;
           for (i = 0; i < rows; i++) {
                  for (j = 0; j < cols; j++) {
                          board[i][j] = set;
                  }
           }
    }
    

    这里第4个参数设置成了char set,设置的很完美,这样不管是想在里面放'*'还是'0'都可以完成,而不需要设置两个结构一样的函数。

  14. 进入【test.c】17行InitBoard(show, ROWS, COLS, '*');设置show 数组(前台)在没有排查雷的时候,都是‘*’

  15. 进入【test.c】20行 SetMine(mine, ROW, COL);用来设置雷

  16. 这个SetMine()函数在【game.c】里面第35行,用来布置雷

    //布置雷
    void SetMine(char board[ROWS][COLS], int row, int col) {
        	//布置10个雷
     		//生成随机的坐标,布置雷
    
           int count = EASY_COUNT;
    
           //横坐标:1-9;纵坐标:1-9
           while (count) {
                  int  x = rand() % row + 1;
                  int  y = rand() % col + 1;
    
                  if (board[x][y] == '0') {
                          board[x][y] = '1';
                          count--;
                  }
           }
    }
    

    因为实参是mine(mine 数组(后台)),所以这里设置的雷是给后台设置的。

  17. 进入int count = EASY_COUNT;,定义了一个变量count,这个count赋值为EASY_COUNT,EASY_COUNT在【game.h】里面第12行

    #define EASY_COUNT 10
    

    相当于一个宏定义,定义EASY_COUNT就是10。这么做有个好处,就是如果想要更改雷的数量直接更改宏定义里面的10就可以了,否则的话,我们要去定义变量的地方更改,变量多了就容易分不清。

  18. 这里是定义了有10个雷,因为count=10,【之前的宏定义里面EASY_COUNT就是10】

  19. 然后进入while循环,进入第10行,int x = rand() % row + 1;这个是给x一个1-9的随机数【x是数组横坐标】。

    为什么rand() % row + 1是1-9的随机数?

    之前在我之前发布的2.猜数字游戏这个文档里有详细解释,我取关键的一段结论出来:

    如果我们想要生成a~b的随机数,

    a + rand()%(b-a+1)
    

    这就得到了,a~b的值。

    这里面1-9就相当于:

    1 + rand()%(9-1+1)
    

    化简一下就是:

    1 + rand()%(9)
    

    前面【game.h】文件里还有四个宏定义

    #define ROW 9//代表扫雷行号9行
    #define COL 9//代表扫雷列号9列
    
    #define ROWS ROW+2//代表11行
    #define COLS COL+2//代表11列
    

    这里的ROWSCOLS是前面说过的建造一个比实际需要的扫雷数组大一圈的数组,来避免分类讨论带来的复杂情况,所以加2,大了一圈。

    让我们回到int x = rand() % row + 1;这个row是形参,形参是由实参传递过来的。它对应的实参是ROW,也就是9。

    所以符合上面化简得结果。

  20. 和上一条类似,int y = rand() % col + 1;这个是给y一个1-9的随机数【y是数组纵坐标】。

  21. 然后:

    if (board[x][y] == '0') {
        board[x][y] = '1';
        count--;
    }
    

    是一个简单的判断条件:如果我们生成随机数的地方是0(也就是没雷),那么就把0改成1。同时雷的个数就减1。然后重新进入while循环。

    如果我们生成随机数的地方是1(也就是有雷),那么就不执行这个if语句,然后重新进入while循环。

  22. 然后让我们回到【test.c】文件的第23行,DisplayBoard(show, ROW, COL);这个会让我们进入【game.c】文件的15行,为了方便看,我把代码拿下来

    //打印棋盘
    void DisplayBoard(char board[ROWS][COLS], int row, int col) {
           int i = 0;
           int j = 0;
           printf("-----------------扫雷游戏-----------------\n");
           for (j = 0; j <= col; j++) {
                  printf("%d ", j);
           }
           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");
    }
    

    show 数组(前台),show作为实参,将show数组传递给了board数组。

  23. 先定义前台数组的行号i和列号j。然后打印-----------------扫雷游戏-----------------

    在这里插入图片描述

    这个行号就是我花红色方框的那行,列号是蓝色方框那列。

  24. 进入第一个for循环打印行号0-9,然后回车。

  25. 进入第二个for循环先打印列号1然后进入内嵌的for循环,将列号为1 的那行全打印*,然后进入外面那个for循环打印列号2然后进入内嵌的for循环,依此类推。

  26. 最后打印:-----------------扫雷游戏-----------------

  27. DisplayBoard(show, ROW, COL);函数结束,进入FindMine(mine, show, ROW, COL);来排查雷。

  28. 这个会让我们进入【game.c】文件的65行,为了方便看,我把代码拿下来:

    //排查雷
    void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {
           int x = 0;
           int y = 0;
           int win = 0;//找到非雷的个数
           while (win < row * col - EASY_COUNT) {
                  printf("请输入要排查的坐标:>");
                  scanf("%d%d", &x, &y);
                  if (x >= 1 && x <= row && y >= 1 && y <= col) {
                          if (show[x][y] != '*') {
                                 printf("该坐标被排查过了,不能重复排查\n");
                          }
                          else {
                                 //如果是雷
                                 if (mine[x][y] == '1') {
                                        printf("很遗憾,你被炸死了\n");
                                        DisplayBoard(mine, ROW, COL);
                                        break;
                                 }
                                 //如果不是雷
                                 else {
                                        win++;
                                        //统计mine数组中x,y坐标周围有几个雷
                                        int count = get_mine_count(mine, x, y);
                                        show[x][y] = count + '0';//转换成  数字字符
                                        DisplayBoard(show, ROW, COL);
                                 }
                          }
                          
                  }
                  else {
                          printf("输入坐标非法,请重新输入\n");
                  }
           }
           if (win == row * col - EASY_COUNT) {
                  printf("恭喜你,排雷成功\n");
                  DisplayBoard(mine, ROW, COL);
           }
    }
    

    show 数组(前台),mine 数组(后台)

  29. .先定义了数组横坐标x和纵坐标y,初始化为0。然后定义win为找到非雷的个数。

  30. 进入while循环,如果win < row * col - EASY_COUNT那么循环继续,也就是说只要玩家排查的非雷格子数量小于需要排查的总数,游戏的主循环就会继续运行。在这个循环中,玩家输入坐标来排查雷,如果排查到雷,游戏结束;如果排查到非雷格子, win 的值会增加,并且游戏会继续。

    如果运气非常好,把所有雷都排除了,并且把其他非雷的地方也全选了,那么就会让win = row * col - EASY_COUNT从而跳出while循环,执行下面的:

    if (win == row * col - EASY_COUNT) {
        printf("恭喜你,排雷成功\n");
        DisplayBoard(mine, ROW, COL);
    }
    

    打印:恭喜你,排雷成功,然后调用DisplayBoard(mine, ROW, COL);,将输入结果打印。

  31. 在没有把雷排完前会先在循环里,先打印:请输入要排查的坐标:>,然后输入自己选择的坐标,

    if (x >= 1 && x <= row && y >= 1 && y <= col)这个是为了确认自己输入的坐标没有越界。

    然后进入内层判断,如果输入的坐标处已经不是*了,也就是之前这个坐标输入过了,就打印:该坐标被排查过了,不能重复排查

    否则就进入else,然后进入内部的if,

    //如果是雷
    if (mine[x][y] == '1') {
        printf("很遗憾,你被炸死了\n");
        DisplayBoard(mine, ROW, COL);
        break;
    }
    

    如果输入的地方在mine数组(也就是后台)里面放的是1(地雷),就会输入:很遗憾,你被炸死了

    如果没被炸死就进入else,

    //如果不是雷
    else {
        win++;
        //统计mine数组中x,y坐标周围有几个雷
        int count = get_mine_count(mine, x, y);
        show[x][y] = count + '0';//转换成  数字字符
        DisplayBoard(show, ROW, COL);
    }
    

    先给win加1,然后定义count来接受来自get_mine_count(mine, x, y);这个函数的返回值。

    这个函数在【game.c】文件的第53行,为了方便看,我把代码拿下来:

    //计算指定位置附近雷的个数
    int get_mine_count(char board[ROWS][COLS], int x, int y) {
        return (board[x - 1][y] +
                board[x - 1][y - 1] +
                board[x][y - 1] +
                board[x + 1][y - 1] +
                board[x + 1][y] +
                board[x + 1][y + 1] +
                board[x][y + 1] +
                board[x - 1][y + 1] - 8 * '0');
        //8个坐标的值要么是'0'要么是'1',加起来后减去8个'0'就可以得到他们的和了,也就是有几个雷
    }
    

    返回的值是我们输入数组坐标的身旁8个位置的字符减去8个'0'

    因为'0'-'0'=0'1'-'0'=1,8个位置依次完成这个操作就相当于8个位置加起来减去8个'0',得到的返回值就是输入坐标周围的雷的个数的值。

  32. 我们把这个值给count,然后把count的值加上'0',就可以得到输入坐标周围的雷的个数的字符。(注意上面是值,这边是字符)

  33. 然后用这个字符来替换数组输入位置原来的符号。

  34. 最后打印:DisplayBoard(show, ROW, COL);,将输入结果打印。

  35. 直到被炸死或者排雷成功游戏才会结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记笔记从学Typora开始--------------------(1)下载、安装、购买、激活

一、登录Typora官网 官网地址&#xff1a;Typora 二、鼠标往下滑&#xff0c;点击下载按钮 三、下载得到安装包&#xff0c;双击 四、一直点击下一步&#xff0c;进行安装 五、安装完成 六、启动Typoera 七、针对欢迎界面点击下一页 八、一直点击直到弹出以下软件激活界面 九…

深度盘点在当今经济形势下资深项目经理或PMO的或去或从

在当今经济形势下&#xff0c;资深项目经理&#xff08;Project Manager&#xff09;或项目管理办公室&#xff08;PMO&#xff09;的去向和选择受到多种因素的影响。以下是对他们可能面临的或去或从的深度盘点&#xff1a; 1、发展去向 1. 深化专业领域&#xff1a;在经济形势…

跨ROS系统通信:使用TCP实现节点间的直连

当涉及到在机器人操作系统&#xff08;ROS&#xff09;环境中的通信时&#xff0c;标准做法通常是在同一个ROS网络内通过话题和服务进行。但在某些特定情况下&#xff0c;比如当你有两个分布在不同网络中的ROS系统时&#xff0c;标准的通信方法可能不太适用。此时&#xff0c;一…

超实用的excel进销存管理系统(75份),自带库存预警,直接用!

进销存&#xff08;Inventory Management&#xff09;是企业管理中的一个核心组成部分&#xff0c;它涉及到商品的采购&#xff08;进货&#xff09;、销售和存储&#xff08;库存&#xff09;等环节。有效的进销存管理可以帮助企业降低成本、提高效率和客户满意度。 1. 采购管…

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…

knife4j案例

1.导入 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId> </dependency>2.在配置类中加入 knife4j 相关配置并设置静态资源映射&#xff08;否则接口文档页面无法访问&#xff…

基于Python的jieba库分析《斗破苍穹》文本中的高频词汇

分析《斗破苍穹》文本中的高频词汇 在进行文本分析时&#xff0c;了解文本中出现频率较高的词汇对于把握文本的主题和风格非常有帮助。本文将介绍如何使用Python的jieba库对《斗破苍穹》这部小说的文本进行分词处理&#xff0c;并统计高频词汇的出现次数&#xff08;本文只统计…

【机器学习】:基于决策树与随机森林对数据分类

机器学习实验报告&#xff1a;决策树与随机森林数据分类 实验背景与目的 在机器学习领域&#xff0c;决策树和随机森林是两种常用的分类算法。决策树以其直观的树形结构和易于理解的特点被广泛应用于分类问题。随机森林则是一种集成学习算法&#xff0c;通过构建多个决策树并…

图解堆排序【一眼看穿逻辑思路】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、堆的概念2、实现堆排序前的准备工作3、堆排序的思路3.1 第一步3.2 第二步 4、结语 1、…

Cannot read properties of undefined (reading ‘init‘)报错

出现这个报错是印象项目没有引echarts包 npm i echarts 下包 然后在main.js中引入 import echarts from echarts Vue.prototype.$echarts echarts 如果还不行 import * as echarts from echarts; 更改一下引入方式 ok了

OpenHarmony 实战开发——使用分布式菜单创建点餐神器

随着社会的进步与发展&#xff0c;科技手段的推陈出新&#xff0c;餐饮行业也在寻求新的突破与变革&#xff0c;手机扫描二维码点餐系统已经成为餐饮行业的未来趋势&#xff0c;发展空间巨大&#xff1b;扫码点餐&#xff0c;是“互联网餐饮”潮流的产物&#xff0c;可以有效地…

Leetcode—2244. 完成所有任务需要的最少轮数【中等】

2024每日刷题&#xff08;136&#xff09; Leetcode—2244. 完成所有任务需要的最少轮数 实现代码 class Solution { public:int minimumRounds(vector<int>& tasks) {unordered_map<int, int> map;for(int task: tasks) {map[task];}int ans 0;// freq 1 …

嵌入式学习-输入捕获

简介 框图介绍 输入通道部分 比较捕获寄存器与事件生成 相关寄存器

【论文阅读 | 三维重建】3D Gaussian Splatting for Real-Time Radiance Field Rendering(3DGS)

Abstract 辐射场方法最近彻底改变了用多张照片或视频捕获的新颖视图合成&#xff0c;然而实现高视觉质量仍然需要训练和渲染成本高昂的神经网络&#xff0c;而最近更快的方法不可避免地要牺牲速度来换取质量。对于无边界和完整的场景和1080P分辨率的渲染&#xff0c;目前没有任…

低成本、功能强大!德思特提供一体化WiFi 6E信道测试方案!

​ 作者介绍 一、方案介绍 伴随WiFi 6E与WiFi 7的提出&#xff0c;WIFI划分出一个全新的5.925GHz-7.125GHz 之间的80MHz和160MHz频段。1200MHz的带宽是迄今为止最宽的&#xff0c;是之前2.4GHz和5GHz WiFi 频段可用带宽的数倍。此外WiFi 6E引入了以下技术&#xff1a; ● 多…

全网最全的Postman接口自动化测试!

该篇文章针对已经掌握 Postman 基本用法的读者&#xff0c;即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 当前环境&#xff1a; Window 7 - 64 Postman 版本&#xff08;免费版&#xff09;&#xff1a;Chrome App v5.5.3 不同版本页面 UI 和部分…

搞大事!法国邀请芬兰公司建量子工厂

法国当地时间5月13日&#xff0c;法国总统马克龙宣布启动2024年度“选择法国”&#xff08;Choose France&#xff09;商业峰会。今年峰会召开前&#xff0c;法国赢得了创纪录的150亿欧元外国投资承诺&#xff0c;覆盖从人工智能到制药和能源等领域。 而涉及到量子领域最重磅的…

✅HTTPS和HTTP的区别是什么?

一、问题解析 HTTP和HTTPS是两种协议&#xff0c;分别是Hypertext Transfer Protocol和HyperText Transfer Protocol Secure。 HTTPS还经常被称之为HTTP over SSL或者HTTP over TSL&#xff0c;HTTPS经由HTTP进行通信&#xff0c;但利用SSL/TLS来加密数据包。 他们的区别主要…

打个样为centos安装mysql(下载安装)

文章目录 一、下载二、卸载mariadb三、创建用户和组四、解压并安装mysql五、修改my.cnf六、配置环境七、初始化数据库八、启动mysql服务、改密码配置远程链接九、完成 一、下载 https://downloads.mysql.com/archives/community/ 二、卸载mariadb 安装mysql的话会和mariadb的…

python:SunMoonTimeCalculator

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a; # 描述&#xff1a; https://github.com/Broham/suncalcPy # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # Datetime : 2024/5/14 21:59 # User …