刺猬战争 Hedgewars

又大半年没有更新blog了…
昨天发现一个类似”百战天虫”的开源游戏Hedgewars, 支持很多操作系统 (windows/linux/BSD/…), 可以在http://www.hedgewars.org下载安装程序和源码 (Windows/Linux). 游戏里面的主角从虫子变成了刺猬 (单人模式里面貌似npc是水果人…), 也是一样的游戏套路, 满天乱扔东西…游戏是用C++和Pascal写成的, 用了Qt库和SDL (Simple DirectMedia Layer)系列库, 都是跨平台的东西.

下了一个0.9.9版, 在windows下面安装完之后, 运行没多久就出现一个错误说某个zh-CN.txt文件找不到…google一下, 删掉了locale目录下面所有的*zh-cn*文件, 游戏变成英文版, 不过能正常运行了. 总体来说感觉不错, 在我的破电脑上也能比较流畅的运行. 画面和百战天虫相比, 总体风格差不多, 一些细节还需要改进, 比如把炸弹扔到别人头上就看不见了…音乐还是有一定差距的, 不论是音质还是背景音乐的选择. 音效貌似是照搬百战天虫的音效. 操作方式和原来一样, 省的再去适应. 然后就是不仅支持网络对战, 竟然还有官方服务器…进去过后发现也有20多个人. orz…

作为一个爱岗敬业的IT民工, 体验一下安装版的游戏过后, 应该要自己build一个出来玩玩. 查了一下怎么build, 就只有在官网的FAQ里面有几句说明: 先下Qt, FreePascal, SDL系列库, 然后去源代码目录cmake + make搞定. 当然, 这是理想情况, 实际操作起来, 不会那么河蟹…我在windows下的步骤:

1) 先找到官网上列的库, 下载下来. 总共有200多MB的东西. 因为Qt很大 (100多MB), FreePascal也有35MB. 然后把安装程序都装上, 压缩包都解开. 安装Qt的时候会提示下载MinGW (GCC的windows移植版), 如果有, 就不必下了.

2) 设置PATH环境变量. 包括:
<CMake路径>bin – 能在cmd line直接下运行CMake
<MinGW路径>bin – 使CMake的选项-G “MinGW Makefiles”能工作
<Qt路径>bin – CMake Hedgewars的过程中需要用qmake等工具
<FreePascal路径>bini386-win32 – CMake Hedgewars的过程中需要用到FreePascal. 注意这个目录下面也有gcc的一系列工具, 所以最好把这个目录放到<MinGW路径>bin之后
<SDL路径>includeSDL – CMake Hedgewars的过程中需要SDL的头文件和库文件
<SDL_mixer路径>include – CMake Hedgewars的过程中需要SDL的头文件和库文件
<SDL路径>bin – (build生成的) Hedgewars.exe运行需要SDL的DLL
<SDL_mixer, SDL_net, SDL_ttf的路径>lib – 共3个路径, (build生成的) Hedgewars.exe运行需要的DLL

3) 进入cmd line到Hedgewars的源代码目录, 运行CMake . -G “MinGW Makefiles”, DONE. 选项-G指定生成makefile的generator. 这里用的MinGW.

第二步里加了很多路径到PATH中, 有三种类型的路径: 第一是为了使cmd line能找到并直接运行程序比如<CMake路径>bin; 第二是使CMake能找到需要的工具程序, 头文件和库文件比如<SDL_mixer路径>include (因为Hedgewars源代码里的的CMakeLists.txt文件包含一些搜索相应工具/库的”find_program”, “find_package”指令, 我不确定除了修改PATH以外还有其他什么更简单的方式让CMake能找到这些工具/库); 第三是使生成的Hedgewars.exe程序运行时能找到DLL比如<SDL路径>bin.

2 thoughts on “刺猬战争 Hedgewars

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>