136 lines
2.6 KiB
Rust
136 lines
2.6 KiB
Rust
use crate::{
|
|
consts::*,
|
|
util::bit,
|
|
};
|
|
|
|
#[derive(Clone, Copy)]
|
|
pub struct MoveSet {
|
|
pub direction:u32,
|
|
pub stride:u32,
|
|
}
|
|
impl MoveSet {
|
|
pub fn rotate(&self) -> Self
|
|
{
|
|
Self {
|
|
direction:0,
|
|
stride:0,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Copy)]
|
|
pub struct PieceClass {
|
|
pub name:&'static str,
|
|
pub moves:MoveSet,
|
|
pub pmoves:MoveSet,
|
|
}
|
|
|
|
pub const PIECES :[PieceClass; PIECES_COUNT] = [
|
|
PieceClass {
|
|
name: "Militia",
|
|
moves: MoveSet {
|
|
direction:bit(0) | bit(1) | bit(5),
|
|
stride:0,
|
|
},
|
|
pmoves: MoveSet{
|
|
direction:bit(0) | bit(1) | bit(2) | bit(4) | bit(5),
|
|
stride:0,
|
|
},
|
|
},
|
|
PieceClass {
|
|
name: "Knight",
|
|
moves: MoveSet {
|
|
direction:bit(3) | bit(6) | bit(11) | bit(13) | bit(17),
|
|
stride:0,
|
|
},
|
|
pmoves: MoveSet{
|
|
direction:bit(3) | bit(6) | bit(7) | bit(10) | bit(11) | bit(13) | bit(14) | bit(16) | bit(17),
|
|
stride:0,
|
|
},
|
|
},
|
|
PieceClass {
|
|
name: "Lance",
|
|
moves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
pmoves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
},
|
|
PieceClass {
|
|
name: "Tower",
|
|
moves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
pmoves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
},
|
|
PieceClass {
|
|
name: "Castle",
|
|
moves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
pmoves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
},
|
|
PieceClass {
|
|
name: "Dragon",
|
|
moves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
pmoves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
},
|
|
PieceClass {
|
|
name: "King",
|
|
moves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
pmoves: MoveSet {
|
|
direction:0,
|
|
stride:0,
|
|
},
|
|
},
|
|
];
|
|
|
|
#[derive(Clone, Copy)]
|
|
pub struct Piece {
|
|
pub class:u8,
|
|
pub promoted:bool,
|
|
pub player:u8,
|
|
pub tile:u8,
|
|
}
|
|
impl Piece {
|
|
pub fn new(class:u8, player:u8) -> Self
|
|
{
|
|
Self {
|
|
class,
|
|
promoted:false,
|
|
player,
|
|
tile:0,
|
|
}
|
|
}
|
|
|
|
pub fn new_at(class:u8, player:u8, tile:u8) -> Self
|
|
{
|
|
Self {
|
|
class,
|
|
promoted:false,
|
|
player,
|
|
tile,
|
|
}
|
|
}
|
|
}
|