当前位置: 首页 > news >正文

35.第二阶段x86游戏实战2-C++遍历技能

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:34.第二阶段x86游戏实战2-游戏数据保存与定位(特征码定位基址)

上一个内容里使用特征码进行定位了基址偏移,本次就来使用C++把技能数据遍历出来

首先新加一个按钮

遍历技能按钮的点击事件,也是遍历技能入口代码

遍历技能二叉树代码

结构.cpp文件:主要新加 技能二叉数函数、AsmGetMonsterData函数

#include "pch.h"
#include "结构.h"DWORD R_rwjz = *(DWORD*)((DWORD)GetModuleHandleA("Game.exe") + 0x5A6AF4);//人物基地址
DWORD R_jnecs2 = *(DWORD*)(JNECS2);
DWORD R_jnecs = *(DWORD*)(JNECS);
DWORD R_jnlq = *(DWORD*)(JNLQ);void R_人物属性::初始化()
{__try {/**GetModuleHandleA("Game.exe")返回Game.exe模块的模块基址*///DWORD 状态基址 = (DWORD)GetModuleHandleA("Game.exe") + 0x59EF6C;/**(DWORD*)状态基址 的意思是把 状态基址 的值当成内存地址*(DWORD*)状态基址 意思把内存地址里的值取出来*//*	DWORD 状态偏移 = *(DWORD*)状态基址 + 0x60;DWORD 状态偏移1 = *(DWORD*)状态偏移 + 0x14C;状态 = *(DWORD*)状态偏移1;*/DWORD RW偏移 = ReadDword(R_rwjz + 0xc);M_通用包 = ReadWord(RW偏移 + 0x2c);M_走路包 = ReadWord(RW偏移 + 0x30);//状态 = ReadDword(状态偏移1);fX = ReadFloat(RW偏移 + 0x3C);fY = ReadFloat(RW偏移 + 0x44);pName = "";pName = ReadStr((char*)(ReadDword(ReadDword(RW偏移 + 0x148) + 0x10) + 0x2c));血量 = ReadFloat(ReadDword(ReadDword(RW偏移 + 0x148) + 0x10) + 0x8);}__except (1) {Call_输出调试信息("读物人物信息异常\r\n");}
}void R_遍历背包::遍历背包()
{try {DWORD s = 0;//DWORD JZ = (DWORD)GetModuleHandleA("Game.exe") + 0x59F458;DWORD JZ = (DWORD)GetModuleHandleA("Game.exe") + 0x59F490;DWORD JZpy = ReadDword(ReadDword(JZ) + 0x181C4);背包[0].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x14); // 道具背包数量背包[1].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x15); // 材料背包数量背包[2].背包数量 = ReadDword(ReadDword(JZ) + 0x181C4 + 0x16);// 任务背包数量for (int i = 0; i < 3; i++){CString str;str.Format(L"数量2:%d %d %d", 背包[0].背包数量, 背包[1].背包数量, 背包[2].背包数量);//AfxMessageBox(str);for (int  j = 0; j < 背包[i].背包数量; j++){if (i == 0) {s = j;}if (i == 1)s = j + 背包[0].背包数量;if (i == 2)s = j + 背包[0].背包数量 + 背包[1].背包数量;列表[s].dwObject = ReadDword(JZpy + j * 4);if (列表[s].dwObject != 0) {DWORD 值 = ReadDword(列表[s].dwObject + 0x2C);列表[s].pName = ReadStr((char*)ReadDword(值 + 0x18));列表[s].p使用等级 = ReadDword(值 + 0x20);列表[s].简介 = ReadStr((char*)ReadDword(值 + 0x1c));;列表[s].p数量 = (BYTE)ReadByte(ReadDword(列表[s].dwObject + 0x14) + 0x58);}else{列表[s].pName = "";列表[s].p数量 = 0;列表[s].简介 = "";列表[s].p使用等级 = 0;}d数量++;}JZpy = JZpy + 0x80;// 扩展背包大小,写死0x80,扩展背包大小0x80/0x47=十进制的32}}catch (...){Call_输出调试信息("tlhj   返回背包信息异常\r\n");}}void R_周围遍历::周围二叉数(DWORD Tree, R_人物属性 rw)
{try{int ss = 0;ss++;if (ss < 5000){BYTE data = -1;data = ReadByte(Tree + 0xd);DWORD 左子树 = ReadDword(Tree + 0x0);DWORD 右子树 = ReadDword(Tree + 0x8);if (data == 0){列表[d数量].dwObject = ReadDword(Tree + 0x14);列表[d数量].id = ReadDword(列表[d数量].dwObject + 0x2c);列表[d数量].fX = ReadFloat(列表[d数量].dwObject + 0x3c);//坐标X列表[d数量].fY = ReadFloat(列表[d数量].dwObject + 0x44);列表[d数量].PType = ReadByte(ReadDword(列表[d数量].dwObject + 0x24) + 0x14);if ((int)列表[d数量].fX == 100 && (int)列表[d数量].fY == 100){}else{// 计算最近距离的公式,所有游戏通用,看不懂死记住就行,小学的公式列表[d数量].距离 = sqrt((rw.fX - 列表[d数量].fX)*(rw.fX - 列表[d数量].fX) + (rw.fY - 列表[d数量].fY)*(rw.fY - 列表[d数量].fY));列表[d数量].pName = "";//Call_输出调试信息("-----r2-------%x", AA);列表[d数量].pName = ReadStr((char *)(ReadDword(ReadDword(列表[d数量].dwObject + 0x148) + 0x10) + 0x2c));列表[d数量].血量 = ReadFloat(ReadDword(ReadDword(列表[d数量].dwObject + 0x148) + 0x10) + 0x8);d数量++;}周围二叉数(左子树, rw);周围二叉数(右子树, rw);}}}catch (...){Call_输出调试信息("tlhj   遍历二叉数异常\r\n");}
}
DWORD R_blzw = *(DWORD*)((DWORD)GetModuleHandleA("Game.exe") + 0x59F008);
void R_周围遍历::AsmGetMonsterData()
{Sleep(10);try{DWORD dwTreeBase = *(DWORD*)(R_blzw + 0x54);dwTreeBase = *(DWORD*)(dwTreeBase + 0x4);DWORD dwEnvTreeBase = dwTreeBase;Call_输出调试信息("-----q-------");if (dwEnvTreeBase) {R_人物属性 rw;rw.初始化();d数量 = 0;周围二叉数(dwEnvTreeBase, rw);//遍历二叉树}//正确取到二叉树基址}catch (...){Call_输出调试信息("tlhj   得到二叉数根结点异常\r\n");}
}R_人物属性 R_周围遍历::遍历最近怪物()
{this->AsmGetMonsterData();R_人物属性 a;R_人物属性 人物;人物.初始化();try{if (this->d数量 > 0){for (int i = 0; i < (int)this->d数量; i++){for (int j = i + 1; j < (int)this->d数量; j++){if (this->列表[i].距离 > this->列表[j].距离){a = this->列表[j];this->列表[j] = this->列表[i];this->列表[i] = a;}}}if (d数量 >= 1){return this->列表[d数量 - 2];}else{return 人物;}}return 人物;}catch (...){Call_输出调试信息("tlhj   返回最近怪物信息异常\r\n");}
}void R_遍历技能::技能二叉数2(DWORD Tree)
{try{BYTE data = 0;data = ReadByte(Tree + 0xd);DWORD 左子树 = ReadDword(Tree + 0x0);DWORD 右子树 = ReadDword(Tree + 0x8);if (data == 0){列表[d数量].dwObject = ReadDword(Tree + 0x14);列表[d数量].pName = ReadStr((char *)ReadDword(Tree + 0x14) + 0x8);d数量++;技能二叉数2(左子树);技能二叉数2(右子树);}}catch (...){Call_输出调试信息("天龙怀旧   遍历二叉数异常\r\n");}
}void R_遍历技能::AsmGetMonster()
{try{DWORD dwTreeBase = ReadDword(R_jnecs2 + 0x28);dwTreeBase = ReadDword(dwTreeBase + 0x4);DWORD dwEnvTreeBase = dwTreeBase;if (dwEnvTreeBase) {d数量 = 0;技能二叉数2(dwEnvTreeBase);//遍历二叉树}//正确取到二叉树基址}catch (...){Call_输出调试信息("天龙怀旧   得到二叉数根结点异常\r\n");}
}void R_遍历技能::技能二叉数(DWORD Tree)
{try{BYTE data = 0;data = ReadByte(Tree + 0xd);DWORD 左子树 = ReadDword(Tree + 0x0);DWORD 右子树 = ReadDword(Tree + 0x8);if (data == 0){列表[d数量].dwObject = Tree;列表[d数量].pID = ReadByte(Tree + 0x10);列表[d数量].pName = ReadStr((char *)ReadDword(ReadDword(Tree + 0x18) + 0xc));列表[d数量].冷却ID = ReadDword(ReadDword(Tree + 0x18) + 0x40);DWORD dwTreeBase = ReadDword(R_jnlq + 0x18164);DWORD 冷却时间 = ReadDword(dwTreeBase + 列表[d数量].冷却ID * 3 * 4);char* a = "";if (冷却时间 == 0 || 冷却时间 == 0xffffffff) {a = "未冷却";}else {a = "冷却";}列表[d数量].冷却 = a;d数量++;技能二叉数(左子树);技能二叉数(右子树);}}catch (...){Call_输出调试信息("天龙怀旧   遍历二叉数异常\r\n");}
}void R_遍历技能::AsmGetMonsterData()
{try{DWORD	dwTreeBase = ReadDword(R_jnecs + 0x60);dwTreeBase = ReadDword(dwTreeBase + 0x148);dwTreeBase = ReadDword(dwTreeBase + 0x10);dwTreeBase = ReadDword(dwTreeBase + 0x2A44);dwTreeBase = ReadDword(dwTreeBase + 0x4);DWORD dwEnvTreeBase = dwTreeBase;if (dwEnvTreeBase) {d数量 = 0;技能二叉数(dwEnvTreeBase);//遍历二叉树}//正确取到二叉树基址}catch (...){Call_输出调试信息("天龙怀旧   得到二叉数根结点异常\r\n");}
}

结构.h文件:新加 R_技能属性结构、R_遍历技能结构

#pragma once
#include <string>#define  BLZW (DWORD)GetModuleHandleA("Game.exe") + 0x59EFA4//遍历周围 和人物状态同一个
using namespace std;
struct R_人物属性
{DWORD 状态;FLOAT 血量;DWORD 最大血量;FLOAT fX;FLOAT fY;DWORD id;DWORD dwObject;DWORD PType;DWORD M_走路包;FLOAT 距离;DWORD M_通用包;PCHAR pName = "";void 初始化();
};struct R_背包属性 {DWORD dwObject;string pName;BYTE p数量;string 简介;DWORD p使用等级;
};struct R_背包类
{BYTE 背包数量 = 0;
};struct R_遍历背包 {R_背包类 背包[0x3];R_背包属性 列表[0x100];DWORD d数量 = 0;void 遍历背包();
};struct 坐标 {FLOAT x;FLOAT y;
};struct R_周围遍历
{R_人物属性 列表[0x100];DWORD d数量 = 0;void 周围二叉数(DWORD Tree, R_人物属性 dw);void AsmGetMonsterData();R_人物属性 遍历最近怪物();};struct R_技能属性
{DWORD dwObject;string pName;DWORD 冷却ID;DWORD pID;string 冷却;
};struct R_遍历技能
{R_技能属性 列表[0x100];DWORD d数量 = 0;void 技能二叉数2(DWORD Tree);void AsmGetMonster();void 技能二叉数(DWORD Tree);void AsmGetMonsterData();
};
#define  JNLQ (DWORD)GetModuleHandleA("Game.exe") + 0x59F4F8//技能冷却数组
#define  JNECS (DWORD)GetModuleHandleA("Game.exe") + 0x59F008//技能二叉数
#define  JNECS2 (DWORD)GetModuleHandleA("Game.exe") + 0x34cb88//技能二叉数2

CM.cpp文件:新加 OnBnClickedButton5函数(遍历技能按钮的点击事件处理函数)

// CM.cpp: 实现文件
//#include "pch.h"
#include "tl.h"
#include "CM.h"
#include "afxdialogex.h"// CM 对话框IMPLEMENT_DYNAMIC(CM, CDialogEx)CM::CM(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG1, pParent), edi_x(_T(""))
{}CM::~CM()
{
}void CM::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, edi_x);DDX_Text(pDX, IDC_EDIT2, edi_y);
}BEGIN_MESSAGE_MAP(CM, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CM::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CM::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON3, &CM::OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON4, &CM::OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON5, &CM::OnBnClickedButton5)
END_MESSAGE_MAP()// CM 消息处理程序void CM::OnBnClickedButton1()
{R_人物属性 a;a.初始化();Call_输出调试信息("人物信息:人物状态%d",a.状态);
}void CM::OnBnClickedButton2()
{UpdateData(TRUE);CString str1 = edi_x;CString str2 = edi_y;// strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);把字符串转成int数字类型int x = strtol((const char*)CW2A(str1.GetBuffer(0)), NULL, 10);int y = strtol((const char*)CW2A(str2.GetBuffer(0)), NULL, 10);Call_xunlu(x, y);
}void CM::OnBnClickedButton3()
{R_遍历背包 a;a.遍历背包();// 遍历背包CString str;str.Format(L"a数量 %d", a.d数量);AfxMessageBox(str);for (int i = 0; i < a.d数量; i++){Call_输出调试信息("tl怀旧   背包信息 dwObject -------------%X----------------\r\n", a.列表[i].dwObject);Call_输出调试信息("tl怀旧   背包信息 名字:%s\r\n", a.列表[i].pName.c_str());Call_输出调试信息("tl怀旧   背包信息 使用等级:%d\r\n", a.列表[i].p使用等级);Call_输出调试信息("tl怀旧   背包信息 简介:%s\r\n", a.列表[i].简介.c_str());Call_输出调试信息("tl怀旧   背包信息 数量:%d\r\n", a.列表[i].p数量);}}void CM::OnBnClickedButton4()
{// TODO: 在此添加控件通知处理程序代码R_周围遍历 a;a.遍历最近怪物();// 让怪物重新排列for (int i = 0; i < a.d数量; i++){Call_输出调试信息("人物信息:---------------------%s-----%x---------------------", a.列表[i].pName, a.列表[i].dwObject);Call_输出调试信息("人物信息:人物id:%x", a.列表[i].id);Call_输出调试信息("人物信息:人物X:%f 人物Y:%f", a.列表[i].fX, a.列表[i].fY);Call_输出调试信息("人物信息:人物类型:%x  人物距离:%f", a.列表[i].PType, a.列表[i].距离);}
}void CM::OnBnClickedButton5()
{// TODO: 在此添加控件通知处理程序代码R_遍历技能 a;a.AsmGetMonsterData();// 遍历技能for (int i = 0; i < a.d数量; i++){Call_输出调试信息("tl怀旧   技能信息 名字:---------------%s-----------------------\r\n", a.列表[i].pName.c_str());Call_输出调试信息("tl怀旧   技能信息 ID:%d\r\n", a.列表[i].pID);Call_输出调试信息("tl怀旧   技能信息 是否冷却:%s\r\n", a.列表[i].冷却.c_str());Call_输出调试信息("tl怀旧   技能信息 冷却ID:%x\r\n", a.列表[i].冷却ID);Call_输出调试信息("tl怀旧   技能信息 对象地址:%x\r\n", a.列表[i].dwObject);}
}

上方的代码不全,只有手写的代码

完整代码:

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg?pwd=q9n5

提取码:q9n5

复制这段内容后打开百度网盘手机App,操作更方便哦


img

相关文章:

35.第二阶段x86游戏实战2-C++遍历技能

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…...

Jenkins发布vue项目,版本不一致导致build错误

问题一 yarn.lock文件的存在导致在自动化的时候&#xff0c;频频失败问题二 仓库下载的资源与项目资源版本不一致 本地跑好久的一个项目&#xff0c;现在需要部署在Jenkins上面进行自动化打包部署&#xff1b;想着部署后今后可以省下好多时间&#xff0c;遂兴高采烈地去部署&am…...

vue3使用webSocket

1.安装插件 npm i vueuse/core10.11.12.引入使用 import { useWebSocket } from "vueuse/core"const { send, open, close: wsClose, status } useWebSocket(ws://192.168.100.90:53021/inms-application/alarm, {onMessage: (ws, { data }) > {console.log(&q…...

957种卫星参数文档的分享下载

自1957年10月4日苏联发射第一颗人造卫星Sputnik-1至今已经有67年&#xff0c;如今卫星已经在气象、遥感和通讯等领域为我们提供服务。 现在为你分享957种卫星参数&#xff0c;需要Excel文档请在文未查看领取下载方式。 卫星介绍 卫星是由人类制造并发射到太空&#xff0c;围…...

负载均衡详解:背景、实现技术、作用范围与常用算法

负载均衡&#xff08;Load Balancing&#xff09;是一种通过将请求分配到多个服务器上&#xff0c;从而优化资源使用、提高响应速度并增强系统可靠性的一种技术手段。它是现代分布式系统和互联网应用中不可或缺的一部分。在本篇文章中&#xff0c;我们将深入探讨负载均衡的方方…...

CCAA:产品认证基础3(产品认证方案)

学习要点 *产品认证方案和认证制度 *产品认证方案的基本要素、功能和活动 *产品认证方案的类型 *产品认证方案的制订和实施 *质量管理体系在产品认证方案中的应用 *典型产品认证方案的应用 第一节 产品认证方案和产品认证制度 一、概念 认证制度是指实施认证的规则、程序和…...

go语言中的Scan()和Scanln()输入函数

Scan()输入函数 package mainimport "fmt"func main() {var a intvar b stringfor {fmt.Println("请输入一个整数和一个字符串&#xff08;用空格分隔&#xff09;&#xff1a;")fmt.Scan(&a, &b) // 直接读取输入到变量中fmt.Println("整数…...

UML外卖系统报告(包含具体需求分析)

1 系统背景 随着互联网技术的快速发展&#xff0c;外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制&#xff0c;而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来&#xff0c;…...

net Core Data Protection 数据保护 加密 编码 哈希 FromServices

》》》 通过构造函数 获取服务 [Route("api/[controller]")][ApiController]public class DataProtectController : ControllerBase{[HttpGet]public string Info(){return "zen";}// [FromServices] 自动获取 builder.Services.AddDataProtection()注…...

4K手机壁纸之动漫系列

因为平台限制了图片大小&#xff0c;大家将就看吧&#xff0c;原图找me...

关于eclipse的workspace

如果项目很多&#xff0c;为了方便管理&#xff0c;最好不要是使用working set 对项目进行分组。一个workspace加载项目过多&#xff0c;即使进行分组&#xff0c;有些操作也很对所有项目生效。为了避免卡顿&#xff0c;建议直接使用workspace分组管理&#xff0c;而不是workin…...

Vue引入高德地图自定义信息窗体绑定点击事件无效解决方案

你们好&#xff0c;我是金金金。 场景 笔者用的Vue3&#xff0c;引入了高德地图&#xff0c;version为2.0&#xff0c;场景如下&#xff1a; 在地图上根据经纬度度打点标记了一个位置&#xff0c;然后点击点标记弹出自定义信息窗体&#xff0c;右上角关闭按钮则是绑定了关闭自定…...

私域朋友圈运营

今天必须给大家分享一份超棒的朋友圈运营思维导图 有了它&#xff0c;你可以逐步打造属于自己的精彩朋友圈&#x1f389;。无论是想分享生活点滴&#x1f4a7;&#xff0c;还是展示个人魅力✨&#xff0c;又或者推广自己的业务&#x1f4c8;&#xff0c;这份思维导图都能给你指…...

【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览

文件预览 Vue3一. word二. excel三. ppt四. pdf4.1 vue-pdf-embed4.2 iframe 五. 视频六&#xff1a;扩展——kkFileView Vue3 一. word 安装&#xff1a;npm install docx-preview父页面 <template><div><DocPreviewv-if"filePath.includes(docx)"…...

如何加密电脑磁盘?电脑本地磁盘加密方法介绍

随着信息技术的不断发展&#xff0c;电脑磁盘加密已经成为保护个人隐私和数据安全的重要手段。本文将介绍几种常见的电脑本地磁盘加密方法&#xff0c;帮助用户保护自己的数据安全。 文件夹只读加密专家 文件夹只读加密专家不仅可以加密电脑中的文件夹&#xff0c;还可以加密保…...

1688、淘宝、京东搜索商品聚合接口技术实现与代码示例

在当今电商领域&#xff0c;多平台商品搜索已成为用户获取多样化商品信息的重要途径。为了满足用户对1688、淘宝、京东等主流电商平台商品搜索的需求&#xff0c;开发一个跨平台的商品搜索聚合接口显得尤为重要。本文将详细介绍如何实现这一接口&#xff0c;包括接口设计、平台…...

视频智能分析平台LiteAIServer烟火识别软件引领烟火检测与识别的智能新纪元

随着人工智能技术的飞速进步&#xff0c;视频智能分析技术正以前所未有的深度和广度渗透至安全防护、环境监测等多个关键领域。其中&#xff0c;烟火识别软件LiteAIServer凭借其卓越的烟火检测与识别算法&#xff0c;成为了业界瞩目的焦点。 一、烟火检测&#xff1a;守护公共安…...

VUE前端按钮添加遮罩层

需求 当前需求是由于部分按钮操作的执行时间过长&#xff0c;因此添加遮罩层&#xff0c;防止用户误操作。 实现方式 在请求接口时创建遮罩层&#xff0c;并将遮罩层保存为全局唯一&#xff0c;请求成功或失败时&#xff0c;关闭遮罩层即可&#xff0c;切记&#xff0c;请求…...

列出机器学习方向的创新点

以下是机器学习方向的一些创新点: 一、算法创新 新型神经网络架构 图神经网络(Graph Neural Networks,GNNs) 传统的神经网络主要处理欧几里得空间的数据,如图像(网格结构)和序列(线性结构)。然而,现实世界中有许多数据具有图结构,如社交网络、分子结构等。图神经网…...

ffmpeg视频滤镜:腐蚀滤镜

滤镜简述 erosion 官网链接> FFmpeg Filters Documentation 这个滤镜会在视频上应用腐蚀操作&#xff0c;腐蚀操作是形态学中一种操作&#xff0c;接触过opencv的同学应该很熟悉。滤镜主要有如下作用&#xff1a; 去除噪声&#xff1a;腐蚀可以帮助去除图像中的小颗粒噪…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...