Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

游戏设计领域对中文编程(语言)的需求 #22

Closed
nobodxbodon opened this issue Aug 14, 2017 · 17 comments
Closed

游戏设计领域对中文编程(语言)的需求 #22

nobodxbodon opened this issue Aug 14, 2017 · 17 comments
Labels
Projects

Comments

@nobodxbodon
Copy link
Member

@azige 恰好是你的专业领域, 请教一下需求和可能的方向. 下面源自#19 (comment):

游戏设计方面可能有很多应用,例如编写技能脚本或敌人的行动策略之类的

例程源自 #9 (comment)

def 基础策略() {
    if (存在单位(是自己 & mp比例范围(0,0.05))){ 
        选择单位(敌方 & 活着的){
            攻击 选择结果集.随机目标
        }
    }
    选择单位(敌方 & 活着的){
        if (选择结果集数量 > 2){
            使用技能 "XXX", 选择结果集.hp数值最低
        } 
    }
    选择单位(敌方 & hp比例范围(0, 0.1)){
        if (选择结果集数量 > 0) {
            使用技能 "XXX", 选择结果集.hp数值最低
        }
    }
    选择单位(敌方 & 活着的){
        if (选择结果集数量 > 1){
            使用技能 "XXX", 选择结果集.hp数值最低
        } else {
            使用技能 "XXX", 选择结果集.hp数值最低
        }
    }
}

不知像 按键精灵,TC简单程序开发 之类的脚本语言是否方向也是相似的, 只是更侧重I/O?

@azige
Copy link

azige commented Aug 15, 2017

本人听同事说他们以前编写这类脚本是用表格的方式,在表里套用程序框架里提供的过滤条件之类的元素来编写脚本。但是表格维护起来从某些方面上来说比较难,于是本人就想利用Groovy来定制一个这样的DSL。虽然最后开发的结果就像例程那样还保留了许多Groovy的语法元素,但是基本上还算是一个不错的易读易扩展的脚本。

感觉在游戏方面的话这类脚本如果设计得好应该不像“程序”而仅仅是一些“条件”和“策略”的组合,毕竟本来面向的也不是程序员。这些脚本应该是专业程序员在开发好游戏的大致结构后给非专业程序员的游戏设计师来设计游戏中一些易变的创意元素用的,例如技能、任务、剧本、敌人行动策略之类的。

@nobodxbodon
Copy link
Member Author

多谢分享! 完全没有游戏设计经验(玩过类似的), 想确认一下语义:
游戏中角色(比如法师)的某种技能, 自己有魔法值时就攻击敌方活着的随机目标, 目标根据敌方数量和血量而定.
请问这个脚本的运行结果是什么呢? 它对游戏框架的依赖性有多大? 比如说在游戏框架完全建立前, 设计师能不能先行编写这些脚本, 然后进行模拟/测试呢?

突然想到Cucumber框架, 虽然性质不大一样, 不过感觉思路有点近(类自然语言描述用例)

@obj404
Copy link

obj404 commented Aug 16, 2017

哈哈,一款网游,里面有多少物品,技能,英文怎么翻译的?很可能就是一个ID,然后中文写的注释。

所以,你要知道这个ID是干嘛,你要去看注释。不然,你试下描述下 五雷轰顶,凌波微步 。

@azige
Copy link

azige commented Aug 16, 2017

@chencun 如此这般

id = 111111
名字 = "XXX"
门派 = "XXX"
类型 = "SPECIAL"
最大目标数 = 4
基础攻击回数 = 1
物伤系数 = 1.4
基础伤害值 = { 等级 * 4 }
后期伤害 = 0
能否多重施法 = false
能否手动施放 = true

施放条件{
    总是可用
}

消耗{
    [sp:50]
}

目标类型{
    敌方 & 活着的
}

多目标选择策略{
    默认选择策略
}

主目标处理{
    通常伤害(
        // 伤害值
        物理伤害计算(行动者, 目标),
        // 伤害类型,有 normal spell absolute
        "normal",
        // 暴击参数,包含暴击率 暴击因子 暴击固定值
        物理暴击计算(行动者, 目标),
        // 命中率
        1
    )
}

副目标处理{
    跟主目标一样()
}

在需要用脚本的地方可以用一些跟数字id等价的中文id来描述一些对象,具体就看项目怎么运用。再说,既然是中国人开发的游戏,除了一些惯用词以外还需要把游戏里的元素用英文命名吗?

@nobodxbodon
Copy link
Member Author

nobodxbodon commented Aug 16, 2017

赞! 比较扎眼的就这块:

    通常伤害(
        // 伤害值
        物理伤害计算(行动者, 目标),
        // 伤害类型,有 normal spell absolute
        "normal",
        // 暴击参数,包含暴击率 暴击因子 暴击固定值
        物理暴击计算(行动者, 目标),
        // 命中率
        1

应该能分开成命中率(1)之类吧? 这个框架是Groovy写的?

@azige
Copy link

azige commented Aug 16, 2017

是Groovy

通常伤害 是一个4参数的方法,当然要增强语义的话改造成

通常伤害
.伤害值(1)
.类型("A")
.命中率(1)

也是可以,不过我们项目最近是没时间改了

@nobodxbodon
Copy link
Member Author

开源吧 ;P 帮你改, 虽然本人没用过Groovy lol

@azige
Copy link

azige commented Aug 16, 2017

那部分目前在我们项目里耦合略高,等有空整理一下拆出来可以考虑开源_(:3」∠)_

@nobodxbodon
Copy link
Member Author

哦, 之前#22 (comment) 的依赖度问题也和耦合度有关.
非常期待! 如果整个拆工作量太大的话, 有可能的话能否每次开一部分? 也方便别人跟进.

@swizl
Copy link

swizl commented Sep 10, 2017

https://github.com/swizl/lua_cn
兼容中英关键字的lua,可以集成到游戏里。

@nobodxbodon
Copy link
Member Author

@swizl 多谢! 已经添加到索引帖 #25. 比较了一下tinycc_zh和lua_cn, 大多相同关键词的中文对应也相同, 不过比如while是'当'和'每当', 不知是否一致比较好? 另外有个想法, 就像多数英文编程语言的相同功能的关键词的用词都基本相同, 我们是否也可以整理一个中英关键词对照表, 这样可以保证不同语言汉化后的关键词一致性? 之后还可以发展一个常用库方法的中英对照表.

@nobodxbodon
Copy link
Member Author

@azige 最近可有空? :)

@azige
Copy link

azige commented Sep 28, 2017

感觉国庆假期都要爆炸了 😢

@nobodxbodon
Copy link
Member Author

@lych77 也是这一行的. golang/go#5763 (comment) 提到:

They just compose the values in a spreadsheet editor and tools alike, define type names and field names by sheet names and header of the table, and of course they prefer using native words to describe the logic for clarity, especially for fancied concepts that are often difficult to translate, which are not rare at all in games.

估计和你楼上提到的方式类似.

@farteryhr
Copy link

@chencun 简直同意,还有龙飞凤舞什么的……

尽管在大学还去听了一学期英语笔译课,第一节课就举出了经典例子,各种中国名著里的四字短语,专业翻译都难对付,放进文章,还有上下文可以整体效果糊过去,作为独立的一个短语来翻,就更几近无解。

然后来写中国风格砍砍砍,代码里起名还是只能拼音。

@nobodxbodon
Copy link
Member Author

暂时归到#19 有进展请再开

@nobodxbodon
Copy link
Member Author

@azige 最近在这个 MUD游戏中文框架/语言的讨论 中引用了此贴。
白驹过隙一晃数年,有空的话一道聊聊吧。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
E2030
else+s6k/s6rt
Development

No branches or pull requests

6 participants