返回目录

首先,我们找程序的主入口,根据关键字 main( ,我们可以定位到 opentpp.cpp 的 openttd_main() 是程序的主入口。

OpenTTS python教程 openttd代码_初始化

我这里整理了 openttd_main() 调用的思维导图如下,可以在文章最下面下载这个文件

OpenTTS python教程 openttd代码_游戏程序_02

大致流程:
1.解析命令行参数(与大部分的c和c++处理初始化变量的方法类似,值得学习);
2.扫描指定路径获取文件列表(图形、音乐、音效、文字等);
3.初始化 窗口(Linux环境下是通过SDL2的方法开启窗口;
4.初始化Palettes(图片画板);
5.加载sprite到内存(这个Day05会专项讲解,就是把硬盘上的图片文件解密解压后,放到内存里备用)
6.生成地图的Tile(这个过程相当复杂,后面在Day11会详细讲解);
7.生成欢迎页面(也就是主菜单背景动画,后面我们可以了解到,这个动画实际就是一个正在运行的游戏存档)
8.进入主循环(这个步骤也有点复杂,会在每一个tick刷新界面、播放音乐和印象、响应玩家发起的鼠键指令等等)
9.如果接收到玩家发起的退出指令,调用ShutdownGame() ,执行关闭的相关操作。

接下来,我们看一下项目文件目录,主要包含三大类的文件,我们以 种树tree为例:

1.头文件:.h 结尾,如 tree_map.h 定义了与种树相关的 各类基础数据、枚举enum、结构体struct 及 函数方法等

OpenTTS python教程 openttd代码_初始化_03

2._gui文件: _gui.cpp 结尾,如 tree_gui.cpp 一般这种文件都有一个或多个 与界面窗口定义相关的参数定义,如下:

OpenTTS python教程 openttd代码_OpenTTS python教程_04

OpenTTD自己定义了一套 以NWidget开头的控件库,在 widget_type.h 这个头文件里面,我可以看到所有控件的合集,对于搭建窗口控件库感兴趣的同学可以深入学习这一部分的代码实现。

OpenTTS python教程 openttd代码_OpenTTS python教程_05

_gui文件里面定义窗口类都继承了 window 类

OpenTTS python教程 openttd代码_c++_06

3._cmd文件,_cmd.cpp 结尾,如 tree_cmd.cpp 这一类的文件一般定义了交互指令,比如种一棵树、种一片树等,值得一提的是项目大量使用函数指针调用相应函数,因此,很多函数直接搜索调用者是查不到的。

OpenTTS python教程 openttd代码_游戏程序_07

最后,思维导图文件可以使用 https://www.xmind.cn/ 工具打开 xmind文件下载地址:

链接:https://pan.baidu.com/s/1SgYBIB1PoIC2ohhQdh2IIQ
提取码:c6cx