- 博客(84)
- 收藏
- 关注

原创 十五天学习做一款模拟经营类游戏
Day01. OpenTTD游戏简介以及为什么要研究它 (计划2021.10.4推出)Day02. 搭建OpenTTD的编译环境-Linux、windows和OSX(计划2021.10.7推出)Day03. OpenTTD源代码框架分析(计划2021.10.11推出)Day04. 新建一个HelloWorld对话框(计划2021.10.14推出)Day05. OpenTTD的Sprite介绍(计划2021.10.18推出)Day06. 自己动手编译OpenGFX库(计划2021.10.21推出)
2021-10-09 13:56:20
1262
原创 【部署】手搓一个dify可用的rerank模型
本文介绍了如何本地部署适用于Dify平台的rerank模型,解决数据保密需求。程序源码基于modelscope以及BAAI/bge-reranker-large模型。
2025-05-28 17:43:06
177
原创 【部署】在离线服务器的docker容器下升级dify-import程序
kylin Linux环境下,离线升级docker 镜像的命令行执行程序的方法。主要内容包括:1)在有互联网机器下载最新程序并传输到离线服务器;2)确认并启动Docker容器;3)复制编辑配置文件;4)进入容器交互模式启动虚拟环境;5)修改配置后运行程序。适用于Kylin Linux环境下的dify 0.1.0-release版本升级,新版本增加了对制度类txt文件知识库父子分段支持。
2025-05-26 18:00:00
278
原创 【部署】读取制度类txt文件导入dify的父子分段知识库
通过引入dify-import项目,支持读取高质量的txt制度类文件批量导入父子分段dify知识库并通过语言模型的推理产生相关关键字生成字段。
2025-05-26 17:45:00
428
原创 【部署】如何离线环境创建docker容器执行python命令行程序
本文以dify_import项目 https://gitee.com/zhouweng/dify_import为例,讲解如何在离线服务器上,搭建docker容器环境,执行python命令行程序
2025-05-22 18:00:00
273
原创 【技巧】GoogleChrome浏览器开发者模式查看dify接口
使用Google Chrome浏览器的开发者模式查看dify各个接口报文交互情况
2025-05-17 16:23:27
251
原创 【评测】免费体验dify工作流模式下腾讯语音转文字speech2text服务
使用dify的workflow引入腾讯云的speech to text 大模型技术,实现mp3文件的语音转文字服务测试。
2025-05-14 18:00:00
380
原创 【技巧】wsl 安装 pyenv 运行环境
dify的编译环境需要用到pyenv进行python管理,文章主要内容是在win10 wsl环境下安装pyenv工具
2025-05-11 04:00:00
685
原创 【部署】win10的wsl环境下启动dify的web前端服务
windows笔记本搭建dify开发调试环境,在wsl下部署dify1.3.1版本的web前端,用到node.js/npm/pnpm等工具
2025-05-10 17:11:13
424
原创 【目录】学习如何使用dify建设专业知识库
1.1. 测试dify的父子分段知识库效果2.1. win10的wsl环境下启动dify的web前端服务2.2. win10的wsl环境下调试dify的api后端服务3.1. 如何把win10 wsl的安装目录从c盘迁移到d盘3.2. 离线安装python包的方法
2025-05-10 17:06:54
304
原创 【部署】win10的wsl环境下调试dify的api后端服务
文章内容为windows笔记本的wsl环境下,部署dify的api后端程序全过程,包括docker中间件、源码启动pyenv和uv等工具安装,vscode通过remote ssh方式连接源代码项目并通过远程调试方式项目代码。
2025-05-10 16:46:35
833
原创 Day15_城镇是怎么发展起来的
返回目录上一篇文章我们看了一下工厂的产量逻辑还是比较简单的,相关逻辑直接一个函数实现。今天我们看一下相对比较复杂的城镇发展逻辑。同样,我们也可以在官网https://wiki.openttd.org/en/Manual/Towns#town-growth 看一些Tips。1.公交车和火车运送乘客对城镇的发展影响效果一致;2.转运货物的火车站一样也可以得到发展;3.玩家可以通过捐赠新建筑在短期内迅速发展城镇;4.城市比乡镇发展速度快1倍;5.玩家必须确保城镇不被火车轨道,机场和水路包围;(这个好像
2021-11-22 15:26:34
1415
原创 Day14_工厂的产量是怎么发展的
返回目录openttd 工厂的发展基本逻辑是物流越发达,运货效率越高发展越快,没有交通接入的工厂发展缓慢,最后甚至从地图消失,我们从 OpenTTD | Game Mechanics 可以了解到工厂发展的算法逻辑,简单讲就是每个月会有一定概率改变产量,交通运输服务越好的工厂,变好的概率越高,交通运输服务越差的工厂,变坏的概率越高,工厂产量变化逻辑如下:1.每个月4.5%概率发生变化2.不同交通服务变化比例:poor- 33%增产 67%减产: good 67%增产 33%减少; excellent 8
2021-11-18 10:47:32
841
原创 Day13_交通工具是怎么移动起来的
首先,我们做一个有趣的实验,在viewport.cpp 的 AddSortableSpriteToDraw() 增加一行代码viewport.cpp Line659void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent, int bb_offset_x, int bb_offset_y, int bb_offset_z,
2021-11-15 11:55:22
2828
原创 Day12_OpenTTD的页面刷新原理
返回目录每次我打开游戏看到菜单背景的时候,就惊叹于这个背景动画就像进入正式的游戏界面一般细致。研究源码后,我才知道原来这个背景动画真的就是一个游戏进度,我们只需要注释一行代码,就可以像下面一样拖动菜单的背景。window.cpp Line2787static void HandleAutoscroll(){ if (_game_mode == GM_MENU || HasModalProgress()) return; <=只需要注释这一行代码...普通的存档文件以.sav作为
2021-11-12 11:32:11
2368
原创 Day11_MapTiles是怎么绘制出来的
返回目录OpenTTD的界面通过viewport.cpp 实现,界面上由相对静止的网格Tile以及不断移动的交通工具vehicle组成,在Tile上可能是各种气候条件的陆地、海洋、工业设施、城镇等,交通工具则主要包括汽车、火车、轮船和飞机四大类。我们看一下网格Tile绘制的原理。viewport.cpp ViewportAddLandscape()是绘制Tile的关键,这个函数通过双重循环,先行row再列column 实现了各种气候地形和建筑物的绘制。viewport.cpp Line1164stat
2021-11-08 11:38:57
315
原创 Day10_Linux环境下的SDL2简介
返回目录20211104_Day10_Linux环境下的SDL2简介OpenTTD在Linux环境下通过SDL2来驱动显示,./openttd -d 2 启动后,我们可以看到以下日志,验证确实使用到 sdl ,大家可以试一下在windows环境下,启动命令行,看看下面的最后一行 video driver 后面显示的是什么内容。游戏启动阶段创建窗口调用链SDL_CreateWindow()<- sdl2_v.cpp VideoDriver_SDL_Base::CreateMainWindow
2021-11-04 09:57:02
850
原创 Day09_OpenTTD的Viewport介绍
返回目录OpenTTD的视觉系统2.5D形式展现,素材都是图片,通过屏幕贴图的方式生成界面元素,因此不能像真3D游戏那样在游戏过程中旋转视角,看到3D模型侧面或者背面的情况。这种2.5D的展示方式对显卡要求较低,大量使用在手机游戏里面,比如 王者荣耀、部落冲突、三国志策略版的界面,我们都能看到这种显示模式的身影。Openttd.cpp 代码量不大(行数 3000+),函数数量多(50+),其中对外服务函数26个,私有服务 27个。上层调用者主要包括 gui类、cmd类以及游戏初始化阶段的各种类,向下调用
2021-11-01 17:13:01
648
原创 Day08_OpenGfx源码分析
返回目录在 《Day05_OpenTTD的Sprite介绍》,我们学习了OpenTTD的资源文件以及加载内存的全过程,在ubuntu环境下,资源文件放在 ~/.openttd/baseset 目录下,我们把grf文件用16进制方式打开后,发现都是 00 00 47 52 46 82 0D 0A 1A 0A 开头,如下:通过 https://newgrf-specs.tt-wiki.net/wiki/Main_Page 的学习,我们了解到 OpenGfx使用nml进行数据压缩生成grf文件,然后压缩成
2021-10-28 09:34:18
1451
原创 Day07_Sprite是如何绘制到界面上的
返回目录前面的章节,我们讲述了Sprite加载的原理,最终是放到一个 SpriteCache这样一个数据结构里面。今天,我们继续看一下在loop里面,程序如何将这些Sprite绘制到界面上。首先 研究 SpriteCache.cpp ,在《Day05_OpenTTD的Sprite介绍》 我们了解到 游戏启动阶段,LoadNextSprite() 函数加载 SpriteCache的过程。在 spritecache.h 里面还定义了 GetRawSprite(),这个函数向外提供服务,通过SpriteI
2021-10-25 15:16:18
395
3
原创 Day06_自己动手编译OpenGFX库
返回目录OpenGFX是OpenTTD的资源库,Linux环境下,正式环境部署位置 ~/.openttd/baseset 目录下,编译后的文件扩展名 .grf 。游戏启动后,程序会搜索指定文件夹,将这些文件解码并加载到内存里面备用。$ git clone https://github.com/OpenTTD/OpenGFX从git拉取源代码后,直接 make 会报错 缺少 grfcodechttps://www.openttd.org/downloads/grfcodec-releases/l
2021-10-21 09:29:24
572
原创 Day05_OpenTTD的Sprite介绍
返回目录今天的内容终于要与游戏沾边了,sprite是游戏里面贴图的小组件,比如地形上面的每一个方块,草地、水面、道路、铁轨,以及在上面跑的汽车、火车,天上的飞机,都是属于sprite。OpenTTD里面在游戏启动阶段会扫描预设的磁盘路径,把扩展名 grf 的文件信息解密加载到内存cache里面,后面的贴图直接采用内存块拷贝的方式推送到显卡上面。我们使用 openttd -d 2 启动游戏,在主控上可以看到大量包含 Replacing sprites 关键字的信息,如下:通过这个关键字,我们可以检索
2021-10-18 17:08:31
722
原创 Day04_新建一个HelloWorld对话框
今天,我们在欢迎首页的menu增加一个button,点击后弹出一个对话框窗口,显示 HelloWorld,效果如下:要完成这个看起来很简单的小功能可没这么简单。这一篇文章,强烈建议大家动动手,对于掌握编译方法和熟悉项目的框架很有帮助,不过动手前,大家要有心理准备,可以先上一个洗手间、倒杯茶调整好心态,有任何问题欢迎评论区提出。第一步,我们增加 菜单项目,名称为 HelloWorld1、intro_gui.cpp , _nested_select_game_widgets[] 定义了菜单选项,我们在
2021-10-14 10:21:19
969
原创 Day03_OpenTTD源代码框架分析
返回目录首先,我们找程序的主入口,根据关键字 main( ,我们可以定位到 opentpp.cpp 的 openttd_main() 是程序的主入口。我这里整理了 openttd_main() 调用的思维导图如下,可以在文章最下面下载这个文件大致流程:1.解析命令行参数(与大部分的c和c++处理初始化变量的方法类似,值得学习);2.扫描指定路径获取文件列表(图形、音乐、音效、文字等);3.初始化 窗口(Linux环境下是通过SDL2的方法开启窗口;4.初始化Palettes(图片画板);
2021-10-11 17:20:37
1392
原创 Day02_搭建OpenTTD的编译环境-Linux
返回目录首先,我们配置一套舒服的源码阅读和编译环境。在这个介绍系列中,我们使用Visual Studio Code作为源码的阅读器,主要原因有两点:一、c++的函数调用查询(ctrl+鼠标左键) ;二、历史查询结点跳转(alt+键盘左右键) 。下载源代码地址:https://gitee.com/mirrors/OpenTTD使用VSC打开项目后,效果如下:编译环境 Ubuntu20.04 ,相比windows环境 openttd在Linux下的编译更加简便(windows环境下的vs201
2021-10-09 13:54:24
1345
原创 Day01_OpenTTD游戏简介以及为什么要研究它
OpenTTD是一款传奇的开源游戏项目,官网 openttd.org有它的详细介绍,他是基于1994年推出的交通大亨这款游戏改编而来,令人惊奇的是,经过近30年的社区热心群众发展,这个项目的生命力异常强韧,从最初存在大量bug和兼容性问题的小厂游戏,发展成一款跨平台、运行稳定性非常好的优秀游戏作品。游戏中,玩家扮演新成立的运输公司老板,通过建设铁路、公路、桥梁、机场、车站等设施,运输旅客、货物和各种自然资源的模拟经营游戏。游戏最终目标是通过运输赚取最大利润,经过残酷的竞争,最终打败对手,成为运输大亨。在国内
2021-10-09 13:48:23
1752
原创 Day22 行高和列宽的设置
返回目录以下知识源码位置: [Git:https://gitee.com/zhouweng/mini_sheetversion=57b9e280346579fe061b4671fbf2c7ed245fab50]源代码回滚版本,参考这里[https://blog.csdn.net/u010593516/article/details/113767587] 时间很快,一转眼就到了这个系列最后一篇文章,通过luckysheet这个优秀的前端开源项目,我们可以学习到很多前端...
2021-04-25 11:02:45
2004
原创 Day21 工具条设置单元格颜色
返回目录以下知识源码位置: [Git:https://gitee.com/zhouweng/mini_sheetversion=70263c0bec9d1e878e2042b8b545e23664ec384d]源代码回滚版本,参考这里[https://blog.csdn.net/u010593516/article/details/113767587]今天,我们首先对代码进行优化,menuButton.js文件长度 800+,我们入手这个文件的优化,把一些静态资源剥离出来。...
2021-04-22 11:07:06
180
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人