2 个版本

使用旧的 Rust 2015

0.1.2 2018 年 6 月 15 日
0.1.1 2018 年 6 月 15 日
0.1.0 2018 年 6 月 14 日

游戏 中排名第 615

MIT 许可证

28KB
310

2048-rust

一个使用位移和预计算的移动表的 2048 实现。该实现旨在在大量游戏中测试算法时提供低开销。在 2015 年中期的 MBP Retina (2.5GHz i7) 上,1000 万场比赛大约需要 80 秒来完成,在 8 个线程上运行(每个线程 125 万场比赛)通过执行随机移动,平均得分约 2k。

棋盘本身被编码为 u64。这意味着每个方块有 4 位(64 / 16 = 4)来存储其值。由于将所有四位设置为 1 的最大值是 15,我们不能直接用它来显示值。相反,我们使用这 4 位作为幂值:2 << 15 = 655362 << 14 = 327682 << 13 = 163842 << 12 = 8192,等等...

安装

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
tfe = "0.1"

使用方法

自动玩游戏的简单方法是用 tfe::Game::play 方法

extern crate tfe;
use tfe::{Game, Direction};

// Direction enum contains the following valid moves:
// - Direction::Left
// - Direction::Right
// - Direction::Down
// - Direction::Up

let game = Game::play(|board, failed| Direction::sample_without(failed));
println!("score: {:<6} board hex: {:016x}", Game::score(game.board), game.board);

play 方法接受一个闭包,该闭包接受一个 board: u64failed: &Vec<Direction> 作为参数,并返回下一个 Direction 移动。

如果每个不同的移动都已尝试且失败,并且之间没有成功的移动,则游戏将终止。

文档

本包的文档可以在docs.rs上找到

参考资料

我当然没有发明这个实现,大部分是从@nneonneo的C++实现中借鉴的。

向优秀的参考资料致敬

依赖项

~1MB
~13K SLoC