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次下载

GPL-3.0+

130KB
1K SLoC

rust-chessground

crates.io

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