3个稳定版本

1.0.2 2024年8月2日
1.0.1 2024年8月1日

#142 in 游戏开发

Download history 253/week @ 2024-07-27 60/week @ 2024-08-03 4/week @ 2024-08-10

每月317次下载
用于 gyges_engine

GPL-3.0-or-later

2MB
12K SLoC

概览

桌面游戏盖伊格斯的库。

盖伊格斯是一款两人对战策略游戏。盖伊格斯的目标是将一个棋子移动到对手的最后一行。难点在于,没有棋子属于任何人。你只能移动离你最近的行的棋子。棋子由1、2或3个环组成;这个数字也是它们必须移动的格数。如果一个棋子落在另一个棋子上,它可以移动等于那个棋子环数的格数。它还可以将那个棋子移到任何开放空间。

在桌面游戏竞技场查看游戏: 盖伊格斯.

这是一个专门为游戏盖伊格斯编写的库,而不是玩游戏引擎。您可以在这里查看引擎。

文档Crates.io页面

库功能

  • 棋盘表示
    • Zobrist哈希
  • 位板
  • 移动表示
  • 自定义移动列表
  • 快速移动生成
  • 置换表

库使用

您可以通过将以下内容添加到您的 Cargo.toml 文件中来将此crate添加到项目中

[dependencies]
gyges = "1.0.1"

平台

此项目仅在x86_64架构上进行了测试,不对其他平台提供保证。

示例

设置初始棋盘位置

这是库中内置的一个特定初始位置。还可以加载其他常量棋盘位置。

use gyges::board::*;

// Load Board
let board = BoardState::from(STARTING_BOARD);

加载特定棋盘

可以使用以下记法创建棋盘,如下所示。每组6个数字代表棋盘上的一行,从您的棋盘一侧开始向左到右。棋盘的方向是主观的,基于如何输入棋盘。

use gyges::board::*;

// Load Board
let board = BoardState::from("321123/000000/000000/000000/000000/321123");

应用和生成移动

移动生成是一个两步过程。您必须生成一个 RawMoveList,然后将这个列表中的移动提取到 Vec<Move>。这样做是为了提高效率并减少不必要的处理。当进行移动时,make_move 函数将返回应用了移动的棋盘的副本。

use gyges::board::*;
use gyges::moves::*;

// Load Board
let mut board = BoardState::from(STARTING_BOARD);

// Define a player
let player = Player::One;

// Generate moves
let mut movelist = unsafe{ valid_moves(&mut board, player) }; // Create a MoveList
let moves = movelist.moves(&mut board); // Extract the moves

// Make a move
board.make_move(&moves[0]);

致谢

这个项目和它的格式受到令人难以置信的 Rust 棋牌程序 Pleco 的启发。

贡献

欢迎贡献!如果您想贡献力量,请提交一个 pull request。非常欢迎反馈,包括报告问题或提出改进建议。

许可证

本项目采用 GNU 通用公共许可证 v3.0 发布。请在使用或分发本项目时查阅并遵守许可证条款。

依赖项

~315KB