1.仙梦奇缘游戏详细文架设教程
2.侯捷《STL源码剖析》 | 容器详解 Deque
3.redis源码学习-quicklist篇
4.死磕 java集合之ArrayDeque源码分析
5.JDK源码分析-Queue,双端设置双端设置 Deque
仙梦奇缘游戏详细文架设教程
前言 我发现了款超棒的仙侠手游,支持安卓和苹果双平台,源码源码跨服体验流畅,成单画面精致,双端设置双端设置玩法多样,源码源码几乎无BUG。成单小米路由web源码它就是双端设置双端设置仙梦奇缘!本教程将指导你如何架设仙梦奇缘,源码源码让你爱不释手。成单游戏长期维护,双端设置双端设置欢迎试玩。源码源码 游戏客户端和源码下载请关注公众号echeverra,成单回复“仙梦奇缘”获取。双端设置双端设置公众号内提供后台GM账号,源码源码回复“仙梦奇缘GM”获取。成单 同样推荐多款我架设的H5游戏,请关注公众号,回复“H5游戏整理汇总”探索更多。 游戏截图: 架设步骤: 1. 架设条件 建议配置服务器:2H4G,运行游戏会占用约2.8G内存。 2. 安装宝塔及环境 宝塔是一个服务器运维管理软件,安装命令如下: 安装完成后,按照提示登录宝塔(若无法访问可能需开放端口),并在宝塔软件商店中安装以下软件。 3. 关闭防火墙 执行宝塔菜单终端中的关闭防火墙命令。 4. 开放端口 开放所有端口1-,根据服务器类型(阿里云或腾讯云)在安全组或防火墙中配置规则,hackchina源码然后在宝塔菜单安全中开放所有端口。 5. 上传源码 将服务端目录下的xmqy.tar.gz文件通过宝塔上传到根目录。若禁止上传至根目录,可上传至其他路径后剪切粘贴到根目录。上传成功后,终端命令进行解压。 解压后,命令授予权限。 6. 配置环境 安装 gcc 动态库。 7. 修改源码IP 源码中的IP(..1.1),需替换为你自己的服务器IP。以第一个commonconfig.xml文件为例,在宝塔中找到文件,双击修改,使用Ctrl+F批量替换IP。 8. 修改热更包 需要修改双端热更包文件的IP。注意需替换为正确的IP位数,根据你的IP决定是否需要补零或使用域名。 8.1 安卓热更包 安卓热更包IP修改如下: 将IP(...)替换成你的位IP。例如,若IP为...,则需要补零使其成为位IP(...),若IP为...,则只能使用域名。 修改后,上传覆盖。swap源码 8.2 苹果热更包 IOS热更包IP修改如下: 网上大多数教程的IOS热更包修改文件位置有误,正确位置应为.../LuaAssetBundle/luajit/init。需要替换IP(...),注意第一个init文件替换位IP,第二个文件agent替换位IP,修改方法参照安卓热更包。 9. 导入数据库 在宝塔数据库菜单中修改root密码为。在宝塔软件商店MySQL 5.6设置配置修改中添加第行代码,重启Mysql后,通过命令导入数据库。导入数据库cross,在宝塔数据库中先创建数据库cross,上传本地数据库cross.sql文件,选择导入。 . 创建网站 在宝塔网站中添加站点,域名填写服务器IP:,目录设置为\www\wwwroot\xmqy,PHP版本选择5.6。添加站点后需设置伪静态。 . 启动游戏服务 经过一系列步骤后,可以启动游戏服务,执行命令查看端口占用情况。除了网站占用的端口,还会占用、x和x的端口,内存大概占用2.8G左右。smartconfig源码 . 安卓客户端 .1 修改IP 找到资源客户端中的仙梦奇缘.apk,使用压缩软件打开,修改IP(...)为你的位IP或域名。 修改后保存,检查文件日期确保修改成功。 .2 签名 使用JAVA环境进行签名,下载安装Java。使用工具ApkTool对修改后的APK文件进行签名,过程中提示获取版本号失败可忽略。签名后,通过夜神模拟器安装,启动游戏。 .3 模拟器测试 确认热更包配置成功,加载资源后输入用户名和密码,登录游戏。 . 苹果客户端 .1 修改IP 打开资源客户端中的仙梦奇缘.ipa,修改IP为你的位IP或域名。 .1 签名 使用爱思助手进行苹果签名,填写苹果账号,完成签名。签名后,将签名的ipa文件安装到苹果手机中,需要在手机设置中信任软件,签名有效期为7天,每周需要重新签名。 . 游戏后台 后台GM授权链接和玩家后台链接已提供,卖出 源码可进行充值、物品发送等功能。修改配置文件可设置GM密码。 . 关闭游戏服务 停止游戏后台服务,执行命令。 游戏BUG:IOS端关闭聊天闪退,通过测试断定是服务端数据传输异常导致。暂时无法解决。 其他小BUG主要在IOS端,如换头像闪退。Android端未发现BUG。 游戏优化:对后台GM进行优化,加快物品列表加载速度,增加清理背包和邮件功能。 游戏监控:添加端口异常监听和定期清理日志文件。 游戏评价:玩法丰富,耐玩,剧情和画面优秀,功能多样,客户端体积小,热更包文件小。 碎碎念:思考个人发展方向,可能需要更多时间投入到编程技术提升上。游戏架设作为兴趣爱好,保持放松和乐趣。 教程结束,欢迎通过我的博客或微信公众号联系我。公众号内提供资源和福利。侯捷《STL源码剖析》 | 容器详解 Deque
Deque为双端队列,提供双端进出的操作,特点如下:
在容器操作中,双端队列(Deque)独具特色。它支持在队列的两端插入和删除元素,提供了更为灵活的管理数据结构的途径。
Deque的实现:
deque迭代器的设计比较精巧,包含node、first、last、cur四个指针。这些指针的配合使用,使得deque在操作时能高效地定位和移动元素。
insert操作
deque的insert操作分为几种情况:在队列的前端插入元素调用push_front;在队列的后端插入元素调用push_back;中间位置的插入则调用insert_aux。这一设计旨在减少元素移动,提高操作效率。
在执行插入操作时,deque会计算插入位置与队列首尾的距离,通过精巧的算法尽量减少元素的移动,优化操作性能。
deque操作符的重载
deque中的value_type和difference_type之间的加减操作被重载,使得deque能够支持元素的增量和跳转。通过对象后接取址符[difference_type n],或使用元素的跳转,用户可以更直观地进行操作。
使用容器Deque实现queue和stack
deque的灵活性质使其能够被用于实现队列(queue)和栈(stack)等常见数据结构,相当于一种适配器模式。通过适当的操作组合,deque可以满足队列和栈的功能需求。
总结,deque作为双端队列,以其高效的操作特性和灵活的使用方式,成为C++容器中的重要组成部分。通过掌握deque的实现原理和操作方法,开发者能够更高效地管理数据结构,优化程序性能。
redis源码学习-quicklist篇
Redis源码中的quicklist是ziplist优化版的双端链表,旨在提高内存效率和操作效率。ziplist虽然内存使用率高,但查找和增删操作的最坏时间复杂度可能达到O(n^2),这与Redis高效数据处理的要求不符。quicklist通过每个节点独立的ziplist结构,降低了更新复杂度,同时保持了内存使用率。
quicklist的基本结构包括:头节点(head)、尾节点(tail)、entry总数(count)、节点总数(len)、容量指示(fill)、压缩深度(compress)、以及用于内存管理的bookmarks。节点结构包括双向链表的prev和next,ziplist的引用zl,ziplist的字节数sz、item数count、以及ziplist类型(raw或lzf压缩)和尝试压缩标志(attempted_compress)。
核心操作函数如create用于初始化节点,insert则根据需求执行头插法或尾插法。delete则简单地从链表中移除节点,释放相关内存。quicklist的优化重点在于ziplist,理解了ziplist的工作原理,quicklist的数据结构理解就相对容易了。
死磕 java集合之ArrayDeque源码分析
双端队列是一种特殊的队列,两端皆可操作元素。ArrayDeque以数组方式实现,非线程安全。Deque接口继承自Queue,新增操作两端元素、类栈方法。
ArrayDeque属性使用数组存储,头尾指针标识,最小容量为8。默认初始容量,最小8。入队方法包括从头addFirst(e)和尾addLast(e)。容量不足直接扩容两倍,通过取模循环头尾指针。出队方法pollFirst()和pollLast(),同样取模循环。ArrayDeque可直接作为栈使用,操作队列头即可实现。
总结:ArrayDeque采用数组实现双端队列,通过头尾指针循环数组操作。容量不足时扩容,每次增加一倍容量。作为栈使用,只需操作队列头。不支持线程安全。
JDK源码分析-Queue, Deque
Queue 和 Deque 是 Java 中的两个接口,分别代表队列和双端队列。
Queue 接口提供了基本的队列操作:入队(enqueue)和出队(dequeue)。同时,Queue 接口有 6 个方法,分为入队、出队和遍历三类。与之不同的是,当队列为空时,element() 方法会抛出异常,而 peek() 方法则会返回 null。
Deque 接口继承自 Queue 接口,表示双端队列,具备「队列」和「栈」的特性。双端队列可以分别从两端插入和移除元素,而一般队列只能从尾部插入元素、头部移除元素。Deque 接口定义了入队、出队、遍历以及独有的一些操作方法。Deque 作为双端队列,不仅继承了 Queue 的方法,还提供了额外的双端操作。
综上,Queue 提供了基本的队列功能,而 Deque 在 Queue 的基础上增加了双端操作,使其兼具队列和栈的特性。在实际应用中,根据需求选择合适的接口可以提高代码的灵活性和效率。