#2d-grid #grid #iterator #2d #gamedev #datastruct

gridit

利用迭代器乐趣的2D网格库

1 个不稳定版本

0.1.0 2021年5月10日

#969 in 游戏开发

MIT 许可证

91KB
1.5K SLoC

Gridit

一个利用迭代器乐趣的2D网格库。

Gridit 是一个实验性的2D网格库,它实现了不同的迭代器来遍历网格的单元格。它是为了考虑像棋类游戏这样的桌面游戏而创建的,但也可以用于其他用例。

Gridit 开始探索如何使用迭代器创建棋类移动模式。示例棋盘可以在 examples/board 中找到。

简单示例:国王的可能移动(不考虑将军)。

fn possible_moves(&self, grid: &Grid<BoardPiece>, current_pos: Position) -> Vec<Position> {
	grid.neighbors(pos)
		.grid_positions()
		.filter(|(pos, cell)| !matches!(cell, NonEmpty(piece) if piece.color == self.color))
		.map(|(pos, _)| pos)
		.collect()
}

示例

git clone https://github.com/jomsch/gridit.git
cd gridit

按照以下方式运行示例

生命之舞

cargo run --example gameoflife

棋盘

cargo run --example board

棋盘上带有 T 的棋子是一个 Blocker,它不能击败任何棋子,并且通过将棋子传送到友军棋子来移动。
Giraffe 是一个用于测试目的的空白棋子。如果您想快速测试这个库,我建议您克隆此存储库并为 Giraffe 棋子实现一些移动模式。只需编写 fn possible_moves 函数,并运行棋盘示例。有关灵感,请参阅棋子实现 此处

缺少的功能

缺少以下功能。等待 泛型关联类型 在 Rust 中实现。

  • pattern_mut
  • neighbor_mut

反馈 & 问题

有反馈或问题吗?
打开一个问题或在Twitter或Reddit上给我发消息。
我很乐意听到您对 Gridit 的想法和想法。

资产许可

resources 中找到的资产受 CC-BY-SA 3.0 许可证的许可。这些资产可以在 此处 找到。感谢并归功于

  • Colin M.L. Burnett
  • Francois-Pier
  • NikNaks

许可证

在MIT许可证下分发。有关更多信息,请参阅 LICENSE.txt

无运行时依赖