2 个版本
使用旧的 Rust 2015
0.1.2 | 2018 年 6 月 15 日 |
---|---|
0.1.1 |
|
0.1.0 | 2018 年 6 月 14 日 |
在 游戏 中排名第 615
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 = 65536
,2 << 14 = 32768
,2 << 13 = 16384
,2 << 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: u64
和 failed: &Vec<Direction>
作为参数,并返回下一个 Direction
移动。
如果每个不同的移动都已尝试且失败,并且之间没有成功的移动,则游戏将终止。
文档
本包的文档可以在docs.rs上找到。
参考资料
我当然没有发明这个实现,大部分是从@nneonneo的C++实现中借鉴的。
向优秀的参考资料致敬
依赖项
~1MB
~13K SLoC