1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use std::collections::HashSet;

use piece::Side;
use location::Step;
use card::StepAlternatives;

macro_rules! s {
    ($dx:expr, $dy:expr) => {
        Step::new($dx, $dy)
    };
}

macro_rules! c {
    ($($x:expr),*) => {
        {
            let mut hs = HashSet::new();
            $( hs.insert($x); )*
            hs
        }
    };
}

// https://1.bp.blogspot.com/-dm4YAFl2KVs/V3whsIEs65I/AAAAAAAADqQ/doS23VHY794QBcKyDmhZHXE5oejh9LgkwCKgB/s1600/Onitama%2B3.jpg

lazy_static! {
    pub static ref CARDS: [StepAlternatives; 16] = [
        c!(s!(0, -2), s!(0, 1)),                        // tiger
        c!(s!(-2, -1), s!(2, -1), s!(-1, 1), s!(1, 1)), // dragon
        c!(s!(-2, 0), s!(-1, -1), s!(1, 1)),            // frog
        c!(s!(2, 0), s!(1, -1), s!(-1, 1)),             // rabbit
        c!(s!(0, -1), s!(-2, 0), s!(2, 0)),             // crab
        c!(s!(-1, 0), s!(-1, -1), s!(1, 0), s!(1, -1)), // elephant
        c!(s!(-1, 0), s!(-1, -1), s!(1, 0), s!(1, 1)),  // goose
        c!(s!(-1, 0), s!(-1, 1), s!(1, 0), s!(1, -1)),  // rooster
        c!(s!(-1, -1), s!(-1, 1), s!(1, -1), s!(1, 1)), // monkey
        c!(s!(0, 1), s!(-1, -1), s!(1, -1)),            // mantis
        c!(s!(0, -1), s!(0, 1), s!(-1, 0)),             // horse
        c!(s!(0, -1), s!(0, 1), s!(1, 0)),              // ox
        c!(s!(0, -1), s!(-1, 1), s!(1, 1)),             // crane
        c!(s!(0, -1), s!(-1, 0), s!(1, 0)),             // boar
        c!(s!(-1, -1), s!(-1, 1), s!(1, 0)),            // eel
        c!(s!(1, -1), s!(1, 1), s!(-1, 0)),             // cobra
    ];
}

pub static STARTER: [Side; 16] = [
    Side::WHITE, Side::BLACK, Side::BLACK, Side::WHITE,
    Side::WHITE, Side::BLACK, Side::WHITE, Side::BLACK,
    Side::WHITE, Side::BLACK, Side::BLACK, Side::WHITE,
    Side::WHITE, Side::BLACK, Side::WHITE, Side::BLACK
];

pub static CARD_NAMES: [&'static str; 16] = [
    "tiger",
    "dragon",
    "frog",
    "rabbit",
    "crab",
    "elephant",
    "goose",
    "rooster",
    "monkey",
    "mantis",
    "horse",
    "ox",
    "crane",
    "boar",
    "eel",
    "cobra"
];