use andex::*;
use std::convert::TryFrom;
#[derive(Default, Clone, Copy)]
pub struct Player {
pub score: i32,
}
pub enum PlayerIdMarker {}
type PlayerId = Andex<PlayerIdMarker, 4>;
type Players = AndexableArray<PlayerId, Player, { PlayerId::SIZE }>;
#[derive(Default, Clone, Copy)]
pub struct Piece {
pub owner: PlayerId,
pub position: i32,
}
pub enum PieceIdMarker {}
type PieceId = Andex<PieceIdMarker, 32>;
type Pieces = AndexableArray<PieceId, Piece, { PieceId::SIZE }>;
#[derive(Default)]
pub struct Game {
pub players: Players,
pub pieces: Pieces,
}
impl Game {
pub fn play(&mut self) {
for playerid in PlayerId::iter() {
self.players[playerid].score += 1;
}
self.pieces[PieceId::new::<0>()].position += 1;
if let Ok(playerid) = PlayerId::try_from(1) {
self.players[playerid].score = 9;
}
}
}
#[test]
fn example_test() {
let mut game = Game::default();
game.play();
for playerid in PlayerId::iter() {
println!(
"playerid display {}, debug {:?}; score {}",
playerid, playerid, game.players[playerid].score
);
}
}