2个版本

0.1.1 2022年1月24日
0.1.0 2022年1月23日

#600 in 编程语言

MITLGPL-3.0

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