#oracle #camel #game

bin+lib camel-up

Camel Up 游戏的预言机

1 个不稳定版本

0.1.0 2020 年 2 月 13 日

#397游戏

MIT 许可证

39KB
873

Camel Up 预言机

Camel Up 是一款机遇游戏。本项目为您提供预言机以回答问题。

Camel Up

Camel Up 是一个

两人到八人玩的桌面游戏。它由 Steffen Bogen 设计,由 Dennis Lohausen 插画,并由 Pegasus Spiele 在 2014 年出版。玩家在沙漠中的骆驼比赛中下注;赢得最多钱的玩家是游戏的赢家。

这是一款适合所有年龄段的玩家的游戏,平衡得很好。

示例

黄色领先,红色追赶

Yellow in a considerable lead

看看上面的情况。黄色在比赛中领先很多,红色正努力追赶。红黄两个骰子都在使用中。经过深思熟虑,可以得出以下结论。

下一次投掷有六种可能的情况。

  1. 红色掷出一点
  2. 红色掷出两点
  3. 红色掷出三点
  4. 黄色掷出一点
  5. 黄色掷出两点
  6. 黄色掷出三点

只有一种情况下红色会赢,即红色掷出三点。无论接下来发生什么,红色骆驼都会在黄色骆驼之上,红色将会获胜。

即使在这场比赛中,推理也很复杂。让我们使用这个 crate 来验证我们的推理。

首先在您的依赖项中声明 camel_up crate。

camel_up = *

接下来声明我们想要使用它。

external crate camel_up;

我们将使用预定义来导入一些有用的名称。

use camel_up::prelude::*;

在我们的 main 函数中,我们将重新创建比赛。Race 结构体实现了 FromStr 特性。这允许将描述比赛的字符串解析为 Race。每个骆驼都通过其颜色的第一个字母来标识。位置用逗号 , 标记。因此我们的比赛由 "r,,,y" 描述。用这个描述创建比赛。

let race = "r,,,y".parse::<Race>().expect("to parse");

类似地,剩余的骰子也可以创建。

let dice = "ry".parse::<Dice>().expect("to parse");

使用一个 Race 和一组 Dice,我们可以预测这场比赛将如何进行。

let result = project(&race, &dice);

它返回一个将骆驼映射到其获胜机会的 Chances 映射。我们可以将其转换为 Vec

let mut ordered: Vec<(Camel, Fraction)> =
    result.winner.values().map(|(k, v)| (*k, *v)).collect();

可以根据机会大小进行排序。

ordered.sort_by(|(_, left), (_, right)| right.cmp(&left));

我们可以使用这个结果来输出这些机会,获胜者将排在前面。

for (camel, fraction) in ordered {
    print!("({:?},{})", camel, fraction);
}
println!()

运行此操作将输出

(Yellow,5/6)(Red,1/6)

这支持我们之前所做的艰苦工作。

在上述情况中,红色的骆驼是弱势一方。我们能否改变赔率?红色的骆驼可以请求他们的朋友帮忙。通过组建骆驼单位,红骆驼的机会可能会变得更有利。

通过修改上述 示例,可以验证红色需要所有朋友的支持才能有更好的获胜机会并打败黄色。

依赖项

~750KB