2个版本
0.1.1 | 2022年1月24日 |
---|---|
0.1.0 | 2022年1月23日 |
#600 in 编程语言
73KB
1.5K SLoC
官方RPG-lang编译器
RPG 是一种奥赛编程语言
用法
use rpg_compiler::{compile, compile_with_config, Config};
// Use one of the compile functions
let output = compile("main.rpg");
let output = compile_with_config("main.rpg", Config { max_char: 10, verbose: false });
变量输出将包含rpg程序的rust代码。然后可以将其写入文件并使用cargo进行编译。
语言规范
演员
演员可以是 角色 或 僵尸。他们有两个变量,称为 健康 和 攻击。他们还有一个库存来存放 物品。每场比赛(例如每个程序)允许的演员数量最多为 10。角色死亡时(例如,健康为0时)会消失,但僵尸的健康为0或以下时不会消失。他们需要被 转换为角色
角色可以施放更多的 法术,但不能有负健康值,而僵尸可以有负健康值。
角色
角色有两个变量 健康 和 攻击,两者都是无符号32位整数。
一个名为 "ash" 的角色,健康值为5,攻击值为3
char ash = (5, 3)
僵尸
僵尸是可以有负 健康 值(有符号32位整数)的演员。可以使用 un_zombify 法术将它们转换为普通角色。
zombie walker = (-4, 6)
物品
药水
药水有一个名为 治疗 的变量,可以用来治疗一个演员。演员可以从 商人 购买这些药水,并且需要根据他们使用药水的次数购买它们。
potion p = (5)
法术书
法术书用于施放不同的 法术。
spellbook eucharidion = ()
商人
商人出售物品。演员可以购买这些物品并将它们存放在他们的库存中。
merchant cabbage = ()
演员使用 buys
从商人那里购买物品
actor buys item from merchant
攻击
演员可以互相攻击,这将从攻击者的攻击值中减去被攻击者的健康值。
char a = (10, 3)
char b = (2, 5)
b attacks a
# a will now have 10 - 5 = 5 health
使用物品
演员可以使用他们库存中的物品。
potion p = (5)
char a = (5,0)
merchant m = ()
a buys p from m
a uses p
# a will now have 5 + 5 = 10 health
输出到屏幕
喊叫
角色可以喊出他们的健康值。这将输出一个新行。
char a = (1,0)
a shouts
a shouts
# output:
# 1
# 1
低语
角色可以低语他们的健康值。这将输出,不带新行。
char a = (1,0)
a whispers
a whispers
# output:
# 11
法术
角色可以使用咒语书施展咒语。他们使用咒语书和咒语名称,后面跟()
或(param)
God_speech
这将读取用户输入的任何数字
input uses spellbook casting god_speech()
Speak
这将打印角色的健康值的ASCII值
char jeremy = (33,1)
spellbook eucharidium = ()
merchant cabbage_man = ()
jeremy buys eucharidion from cabbage_man
jeremy shouts eucharidion casting speak()
# output:
# !
Time_warp
时间扭曲执行其下直到遇到end
关键字,此时它将回到开始处并再次执行这些行。为此,它需要一份提议。它将重复此循环,直到提议的角色没有剩余的健康为止。
在行末减去被消耗角色的健康值。
# We have 2 characters: david (5 health) and ella (5 health). David has a spellbook in its inventories
david uses spellbook casting time_warp(ella)
ella shouts
end
# Output:
# 5
# 4
# 3
# 2
# 1
Un_zombify
将角色转换为僵尸。
james_brown uses spell_book casting un_zombify(zombie1)
Confuse
当角色困惑时,它在喊叫或耳语时会输出其健康值减1。
steven uses spell_book casting confuse(other_char)
other_char shouts # Will output the other_char's health - 1 e.g. other_char = (1,2), so the output will be: 0
Create_potion
角色可以更改药水值
char sans = (6, 1)
potion p = (5)
sans buys p from merchant
sans uses spellbook casting create_potion(p)
sans uses p
sans shouts
# Output:
# 12 (6 + 6)
Shift
Shift交换角色的健康和攻击。
char Ness = (2,1)
Ness uses spellbook casting shift()
Ness shouts
# Output:
# 1
依赖项
~4.5–6MB
~108K SLoC