显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

太阳神上的博客

青青子衿,悠悠我心,但为君故,沉吟至今。

 
 
 
 

我的新浪微博

 
 
模块内容加载中...
 
 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 
 
 

太阳神三国杀设计上的一些缺陷

2011-9-7 19:52:35 阅读970 评论9 72011/09 Sept7

服务器端设计的缺陷

线程控制

服务器的流程控制线程在游戏开始之后才开始,游戏开始之前的选将等环节则没有用单独的线程来控制,这样只能通过主线程的异步的网络IO加上命令回调函数才能完成,造成游戏开始前代码逻辑的零散、混乱和不连贯,为了保存中间状态只能额外增加房间实体对象的字段,而不能像线程那样用堆栈上的局部变量来保存,造成较多的耦合。

性别机制

性别在程序是一个是布尔变量,因此是2元的,不能保存第三种性别,另外性别只与武将有关,与角色无关,这样导致有性别可以变化的武将如陆伯言和左慈只能以变身机制来实现,而不能像势力那样。

内存管理

服务器是由C++来编写的,C++缺乏垃圾回收的机制,而程序里也没有投入过多的处理。因此在很多地方不注意就会造成内存的泄漏,导致服务器不能长久的运行,否则会因资源耗尽而终止。

协议设计上的缺陷

服务器与客户端之间是使用一种基于指令行的纯文本通信协议,但是跟HTTP的无状态连接不同,是一种长连接的协议,因此是可以有状态的,而服务器的要求客户端的每一次应答消息,都必须附加对应的回复命令头,而实际上因为有状态的缘故,这个命令头其实很多情况下是不必要的,这造成了协议的较多冗余。

AI设计的缺陷

AI框架上很多都是以武将为中心,而不是以技能为中心,这样在很多副将的策略就会直接忽略。另外AI的行为只能由AI算法自行判断,导致是由AI做出一些不符合游戏规则的地方。

命名上的不规范

  1. 协议上:询问式有3类不同的格式:activate, askForXXX 和doXXX,而本质上他们都没有区别,完全可以统一以 askForXXX 的格式
  2. 在附加技能的时候,有 requireSkill 和attachSkillToPlayer 2种,而失去附加技能则只有detachSkillFromPlayer 这一种。显然,应该用requireSkill 的一个额外参数来指定附加技能的性质,而用loseSkill 来剥夺附加技能较为合适,目前这种API显得不太合适。
  3. 部分武将的内部命名不规范,如吕布为lubu,吕蒙为lumeng,而不是lvbu和lvmeng,为了保持向后的兼容性,只能用这种不合适的命名。

作者  | 2011-9-7 19:52:35 | 阅读(970) |评论(9) | 阅读全文>>

太阳神三国杀源代码结构(一)

2011-9-4 22:49:48 阅读4491 评论4 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

同上,因为某些Lua3C绑定库依赖的名称有的是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-9-4 22:49:48 | 阅读(4491) |评论(4) | 阅读全文>>

太阳神三国杀中的变身机制

2011-8-25 18:42:52 阅读729 评论0 252011/08 Aug25

所谓变身,就是一名角色的武将发生了变化,从而导致失去其变身前武将的所有技能,然后获得变身后武将的所有技能。变身最早是来自剧情模式中的樊城之战,吕蒙变身为神吕蒙,关羽变身为神关羽,后来随着各种新模式、新武将的加入,变身也越来越多,情况也日趋复杂。我大概总结了下:

变身情况

变身前

变身后

是否改变势力

是否改变体力上限

是否触发游戏开始阶段技能

樊城之战中的"白衣渡江"

吕蒙

神吕蒙

樊城之战中的"玉泉显圣"

关羽

神关羽

陆伯言的"神君"

男女形态互相转变

姜伯约的"殉志"

姜伯约

选择的蜀国武将

貂蝉的"脱壳"

貂蝉

SP貂蝉

SP貂蝉的"续尾"

SP貂蝉

貂蝉

孙尚香的"出嫁"

孙尚香

SP孙尚香

KOF换武将

上一个武将

下一个武将

左慈的"化身"

变为其化身武将对应性别的男女形态

被蔡文姬断肠

原来武将

素将(白板)

僵尸模式人类武将尸变

原来人类武将

僵尸

虎牢关模式,神吕布变身

神吕布第一形态

神吕布第二形态

此外,山包刘禅、孙策、邓艾、姜维和神司马懿的觉醒技,虽然改变了体力上限并获得了对应的技能,但是并不是使用变身机制来实现的,所以不是变身。

作者  | 2011-8-25 18:42:52 | 阅读(729) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2014

创建博客 登录  
 加关注