53 个版本

7.0.0 2019 年 12 月 9 日
0.18.1 2023 年 1 月 29 日
0.18.0 2022 年 11 月 19 日
0.18.0-beta2021 年 12 月 22 日
0.1.9 2018 年 12 月 24 日

96游戏

Download history 3/week @ 2024-03-12 59/week @ 2024-03-26 341/week @ 2024-04-02

每月 184 次下载

MIT 许可证

91KB
2.5K SLoC

Goban

用于与“围棋盘”(我们下围棋的棋盘名称)交互的库

使用版本 > 0.5.0,因为在该版本中检测死子以及 Ko 检测存在一个错误

频道:稳定

仅包含移动生成,规则中没有 IA,也没有前端。

功能

  • 历史 // 每个游戏都会有其所有历史,因此您可以遍历它。性能降低!

感谢一些在分析和优化方面的帮助,我们可以在 3 毫秒内随机运行整个游戏(i7u 3.0 GHz)(之前是 600 毫秒)!

示例

获取合法的移动并随机进行一些操作。

最重要的结构是 Game,它具有创建和管理围棋游戏所需的所有功能。

use crate::goban::rules::*;
use crate::goban::rules::game::*;
use rand::seq::IteratorRandom;
use goban::rules::game_builder::GameBuilder;

let mut g = Game::builder()
   .size((19,19))
   .rule(CHINESE)
//  .komi(7.5)  Komi is hardcoded for each rule, but can be override like this.
   .build().unwrap();

let mut i = 35;
while !g.is_over() && i != 0 {
      g.play(
         // legals return an iterator of (x,y) points (lazy)
         g.legals()
               .choose(&mut rand::thread_rng())
               .map(|point| Move::Play(point.0,point.1))
               .unwrap());
       i -= 1;
       g.display_goban();
       // None if the game is not finished
       println!("{:?}", g.outcome());
       // Inner array using row policy
       println!("{:?}", g.goban().to_vec());


}
#[cfg(feature = "history")]
{
           let mut iter_history = g.history().iter();
           println!("{:?}", iter_history.next().unwrap());
           println!("{:?}", iter_history.next_back().unwrap())
}

┏┯┯┯┯┯┯┯┓
┠┼┼┼┼┼┼┼┨
┠┼┼┼┼┼┼┼┨
┠┼┼┼┼┼┼┼┨
┠┼┼┼┼┼┼┼┨
┠┼┼┼┼┼┼┼┨
┠┼┼┼┼┼┼┼┨
○┼┼┼┼┼┼┼┨
┗┷┷┷┷┷┷┷┛


etc...

工作内容

  • 捕获棋子
  • 下棋
  • 认输
  • 投降
  • 计分实现
  • 在终端上打印一个 漂亮的 Unicode 棋盘!
  • SGF 导入
  • 生成合法的移动(处理 Ko 检测、自杀式移动、超级 Ko)
  • 日本规则
  • 中国规则
  • 不同大小的棋盘(4x5、4x9),受 Zobrist 哈希限制,但可以在分叉中轻松增加(19x19)。
  • 实验性 使用 MCTS 滚动检测死子。

等待

  • Const 泛型或可能不是(与带有 backing 数组的 Goban 进行基准测试略快)

依赖关系

~4MB
~84K SLoC