11 个版本 (7 个破坏性更新)
使用旧 Rust 2015
0.8.0 | 2018年6月5日 |
---|---|
0.7.0 | 2018年3月25日 |
0.6.0 | 2018年3月3日 |
0.5.0 | 2018年1月24日 |
0.1.3 | 2017年8月30日 |
#392 in GUI
每月41次下载
130KB
1K SLoC
rust-chessground
Relm/GTK 的棋盘小部件。灵感来自 chessground.js。
特性
- 使用 Shakmaty 的词汇,但不受棋规限制
- 可以显示合法走法提示
- 检查提示
- 点击移动棋子
- 拖放移动棋子
- 最小距离
- 棋子幽灵
- 在棋盘上绘制圆圈和箭头
- 集成提升对话框
- 平滑动画
仅将部分特性暴露在公共 API 中。欢迎提出更多要求。
文档
示例
一个允许用户自由移动棋子的棋盘。使用 cargo run --example editor
运行。
#![feature(proc_macro)]
extern crate gtk;
extern crate chessground;
#[macro_use]
extern crate relm;
extern crate relm_attributes;
#[macro_use]
extern crate relm_derive;
extern crate shakmaty;
use gtk::prelude::*;
use relm::Widget;
use relm_attributes::widget;
use shakmaty::{Square, Board};
use chessground::{Ground, UserMove, SetBoard};
use self::Msg::*;
#[derive(Msg)]
pub enum Msg {
Quit,
PieceMoved(Square, Square),
}
#[widget]
impl Widget for Win {
fn model() -> Board {
Board::default()
}
fn update(&mut self, event: Msg) {
match event {
Quit => gtk::main_quit(),
PieceMoved(orig, dest) => {
if let Some(piece) = self.model.remove_piece_at(orig) {
self.model.set_piece_at(dest, piece, false);
self.ground.emit(SetBoard(self.model.clone()));
}
}
}
}
view! {
gtk::Window {
title: "Chessground",
#[name="ground"]
Ground {
UserMove(orig, dest, _) => PieceMoved(orig, dest),
},
delete_event(_, _) => (Quit, Inhibit(false)),
}
}
}
fn main() {
Win::run(()).expect("initialized gtk");
}
棋子集
集 | 作者 | 许可证 |
---|---|---|
Merida | Armando Hernandez Marroquin | GPL-2+ |
许可证
Chessground 在 GPL-3.0 (或任何后续版本,由您选择) 许可下发布。请参阅 COPYING 文件以获取完整的许可证。
依赖项
~16MB
~393K SLoC