posts - 0,  comments - 0,  trackbacks - 0

Freeciv 是开源的类似文明(CIV)的游戏,是基于回合制的战略类游戏,
开发工具是 C,支持 Windows, Unix, Linux 等多个平台。其官方网址是:
        http://www.freeciv.org/
在该网站你能够找到 freeciv 的说明,帮助,下载,MOD,开发等资源。

我开始研究的是 Freeciv 2.2.2 发布于 25th July 2010.

今天继续在研究配置数据的加载,当前的主要研究方法是 refactor 程序从 C => C++,
并逐步跟踪了解每个功能的内在含义。随着研究深入,细节将不断清晰。
写文章的时间不多,或者即使写了也说不清楚,只能慢慢来不着急了。

配置数据比较复杂,前面已经研究的部分稍后有机会再写文章说明,本文先说
city_name_list 的配置。

city 是 civ 游戏的最重要的 Model object 之一,每个国家/种族由系统缺省给出
一组城市名字(city name),当建立城市的时候,ai 使用这些名字给城市命名,游戏者
在建立城市的时候也被提示一个“合适”的城市名字,如果选名算法非常有效,则这个
合适修饰词可以换作“智能”了。city name 不能重复,在本国家/种族不能重复,
在整个世界也不能重复。

Sid Miler's civ3 系统缺省给出了一组城市列表,在游戏者建立城市的时候按照顺序
给出。如果所有城市名字都已经使用过了,则城市名字变成 new 'city_name';如果
new 'city_name' 也已经使用过了,则使用 'city_name' 2,依此类推使用 'city_name' 3
, 'city_name' 4 等等。

city_name_list 是 city_name 的集合,用于在程序内部记录每个 nation(国家/种族)
配置的可用城市名字列表。例如,对于中国,这一城市列表部分为:
   "Beijing", "Shanghai", "Guangzhou", ...
  
city_name_list 具体用何种容器由应用需求决定,当前 freeciv 是用 city_name[]
数组存放的。我们记为:
        city_name_list = city_name[].

现在由于我还未研究到 city_name_list 的应用所在,所以对如何选择合适的存储方式
不能确定,因此会等到研究清楚 city_name 应用时候,再回头进一步研究存储方式。

city_name 是一个 class(freeciv 都是使用 struct), 其结构用伪代码描述为:
        city_name = {
                name: 城市的名字
                terrain[]: 此城市的地形匹配参数
        }

其中 name 是城市的名字是容易理解的,terrain[] 作为地形匹配参数是 civ3 里面所
没有的,我们以 american city 'New York' 为例子说明其配置数据:
        "New York (ocean, river, forest, !desert, !jungle)"

city_name 的格式是 'city_name [([!]terrain[, ...])]'
其中 terrain 表示该城市附近的地形,如 river 表示河流。
[!] 表示没有该地形,例如 !desert 表示城市附近没有沙漠。
城市周边地形可以有多个匹配 terrain,中间以逗号 ',' 隔开。

今天查看 city_name 的解析代码的时候,发现其:
        1、函数较长,if 层次较多,不太好修改和理解。最好是改改。
        2、函数直接修改了别处提供的 const char * 的数据,严重影响了
           封装代码。
        3、city_name_list 数据使用 malloc/strdup 方式分配,不满足
           sbuffer 内存管理的需要。sbuffer 以后会说明。

针对上述问题当前的解决方法是:
        1、暂时不修改,等进一步研究后统一改。
        2、复制一份 const char * 数据到 stack,修改 stack 中的数据。
        3、改为用 sbuffer 内存。
          
最主要的问题是,由于未深入研究 city_name_list 以后如何使用,因此这里
需要留下问号以等待以后的进一步研究。

posted on 2010-09-14 20:55 友谊树下 阅读(162) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理


<2026年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿

文章档案

搜索

  •  

最新评论