- 博客(54)
- 资源 (1)
- 收藏
- 关注
原创 游戏算法-游戏AI行为树,python实现
游戏行为树(Behavior Trees, BT),简浅易懂,python实现例子,行为树入门学习
2023-03-30 11:18:06
2156
2
原创 RPG多人回合制战斗框架设计《五:Buff设计》
RPG战斗框架包含以下四部分的内容:一、基本战斗流程二、战斗角色设计三、战斗伤害计算四、技能设计五、BUFF设计六、战斗AI五、BUFF设计BUFF类似被动技能,存在战斗角色身上,只不过功能多些,是被动技能的升级版本除了可增益减益,还可以叠加buff,有固定回合等功能其实也就是1、buff叠加叠加规则2、buff回合管理3、有buff时候触发各种事件BUFFOVERLAY_ADD = 0 # 叠加规则class CBu
2022-01-09 17:45:44
1583
原创 RPG多人回合制战斗框架设计《四:技能设计》
RPG战斗框架包含以下四部分的内容:一、基本战斗流程二、战斗角色设计三、战斗伤害计算四、技能设计五、BUFF设计六、战斗AI四:技能设计被动技能的功能:1、有这个技能,会有某种功能,例如:加属性2、有这个被动技能,在某些时机会产生某种效果,例如:有被动技能A时候,再收到伤害时候会回血。技能定义:skill_def .pyPERFORM_TIMEPOINT_NORMAL = 0x1PERFORM_TIMEPOINT_READY = 0x
2022-01-09 17:20:53
1618
原创 python2协程的应用yield,同步方式写异步代码
python协程基础知识可以先了解下之前的文章:一篇文章了解Python中的协程、例子、协程的发展_巴山夜雨-CSDN博客_python 协程opython3用asyncio很容易实现这种写法python2的协程更加简单,要实现同步方式写异步代码,只要做些封装也可以实现协程1Python 2 的yeild和send 生成器yeild和send,实现协程的老方法,只能实现协程基本功能,保存状态、实现函数的能暂停、恢复等。# coding: utf-8...
2021-11-07 19:59:42
623
原创 Python内存优化,节省内存字典ConstDict
遇到问题: 游戏服务器的怪物数据monsterdata.py 用字典表示,怪物字典数据基本做取值和修改处理,不额外增加字段,py文件大小100m,想办法节省内存,根据特点,不使用原生的dict数据结构,用ConstDict是去代替,内存节省到50m左右。ConstDictpython代替的dict数据结构若字典不会增加字段,只读/原字段修改使用ConstDict可节省内存dict()内存主要消耗的地方:1、dict扩容机制,预留内存空间2、dict...
2021-11-06 16:01:41
3516
原创 基于Python知乎回答爬虫 +jieba关键字统计可视化
单纯对知乎一个问题较感兴趣,爬了6100多答案,分析统计关键字python版本:3.8效果例子:https://www.zhihu.com/question/52178718/answer/1355682852一、爬虫知乎回答保存到txt文件安装库:requestsimport reimport requestsimport time# 知乎有反爬虫,加入http headers伪装浏览器headers = { "User-Agent": "Mozi...
2021-03-13 16:32:07
965
2
原创 一篇文章了解Python中的协程、例子、协程的发展
网上关于Python的协程知识较乱,很多文章说法不一样,遂查原始的资料,再总结一下。内容:认识协程 1、一些基本概念 2、协程的特点Python的协程 1、Python2的yeild和send实现协程 2、Python的gevent协程框架 3、Python3的asyncio协程框架一、协程基本概念: 协程(英语:coroutine)是一种计算机程序组件,它通过允许多个入口点在特定位置暂停和恢复执行,从而为非抢占的多任务...
2021-01-03 22:39:42
486
原创 Python基础题
Python开发非基础面试题(网易、深信服等)一、Python的内存管理 1、python内存管理是由私有堆空间管理,需要申请和释放内存 2、用引用计数机制实现垃圾回收 3、Python有内存池的机制,为了防止频繁申请和释放内存,会将不用内存放到内存池而不是返回给操作系统二、Python的gc垃圾回收 1、在Python中,主要通过引用计数进行垃圾回收 2、通过 “标记-清除” 解决容器对象可能产生的循环引用问题 3、通过 “分代回收” 以空间换时间...
2020-06-14 11:40:37
480
原创 游戏服务器算法-关于权重的随机抽取算法,抽一个次或抽多次的实现
游戏服务器开发还真会常遇到,策划需求根据权重给奖励,比如奖励和权重分别是:A10、B20、C70,这时候出现A的概率就要是10%,B就是20%,C是70%,就是出现的概率是当前权重 / 总权重。方法一:普通的线性扫描时间复杂度:O(N)过程:1、先计算出所有道具的权重总和S2、然后调用随机函数得到一个区间在[1, S]的随机值N3、扫描列表,如果N小于当前的权重,则返回当前道具4、若N大于当前权重,则把N减去当前权重def...
2020-06-08 11:10:01
5395
2
原创 一篇文章看懂各种树的特点、概念、应用(二叉树、搜索树、B树、B+树)
一、树的基本术语 若一个结点有子树,那么该结点称为子树根的"双亲",子树的根是该结点的"孩子"。有相同双亲的结点互为"兄弟"。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。叶子:度为零的结点分支结点:度不为零的结点树的度:树中结点的最大的度结点的度:结点拥有的子树的数目树的度:Max{各结点的度})层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1树的高度:树中结点的最大层次无序树:如果树中结点的各子树之间...
2020-05-31 12:13:24
2279
原创 TCP窗口控制、流量控制、拥塞控制
一、窗口控制TCP以1个段为单位,每发一个数据段进行一次ACK确认应答的处理,这样的传输方式由一个缺点,就是包的往返时间越长通信的性能越差。一发一答解决这个问题,提高速度,TCP引入了窗口控制这个概念。具体做法就是连续发送上限为窗口大小的数据,然后再一个一个ACK确认。即使在往返时间较长的情况下,它也能控制网络性能的下降。窗口控制的多发多答窗口大小:指...
2020-03-08 16:41:27
1313
原创 基础知识二:自己认识的HTTP协议
HTTP协议HTTP协议简介:HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。一个基于TCP/IP通信协议来传递数据的协议,处于OSI中应用层。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTPP有多个版本,目前广泛使用的是HTTP/1.1版本。请求报文构成请求行:包括请求方法、URL、协议...
2020-02-27 00:06:05
371
原创 python 网易云音乐uc缓存转换mp3
前几天帮老爸的导航下载歌曲,发现都要会员,找资源较麻烦,用python写个网易云的缓存转换mp3的程序吧。转换的根本方法就是对缓存uc文件的数据和0xa3(163)进行异或(^)运算啦。流程:1、对缓存文件的数据和0xa3(163)进行异或(^)运算2、用歌曲ID用网易云提供的API去获取歌曲信息3、数据保存为mp3文件python版本:python2\python3...
2020-02-23 18:11:48
12571
9
原创 同步和异步,阻塞和非阻塞
A进程里面调用B函数对B而言有没有通知、回调等就是同步、没有的话是异步同步:调用时等到结果出来才返回,没有得到结果不会返回异步:调用者不会立刻得到结果,而是在*调用*发出后,被调用者通过状态、通知、回调来通知调用者对A而言,一直等是阻塞、不等是非阻塞阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态阻塞:没有资源一直等待,线程处于阻塞状态非阻塞:没有资源不会...
2020-02-16 20:25:16
174
原创 面向对象编程的基本规则 python例子
一、两个标准:低耦合和高内聚就是指模块之间低耦合、模块内部高内聚,以追求软件系统的可重用和易维护。一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。实际上这两个规则可能会处于冲突情况,这就要结合实际情况去考虑了。低耦合:模块之间...
2020-02-11 23:10:02
504
原创 基础知识(一)-计算机网络
各种分层OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。各层主要作用和协议应用层主要作用:产生流量的应用协议:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS表示层主要作用:数据压缩、...
2020-02-05 18:00:18
326
原创 python一些优化方法
环境:pyhton2.7性能分析方法:运行时间较小为优import timeinit_time = time.clock()func()last_time = time.clock()性能时间times值的大小times = last_time - init_time() 一:字符串连接在python里面,字符串是不可变的(immutable),就是说一旦你...
2018-04-08 16:22:20
2657
原创 python文字版扫雷
python版本:2.7游戏运行图:代码已经注释得很清楚,不废话了,直接上代码: 2个算法:1、随机数生成算法,2、广度优先#coding:utf-8import sysimport randomimport Queue#保存不同游戏难度数据 格式:难度:(row,line,mine)DIFFICUL_DATA = {1:(8,8,5),2:(10,10,20),
2018-01-07 20:17:30
2550
1
原创 NRF24L01多对一、多通道通讯关键代码
要想24L01多通道通讯成功,务必单通道先调试成功,并且懂得这块芯片通讯的一些基本知识。一、基本的通讯条件1、接收端的接收地址(RX_ADDR_Px)等于发射端的发射送地址(TX_ADDR) 2、收发端的频道一致(RF_CH) 3、收发端的发射参数一致(RF_SETUP)二、收发模式初始化的基本步骤Rx端初始化步骤: 1)写 Rx 节点的地址 RX_ADDR_Px 2)使能 AUTO ACK
2017-12-19 15:37:55
7915
2
转载 C深入const作用
关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理,所以说const的存在一定有它的合理性,与预编译指令相比,const修饰符有以下的优点:1、预编译指令只是对值进行简单的替换,不能进行类型检查2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性3
2017-10-16 12:08:32
279
原创 C判断char型和unsigned int型比较大小,LmiQueryCSmd
昨天面试的最后一题,当时感觉做对了,后来用VC编译发现还是有问题-_-||,好吧,看来这就是没有offer原因 原题:#define MaxCount 200int LmiQueryCSmd(void){ char Num1 = 0; unsigned int Num2; Num2 = Max; while(1) { if(Num1++ >
2017-10-13 00:13:45
4557
原创 汽车诊断协议,(K线/CAN总线、kwp2000、ISO14230、ISO1575...)
相信像我这样的小白第一次接触汽车诊断协议肯定有点懵逼,什么鬼kwp2000,那什么又是ISO-14230,ISO-15765,ISO-14229,UDS,UDSonCAN???它们到底是什么关系,还有什么又是基于K线的KWP2000,基于CAN的KWP2000???嗯,慢慢来,一定不要混淆这些协议,首先对这些协议进行初步认识:一、初步认识KWP 2000和IS0-14230 在汽车故障诊
2017-09-17 00:30:59
34157
16
原创 C/C++删除单向链表全部匹配节点
面试时候出现过,想了好久-_-,好吧,补上链表:typedef char DataType; typedef struct Node //Node为结点类型名{ DataType data; //data代表数据元素 struct Node *next; //next为指向下一结点的指针}Node; 功能:删除单向链表第一匹配的节点 参数: H、链表头地址
2017-08-21 18:40:39
794
原创 (4)linux进程通讯之共享内存
共享内存①为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间,这块就是共享内存区域 ②由于可以多个进程共享一段内存,因此也需要依靠某种同步机制(如互斥锁和信号量等) ③共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,而不需要任何数据的拷贝Shell的ipcs命令可以查看共享内存情况主要步骤①创建/打开共享内存 ②映射共享内存(
2017-08-14 18:18:03
444
原创 (四)linux进程通讯、信号(Signal)
信号是UNIX中所使用的进程通信的一种最古老的方法,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。一个完整的信号生命周期可以分为如下阶段用户进程对信号的响应可以有3种方式。 忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即SIGKILL及SIGSTOP。
2017-08-09 18:16:27
319
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人