网站开发公司盈利/seo sem
文章目录
- 一、开始时的基本思维:
- 二、进入游戏的逻辑(test.c文件中实现)
- 三、游戏的编写
-
- 1. 初始化棋盘
-
- I. test.c
- II. game.h
- III. game.c
- 2.打印棋盘
-
- I. test.c
- II. game.h
- III. game.c
- 3.布置雷
-
- I. test.c
- II. game.h
- III. game.c
- 4.排查雷
-
- I. test.c
- II. game.h
- III. game.c
- 四、完整代码
-
- 1.test.c
- 2.game.h
- 3.game.c
前言:本次扫雷分为三个文件,分别为test.c、game.h、game.c文件,其中test.c文件主要是用来实现扫雷的逻辑,game.c用于编写游戏的主要实现方法。
一、开始时的基本思维:
这里我们可以看到要实现初级的扫雷需要9 * 9的格子,所以需要使用一个二维数组,而我们需要创建两个棋盘,一个是用于放雷的(玩家不可见),一个是用于排查显示的。
二、进入游戏的逻辑(test.c文件中实现)
#include "game.h"void menu() {printf("-------------欢迎进入超好玩的扫雷游戏---------------
");printf("--------------- 1.play ---------------
");printf("--------------- 0.exit ---------------
");printf("--------------------------------------------------
");
}
void test() {int input = 0;do {menu();//打印菜单printf("请输入1/0: ");scanf("%d", &input);printf("
");switch (input) {case 1:printf("进入游戏
");break;case 0:printf("退出游戏:
");break;default:printf("你很调皮哦没有输入正确的数字,请重新输入!
");}} while(input);
}
int main() {test();return 0;}
这里头文件的引用就不再介绍了讲三子棋的时候有说过。这里我们来看看效果:
这里我们可以看到进入游戏的逻辑没有问题,这时就可以把case 1:中的 printf(“进入游戏 ”);改为game函数了。
三、游戏的编写
1. 初始化棋盘
I. test.c
void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 }; //用于放雷char show[ROWS][COLS] = { 0 }; //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0'); //这里我们把数组全部初始化为'0',代表没有雷 InitBoard(show, ROWS, COLS, '*'); //这里用'*'进行显示}
II. game.h
//头文件的包含
#include <stdio.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char a);
这里使用#define是方便于改变。如果想做难度高的扫雷可以随时改变棋盘大小。
III. game.c
#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char a) {int i = 0;int j = 0;for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j] = a;}}
}
2.打印棋盘
初始化完后我们就需要打印棋盘了。
I. test.c
void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 }; //用于放雷char show[ROWS][COLS] = { 0 }; //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROW, COL, '0'); //这里我们把数组全部初始化为'0',代表没有雷 InitBoard(show, ROW, COL, '*'); //这里用'*'进行显示//打印棋盘PrintBoard(mine, ROW, COL);PrintBoard(show, ROW, COL);}
这里传的数组还是11* 11,因为我们只操作中间的9*9的数,所以在传行和列时只需要传大小为9的就行。
II. game.h
//头文件的包含
#include <stdio.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
III. game.c
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;for (i = 1; i <= row; i++) { for (j = 1; j <= col; j++) { printf(" %c ", board[i][j]);}printf("
"); //打印完一行需要换行}
}
这里我们可以看到棋盘打印出来了,但是这样的话玩家进行判断时还要数他是几行几列,有点麻烦所以可以加上坐标。
可以改为:
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;//打印列号for (i = 0; i <= col; i++) {printf("%d ", i);}printf("
");for (i = 1; i <= row; i++) {printf("%d ", i); //打印行号for (j = 1; j <= col; j++) {printf("%c ", board[i][j]);}printf("
"); //打印完一行需要换行}
}
接下来我们来看看结果:
3.布置雷
当我们实现棋盘的打印后就可以布置雷了
I. test.c
void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 }; //用于放雷char show[ROWS][COLS] = { 0 }; //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0'); //这里我们把数组全部初始化为'0',代表没有雷 InitBoard(show, ROWS, COLS, '*'); //这里用'*'进行显示//打印棋盘//PrintBoard(mine, ROW, COL);//printf("
");//PrintBoard(show, ROW, COL);//布置雷PutMine(mine, ROW, COL);PrintBoard(mine, ROW, COL);
}
注意想要使用rand函数需要在test函数里加入:
srand((unsigned int)time(NULL));
II. game.h
//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define COUNT 10//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);
使用rand函数时需要包含#include <stdlib.h>这个头文件,time函数需要包含#include <time.h>头文件。
III. game.c
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col) {int count = 10;//10个雷while (count) {int x = rand() % row + 1;//生成1~9的随机数int y = rand() % col + 1;if (mine[x][y] == '0') { //排除1重复在一个位置的可能mine[x][y] = '1';count--;}}
}
通过下图可以看出我们成功的布置了10个雷:
4.排查雷
I. test.c
void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 }; //用于放雷char show[ROWS][COLS] = { 0 }; //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0'); //这里我们把数组全部初始化为'0',代表没有雷InitBoard(show, ROWS, COLS, '*'); //这里用'*'进行显示//打印棋盘//PrintBoard(mine, ROW, COL);//printf("
");//PrintBoard(show, ROW, COL);//布置雷PutMine(mine, ROW, COL);//PrintBoard(mine, ROW, COL);PrintBoard(show, ROW, COL);//排雷FineMine(mine, show, ROW, COL);
}
II. game.h
//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);
//排雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
III. game.c
//排雷//判断玩家输入坐标周围有几个雷
int mine_count(char mine[ROWS][COLS], int x, int y) {return mine[x - 1][y] +mine[x - 1][y - 1] +mine[x][y - 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] +mine[x][y + 1] +mine[x - 1][y + 1] - (8*'0');//周围有8格所以乘8个'0'
}
void FineMine(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 - 10) { //当排了71次后就表示赢了 printf("请输入坐标: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) { //限制输入1~9的数if (mine[x][y] == '1') { //中雷printf("恭喜你被雷砸上天了,祝你旅行愉快,游戏结束
");PrintBoard(mine, row, col);//打印break;}else {int num = mine_count(mine, x, y); //判断玩家输入坐标周围有几个雷并且返回,需要用mine数组判断show[x][y] = num + '0'; //因为num是整型所以需要加一个'0'使其变为字符型。加了'0'后还是num这个数。PrintBoard(show, row, col);win++;}}else {printf("你输入的值不在范围内,请重新输入
");}}if (win == row * col - 10) {printf("恭喜你,你成功了,剩下的都是雷
");PrintBoard(mine, row, col); //赢了打印雷在哪里}
}
对字符转化的思想及判断周围有几个雷的思想:
运行结果:
从图中可以看出,当输入坐标时,它就会显示周围有几个雷
踩雷时:
赢时:
为了方便这里我们可以在头文件用#define MINE_COUNT规定雷的总数,这样需要改时就在头文件改即可,为了快速测出赢了我们设置80给雷并且显示mine函数:
此时代码变为:
game.h
//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINE_COUNT 80//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);
//排雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
game.c
这里涉及到用#define MINE_COUNT雷的改变为布雷时候和排雷时
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col) {int count = MINE_COUNT;while (count) {int x = rand() % row + 1;//生成1~9的随机数int y = rand() % col + 1;if (mine[x][y] == '0') { //排除1重复在一个位置的可能mine[x][y] = '1';count--;}}
}//排雷//判断玩家输入坐标周围有几个雷
int mine_count(char mine[ROWS][COLS], int x, int y) {return mine[x - 1][y] +mine[x - 1][y - 1] +mine[x][y - 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] +mine[x][y + 1] +mine[x - 1][y + 1] - (8*'0');//周围有8格所以乘8个'0'
}
void FineMine(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 - MINE_COUNT) { //当排了71次后就表示赢了 printf("请输入坐标: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) { //限制输入1~9的数if (mine[x][y] == '1') { //中雷printf("恭喜你被雷砸上天了,祝你旅行愉快,游戏结束
");PrintBoard(mine, row, col);//打印break;}else {int num = mine_count(mine, x, y); //判断玩家输入坐标周围有几个雷并且返回,需要用mine数组判断show[x][y] = num + '0'; //因为num是整型所以需要加一个'0'使其变为字符型。加了'0'后还是num这个数。PrintBoard(show, row, col);win++;}}else {printf("你输入的值不在范围内,请重新输入
");}}if (win == row * col - MINE_COUNT) {printf("恭喜你,你成功了,剩下的都是雷
");PrintBoard(mine, row, col);//赢了打印雷在哪里}
}
如图可以看到当我们输入3 8时就赢了:
赢了:
四、完整代码
1.test.c
#include "game.h"
void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 }; //用于放雷char show[ROWS][COLS] = { 0 }; //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0'); //这里我们把数组全部初始化为'0',代表没有雷InitBoard(show, ROWS, COLS, '*'); //这里用'*'进行显示//打印棋盘//PrintBoard(mine, ROW, COL);//printf("
");//PrintBoard(show, ROW, COL);//布置雷PutMine(mine, ROW, COL);PrintBoard(mine, ROW, COL);printf("
");PrintBoard(show, ROW, COL);//排雷FineMine(mine, show, ROW, COL);
}void menu() {printf("-------------欢迎进入超好玩的扫雷游戏-------------
");printf("--------------- 1.play ---------------
");printf("--------------- 0.exit ---------------
");printf("--------------------------------------------------
");
}
void test() {int input = 0;srand((unsigned int)time(NULL));do {menu();//打印菜单printf("请输入1/0: ");scanf("%d", &input);printf("
");switch (input) {case 1:game();break;case 0:printf("退出游戏:
");break;default:printf("你很调皮哦没有输入正确的数字,请重新输入!
");}} while(input);
}
int main() {test();return 0;
}
2.game.h
//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINE_COUNT 10//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);
//排雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
3.game.c
#include "game.h"//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char a) {int i = 0;int j = 0;for (i = 0; i < rows; i++) { //这里一定要初始化全部,不然后面计算周围有几个雷时会出错。for (j = 0; j < cols; j++) { board[i][j] = a;}}
}//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;//打印列号for (i = 0; i <= col; i++) {printf("%d ", i);}printf("
");for (i = 1; i <= row; i++) {printf("%d ", i); //打印行号for (j = 1; j <= col; j++) {printf("%c ", board[i][j]);}printf("
"); //打印完一行需要换行}
}//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col) {int count = MINE_COUNT;while (count) {int x = rand() % row + 1;//生成1~9的随机数int y = rand() % col + 1;if (mine[x][y] == '0') { //排除1重复在一个位置的可能mine[x][y] = '1';count--;}}
}//排雷//判断玩家输入坐标周围有几个雷
int mine_count(char mine[ROWS][COLS], int x, int y) {return mine[x - 1][y] +mine[x - 1][y - 1] +mine[x][y - 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] +mine[x][y + 1] +mine[x - 1][y + 1] - (8*'0');//周围有8格所以乘8个'0'
}
void FineMine(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 - MINE_COUNT) { //当排了71次后就表示赢了 printf("请输入坐标: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) { //限制输入1~9的数if (mine[x][y] == '1') { //中雷printf("恭喜你被雷砸上天了,祝你旅行愉快,游戏结束
");PrintBoard(mine, row, col);//打印break;}else {int num = mine_count(mine, x, y); //判断玩家输入坐标周围有几个雷并且返回,需要用mine数组判断show[x][y] = num + '0'; //因为num是整型所以需要加一个'0'使其变为字符型。加了'0'后还是num这个数。PrintBoard(show, row, col);win++;}}else {printf("你输入的值不在范围内,请重新输入
");}}if (win == row * col - MINE_COUNT) {printf("恭喜你,你成功了,剩下的都是雷
");PrintBoard(mine, row, col);//赢了打印雷在哪里}
}
好了,扫雷就暂时讲到这里了,因博主能力有限,这次的扫雷小游戏还有很多可以优化的地方,如右键标记,输入一个坐标会展开一片等等。当然等博主再厉害点会优化的这些功能的。喜欢的可以点个赞哦。
相关文章:

(C语言篇)扫雷的实现
文章目录 一、开始时的基本思维:二、进入游戏的逻辑(test.c文件中实现)三、游戏的编写 1. 初始化棋盘 I. test.cII. game.hIII. game.c 2.打印棋盘 I. test.cII. game.hIII. game.c 3.布置雷 I. test.cII. game.hIII. game.c 4.排查雷 I. test.cII. game.hIII. gam…...

华为手表开发:WATCH 3 Pro(8)获取位置服务
华为手表开发:WATCH 3 Pro(8)获取位置服务初环境与设备文件夹:文件新增第二页面geolocation.hmlgeolocation.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包:system.router首页效果点击结果按钮跳转后…...

AnLogicFPGA设计的时序约束及时序收敛
本篇博文讲了三个内容:时序约束基本概念、时序约束命令、时序收敛技巧 时序约束基本概念 时序设计的实质就是满足每一个触发器的建立(setup)时间和保持(hold)时间。 建立时间(Tsu) 触发器的时钟信号沿到来以前&…...

ubuntu22.10安装sogou输入法后不能输入中文字符(可以输入中文标点符号)
问题描述 想在ubuntu22.10系统上安装sogou中文输入法,按照sogou输入法网站给出的步骤安装后,发现无法输入中文字符,但是可以输入中文标点符号。 sogou网站:https://shurufa.sogou.com/linux/guide 寻找答案1 通过各种百度和必…...

基于微信小程序的生活日用品交易平台 的设计与实现
基于微信小程序的生活日用品交易平台 的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一…...

15:高级篇 - CTK 事件与监听
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 生命周期层事件 在 Plugin 生命周期的不同状态相互转换时,CTK Plugin Framework 会发出各种不同的事件,以供事先注册好的事件监听器处理,这些事件被称为“生命周期层事件”。CTK Plugin Framework 支持的…...

SpringBoot Notes
文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程:6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…...

CoreDNS
目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置(1)开开启日志服务(2)特定域名使用自定义 DNS 服务器(3&…...

码农饭碗不保——ChatGPT正在取代Coder
码农饭碗不保——ChatGPT正在取代Coder 最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章,不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么,可以先看一下这篇文章,然后再回来继续。 与ChatGPT对话很有趣,…...

PAT (Advanced Level) Practice 1004 Counting Leaves
1004 Counting Leaves题目翻译代码分数 30 作者 CHEN, Yue 单位 浙江大学 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one test case. Eac…...

基于Redis实现的分布式锁
基于Redis实现的分布式锁什么是分布式锁分布式锁主流的实现方案Redis分布式锁Redis分布式锁的Java代码体现优化一:使用UUID防止误删除优化二:LUA保证删除原子性什么是分布式锁 单体单机部署中可以为一个操作加上锁,这样其他操作就会等待锁释…...

2023年,还找算法岗工作吗?
点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达2023年春招(补招)已经大规模启动了!距离2023年暑期实习不到2个月!距离2024届校招提前批不到4个月!距离2024届秋招正式批不到6个月&a…...

正点原子ARM裸机开发篇
裸机就是手动的操作硬件来实现驱动设备,后面会有驱动框架不需要这么麻烦 第八章 汇编 LED 灯实验 核心过程 通过汇编语言来控制硬件(驱动程序) 代码流程 1、使能 GPIO1 时钟 GPIO1 的时钟由 CCM_CCGR1 的 bit27 和 bit26 这两个位控制&…...

20222023华为OD机试 - 压缩报文还原(JS)
压缩报文还原 题目 为了提升数据传输的效率,会对传输的报文进行压缩处理。 输入一个压缩后的报文,请返回它解压后的原始报文。 压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。 注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。 …...

SheetJS的部分操作
成文时间:2023年2月18日 使用版本:"xlsx": "^0.18.5" 碎碎念: 有错请指正。 这个库自说自话升级到0.19。旧版的文档我记得当时是直接写在github的README上。 我不太会使用github,现在我不知道去哪里可以找到…...

pytest总结
这里写目录标题一、pytest的命名规则二、界面化配置符合命名规则的方法前面会有运行标记三、pytest的用例结构三部分组成四、pytest的用例断言断言写法:五、pytest测试框架结构六、pytest参数化用例1、pytest参数化实现方式2、单参数:每一条测试数据都会…...

CNI 网络分析(九)Calico IPIP
文章目录环境流量分析Pod 间Node 到 PodPod 到 serviceNode 到 serviceNetworkPolicy理清和观测网络流量环境 可以看到,在宿主机上有到每个 pod IP 的路由指向 veth 设备 到对端节点网段的路由 指向 tunl0 下一跳 ens10 的 ip 有到本节点网段 第一个 ip 即 tunl0 的…...

分布式任务调度(XXL-JOB)
什么是分布式任务调度? 任务调度顾名思义,就是对任务的调度,它是指系统为了完成特定业务,基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。通常任务调度的程序是集成在应用中的,比如:…...

Django框架之模型视图--Session
Session 1 启用Session Django项目默认启用Session。 可以在settings.py文件中查看,如图所示 如需禁用session,将上图中的session中间件注释掉即可。 2 存储方式 在settings.py文件中,可以设置session数据的存储方式,可以保存…...

二极管的“几种”应用
不知大家平时有没有留意,二极管的应用范围是非常广的,下面我们来看看我想到几种应用,也可以加深对电路设计的认识: A,特性应用: 由于二极管的种类非常之多,这里这个大类简单罗列下:…...

github上传本地文件详细过程
repository 也就是俗称的仓库 声明:后续操作基于win10系统 前提:有一个github账号、电脑安装了git(官方安装地址) 目的: 把图中pdf文件上传到github上的个人仓库中 效果: 温馨提示: git中复制: ctrl insert…...

常用聚类算法分析
1. 什么是聚类 1.1. 聚类的定义 聚类(Clustering)是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起…...

OSG三维渲染引擎编程学习之五十八:“第五章:OSG场景渲染” 之 “5.16 简单光源”
目录 第五章 OSG场景渲染 5.16 简单光源 5.16.1 场景中使用光源 5.16.2 简单光源示例 第五章 OSG场景渲染 OSG存在场景树和渲染树,“场景数”的构建在第三章“OSG场景组...

80211无线网络架构
无线网络架构物理组件BSS(Basic Service Set)基本服务集BSSID(BSS Identification)ssid(Service Set Identification)ESS(Extended Service Set)扩展服务集物理组件 无线网络包含四…...

基于springboot+vue的便利店库存管理系统
基于springbootvue的便利店库存管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景…...

3|物联网控制|计算机控制-刘川来胡乃平版|第1章:绪论|青岛科技大学课堂笔记|U1 ppt
目录绪论(2学时)常用仪表设备(3学时)计算机总线技术(4学时)过程通道与人机接口(6学时)数据处理与控制策略(6学时)网络与通讯技术(3学时࿰…...

js打印本地pdf(使用HttpPrinter打印插件)
js打印本地pdf(使用HttpPrinter打印插件)第一步:启动HttpPrinter打印插件第二步:用浏览器打开示例文件\调用示例\websocket协议示例\html\打印pdf.html输入pdf地址 点击 “下载并打印pdf文件”按钮,就可以静默打印了。…...

华为OD机试 - 双十一(Python) | 机试题算法思路 【2023】
最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...

2020年UML 秋季期末测试题
1.UML的全称是(B )。A.Unified Making LanguageB.Unified Modeling LanguageC.Unified Meodem languageD.Unify Modeling Language2.UML主要应用于( C)。A.基于螺旋模型的结构化开发方法B.基于数据的数据流开发方法C.基于对象的面…...

SpringCloud - Ribbon负载均衡
目录 负载均衡流程 负载均衡策略 Ribbon加载策略 负载均衡流程 Ribbon将http://userservice/user/1请求拦截下来,帮忙找到真实地址http://localhost:8081LoadBalancerInterceptor类对RestTemplate的请求进行拦截,然后从Eureka根据服务id获取服务列表&…...