1 个不稳定版本
0.1.0 | 2024 年 2 月 4 日 |
---|
#220 在 游戏 中
用于 heartless_tk
95KB
2K SLoC
Heartless,一个受 mshearts 启发的纸牌游戏。
它在控制台中运行。要在图形模式下运行,您可以使用 GUI 前端。
规则
成为游戏结束时得分最低的玩家。当一名玩家的得分达到或超过 100 分时,游戏结束;得分最低的玩家获胜。
每局游戏结束时,玩家计算他们所获得的红桃数量以及(如果适用)黑桃 Q。红桃每张计一分,黑桃 Q 计 13 分。
当一名玩家在一手中获得所有 13 张红桃和黑桃 Q 时,该玩家不会失去 26 分,而是得零分,而他的每位对手将额外获得 26 分。
传递后持有黑桃 2 的玩家发第一张牌。如果可能,每位玩家必须跟牌。如果一名玩家没有跟花色,可以打出其他花色的牌。然而,如果一名玩家在第一轮跟牌时没有黑桃,不能打出红桃或黑桃 Q。花色中最高牌赢得一局,赢得该局的玩家发下一张牌。直到有红桃被打出之前,不能打出红桃。
传递阶段
在弃牌之前,玩家必须将 3 张牌传递给另一名玩家。
- 在第一手中,每位玩家将牌传递给左边的对手。
- 在第二手中,每位玩家将牌传递给右边的对手。
- 在第三手中,每位玩家将牌传递给对面的对手。
- 在第四手中,玩家不传递牌。
以此类推。
卡片表示
一张卡片的形式为“等级+花色”,例如“2♣”。
手中的牌按 2~A 排序,首先是黑桃,然后是红心,最后是梅花。相同花色的牌将放在一起,以花色结尾,例如“467QA♣”表示“4♣ 6♣ 7♣ Q♣ A♣”。
可以在任何地方插入任意数量的空白,并完全忽略。
如果您想查看所有文本的ASCII表示,可以使用“--ascii-suit”命令行参数,花色的首字母小写c、d、s、h将显示为花色。例如,“467QA♣”将显示为“467QAc”,即“4c 6c 7c Qc Ac”。
用户输入
当您想要选择要传递或弃置的牌时,只需输入牌的表示,然后按“Enter”提交。使用c、d、s、h来编码花色。
在Heartless中的用户输入设计得非常友好。它不区分大小写,以下情况下可以省略花色
-
当跟随已经由早期手牌指定的花色时。
-
第一轮的花色总是黑桃。
-
当不跟随花色,但手中的牌只有一张指定花色的牌时。
要退出游戏,只需输入“exit”。
可定制AI策略
有时用户可能会觉得内置的AI策略太简单,并且对月亮击打的处理过于简单。如果您有更好的想法,只需将其实现为您的首选语言。“scripts/”文件夹提供了一个名为“replica.py”的Python脚本示例,这是内置的AI副本。
提供“--all”、“--others”、“--me”、“--left”、“--opposite”、“--right”命令行参数后,Heartless程序将反复调用您的脚本,在传递阶段和每一轮。
--who
脚本的执行者。如果您的脚本由“--left your.script”调用,“who”将是1。对于“--me”为0,“--opposite”为2,“--right”为3。“--all”将运行脚本4次,使用不同的“who”为0、1、2、3,而“--others”使用1、2、3。
--hand
谁手中的牌。它是一个带有小写花色且不带任何空格的牌表示。
--discarded
到目前为止弃置的所有牌。它是一个带有小写花色且不带任何空格的牌表示。
--suit_to_follow
当前轮次要跟随的花色。
--round
现在是第几轮,0为传递阶段,1~13为弃置阶段。
--under_the_gun
本轮第一个弃牌的人。
--round_winner
本轮最高牌的人。
--high_card
本轮最高牌是哪张。
--my_discarding
玩家ME弃置的牌,带有小写花色。
--my_hand_score
玩家ME得了多少分(共26分)。
--my_game_score
玩家ME得了多少分(最多99分)。
--my_suit_chars
玩家ME可能拥有的花色,例如“cdh”表示ME没有黑桃,可能有黑桃、红心、方块和梅花。
--left_discarding
左玩家弃置的牌,带有小写花色。
--left_hand_score
左玩家得了多少分(共26分)。
--left_game_score
左玩家得了多少分(最多99分)。
--left_suit_chars
左玩家可能拥有的花色,例如“cdh”表示ME没有黑桃,可能有黑桃、红心、方块和梅花。
--opposite_discarding
对方玩家弃置的牌,带有小写花色。
--opposite_hand_score
对方玩家得了多少分(共26分)。
--opposite_game_score
对方玩家得了多少分(最多99分)。
--opposite_suit_chars
对方玩家可能拥有的花色,例如“cdh”表示ME没有黑桃,可能有黑桃、红心、方块和梅花。
--right_discarding
右玩家弃置的牌,带有小写花色。
--right_hand_score
右玩家得了多少分(共26分)。
--right_game_score
右玩家得了多少分(最多99分)。
--right_suit_chars
右玩家可能拥有的花色,例如“cdh”表示ME没有黑桃,可能有黑桃、红心、方块和梅花。
在Rust中编写可定制的AI策略
图书馆用户可以通过提供用Rust编写的函数来自定义策略。
use heartless::*;
fn your_ai( game: &Game, who: usize ) -> Cards { todo!() }
let mut game = Game::default();
game.strategies.set_for_others( your_ai );
game.main_loop();
自动模式
给定“--automatic”,游戏将以自动模式运行,用户根本无法与游戏互动。您可以通过启用此模式来测试您的AI。使用“--count 100”可以运行100次,看看您的AI赢了多少次。
许可证
根据Apache License 2.0或MIT许可证,由您选择。
依赖关系
约1.2-1.9MB
约36K SLoC