2011-9-7 19:52:35 阅读248 评论9 72011/09 Sept7
服务器的流程控制线程在游戏开始之后才开始,游戏开始之前的选将等环节则没有用单独的线程来控制,这样只能通过主线程的异步的网络IO加上命令回调函数才能完成,造成游戏开始前代码逻辑的零散、混乱和不连贯,为了保存中间状态只能额外增加房间实体对象的字段,而不能像线程那样用堆栈上的局部变量来保存,造成较多的耦合。
性别在程序是一个是布尔变量,因此是2元的,不能保存第三种性别,另外性别只与武将有关,与角色无关,这样导致有性别可以变化的武将如陆伯言和左慈只能以变身机制来实现,而不能像势力那样。
服务器是由C++来编写的,C++缺乏垃圾回收的机制,而程序里也没有投入过多的处理。因此在很多地方不注意就会造成内存的泄漏,导致服务器不能长久的运行,否则会因资源耗尽而终止。
服务器与客户端之间是使用一种基于指令行的纯文本通信协议,但是跟HTTP的无状态连接不同,是一种长连接的协议,因此是可以有状态的,而服务器的要求客户端的每一次应答消息,都必须附加对应的回复命令头,而实际上因为有状态的缘故,这个命令头其实很多情况下是不必要的,这造成了协议的较多冗余。
AI框架上很多都是以武将为中心,而不是以技能为中心,这样在很多副将的策略就会直接忽略。另外AI的行为只能由AI算法自行判断,导致是由AI做出一些不符合游戏规则的地方。
2011-9-4 22:49:48 阅读421 评论1 42011/09 Sept4
文件(夹)名 | 作用 |
audio | 存放所有游戏中需要的音频文件,全为OGG格式 |
backdrop | 存放游戏中的背景资源 |
diy | 卡牌编辑器所需资源 |
doc | 竞赛数据库格式说明和通信协议的简单说明(用ASCIIDoc 格式),另外还有无脑曹操蜜的一些言论 |
etc | 存放AI选将算法的相关统计数据 |
extension-doc | 用Lua脚本进行武将DIY的文档(稍微有些过时了) |
font | 程序界面所需的字体(华康少女体) |
image | 存放游戏所需的所有图片文件,以PNG格式为主,少数为JPG格式 |
include | 程序所需的第三方库的头文件,主要是plib中的joystick支持, irrKlang 和lua |
lang | 程序的lua表格式的翻译文件,主要是游戏中的武将、卡牌、各种提示。程序的汉化有2套汉化系统,一套是Qt自带的,基于QM格式,一个是程序自行编写的,使用Lua格式。 |
lib | 第三方库的动态库和静态库 |
lua | AI代码和其他辅助工具代码 |
resource | 图标资源文件 |
scenarios | 剧情模式的相关说明文档 |
src | 程序的主体代码 |
swig | 程序暴露给AI的接口,用SWIG可以读取这些接口文件来生成对应的包装C++代码 |
.gitignore | 被git版本管理系统所忽略的文件列表 |
7zr.exe | 7z格式的打包工具,用于DIY包的打包和发放 |
banpairs.txt | 双将禁配文件 |
compile.sh | 在Linux下自动化编译脚本 |
gpl-3.0.txt | GPL 3.0 |
ikpMP3.dll | irrKlang 的 MP3解码插件,使音频引擎支持MP3格式 |
irrKlang.dll | irrKlang 的主体动态库 |
libluasqlite3.dll | lua 的 SQLite 3 绑定,比赛时辅助Lua读取数据库信息并发送至主办者邮箱 |
lua51.dll | Lua解析引擎的核心动态库 |
lua5.1.dll | 同上,因为某些Lua的3方C绑定库依赖的名称有的是lua51.dll 有的是 lua5.1.dll 所以有一个冗余备份 |
QSanguosha.pro | 程序的项目文件 |
qt_zh_CN.qm | Qt的相关中文化翻译文件,用于将一些最基本的Qt控件汉化 |
README.markdown | 程序的相关介绍文件,用MarkDown 格式编写 |
sanguosha.lua | 程序启动时的一个初始化脚本,用于加载程序的lua格式的翻译文件 |
sanguosha.ts | 程序的Qt翻译系统的源文件,用于生成程序所需的sanguosha.qm文件 |
2011-8-25 18:42:52 阅读161 评论0 252011/08 Aug25
所谓变身,就是一名角色的武将发生了变化,从而导致失去其变身前武将的所有技能,然后获得变身后武将的所有技能。变身最早是来自剧情模式中的樊城之战,吕蒙变身为神吕蒙,关羽变身为神关羽,后来随着各种新模式、新武将的加入,变身也越来越多,情况也日趋复杂。我大概总结了下:
变身情况 | 变身前 | 变身后 | 是否改变势力 | 是否改变体力上限 | 是否触发游戏开始阶段技能 |
樊城之战中的"白衣渡江" | 吕蒙 | 神吕蒙 | 否 | 是 | 否 |
樊城之战中的"玉泉显圣" | 关羽 | 神关羽 | 否 | 是 | 否 |
陆伯言的"神君" | 男女形态互相转变 | 否 | 否 | 否 | |
姜伯约的"殉志" | 姜伯约 | 选择的蜀国武将 | 否 | 是 | 是 |
貂蝉的"脱壳" | 貂蝉 | SP貂蝉 | 否 | 否 | 否 |
SP貂蝉的"续尾" | SP貂蝉 | 貂蝉 | 否 | 否 | 否 |
孙尚香的"出嫁" | 孙尚香 | SP孙尚香 | 是 | 否 | 否 |
KOF换武将 | 上一个武将 | 下一个武将 | 是 | 是 | 是 |
左慈的"化身" | 变为其化身武将对应性别的男女形态 | 是 | 否 | 否 | |
被蔡文姬断肠 | 原来武将 | 素将(白板) | 否 | 否 | 否 |
僵尸模式人类武将尸变 | 原来人类武将 | 僵尸 | 否 | 是 | 否 |
虎牢关模式,神吕布变身 | 神吕布第一形态 | 神吕布第二形态 | 否 | 是 | 否 |
此外,山包刘禅、孙策、邓艾、姜维和神司马懿的觉醒技,虽然改变了体力上限并获得了对应的技能,但是并不是使用变身机制来实现的,所以不是变身。