diff options
| author | Micha White <botahamec@outlook.com> | 2023-12-22 10:02:53 -0500 |
|---|---|---|
| committer | Micha White <botahamec@outlook.com> | 2023-12-22 10:02:53 -0500 |
| commit | bc75b075ef59a6b3b04b8a7b060809b64e8886d0 (patch) | |
| tree | c5d9f8843332a77be27366eb660acb73c0f8179b /model/src | |
| parent | 207503ddd087af15c4cd09d54cddd54cee19b7f6 (diff) | |
Add SquareCoordinates methods
Diffstat (limited to 'model/src')
| -rw-r--r-- | model/src/board.rs | 2 | ||||
| -rw-r--r-- | model/src/coordinates.rs | 59 | ||||
| -rw-r--r-- | model/src/moves.rs | 4 |
3 files changed, 56 insertions, 9 deletions
diff --git a/model/src/board.rs b/model/src/board.rs index 7d61779..52d2b44 100644 --- a/model/src/board.rs +++ b/model/src/board.rs @@ -147,7 +147,7 @@ impl CheckersBitBoard { if row > 32 || col > 32 { None } else { - let value = SquareCoordinate::new(row as u8, col as u8).to_value(); + let value = SquareCoordinate::new(row as u8, col as u8).to_ampere_value(); if let Some(value) = value { if self.piece_at(value) { Some(Piece::new( diff --git a/model/src/coordinates.rs b/model/src/coordinates.rs index c821e1f..0f45322 100644 --- a/model/src/coordinates.rs +++ b/model/src/coordinates.rs @@ -8,16 +8,55 @@ pub struct SquareCoordinate { impl SquareCoordinate { pub fn new(rank: u8, file: u8) -> Self { - if rank > 32 { - panic!("A Square cannot have a rank greater than 32. Got {}", rank) - } else if file > 32 { - panic!("A Square cannot have a file greater than 32. Got {}", file) + if rank > 8 { + panic!("A Square cannot have a rank greater than 8. Got {}", rank) + } else if file > 8 { + panic!("A Square cannot have a file greater than 8. Got {}", file) } else { Self { rank, file } } } - pub fn from_value(value: usize) -> Self { + pub fn from_normal_value(value: usize) -> Self { + static VALUE_COORDINATE_MAP: [SquareCoordinate; 32] = [ + SquareCoordinate { rank: 0, file: 6 }, + SquareCoordinate { rank: 0, file: 4 }, + SquareCoordinate { rank: 0, file: 2 }, + SquareCoordinate { rank: 0, file: 0 }, + SquareCoordinate { rank: 1, file: 7 }, + SquareCoordinate { rank: 1, file: 5 }, + SquareCoordinate { rank: 1, file: 3 }, + SquareCoordinate { rank: 1, file: 1 }, + SquareCoordinate { rank: 2, file: 6 }, + SquareCoordinate { rank: 2, file: 4 }, + SquareCoordinate { rank: 2, file: 2 }, + SquareCoordinate { rank: 2, file: 0 }, + SquareCoordinate { rank: 3, file: 7 }, + SquareCoordinate { rank: 3, file: 5 }, + SquareCoordinate { rank: 3, file: 3 }, + SquareCoordinate { rank: 3, file: 1 }, + SquareCoordinate { rank: 4, file: 6 }, + SquareCoordinate { rank: 4, file: 4 }, + SquareCoordinate { rank: 4, file: 2 }, + SquareCoordinate { rank: 4, file: 0 }, + SquareCoordinate { rank: 5, file: 7 }, + SquareCoordinate { rank: 5, file: 5 }, + SquareCoordinate { rank: 5, file: 3 }, + SquareCoordinate { rank: 5, file: 1 }, + SquareCoordinate { rank: 6, file: 6 }, + SquareCoordinate { rank: 6, file: 4 }, + SquareCoordinate { rank: 6, file: 2 }, + SquareCoordinate { rank: 6, file: 0 }, + SquareCoordinate { rank: 7, file: 7 }, + SquareCoordinate { rank: 7, file: 5 }, + SquareCoordinate { rank: 7, file: 3 }, + SquareCoordinate { rank: 7, file: 1 }, + ]; + + VALUE_COORDINATE_MAP[value] + } + + pub fn from_ampere_value(value: usize) -> Self { static VALUE_COORDINATE_MAP: [SquareCoordinate; 32] = [ SquareCoordinate { rank: 0, file: 6 }, SquareCoordinate { rank: 1, file: 7 }, @@ -64,7 +103,7 @@ impl SquareCoordinate { self.file } - pub fn to_value(self) -> Option<usize> { + pub fn to_ampere_value(self) -> Option<usize> { if self.rank % 2 == 0 { if self.file % 2 == 0 { Some(((18 - ((self.file / 2) * 6)) + ((self.rank / 2) * 8)) as usize % 32) @@ -91,6 +130,14 @@ impl SquareCoordinate { None } } + + pub fn to_normal_value(self) -> Option<usize> { + if self.rank % 2 == 0 { + Some(self.rank as usize * 4 + self.file as usize % 4) + } else { + Some(self.rank as usize * 4 + self.file as usize % 4 + 1) + } + } } impl Display for SquareCoordinate { diff --git a/model/src/moves.rs b/model/src/moves.rs index 525a35c..c266f77 100644 --- a/model/src/moves.rs +++ b/model/src/moves.rs @@ -131,8 +131,8 @@ impl Display for Move { write!( f, "{}-{}", - SquareCoordinate::from_value(self.start() as usize), - SquareCoordinate::from_value(self.end_position()) + SquareCoordinate::from_ampere_value(self.start() as usize), + SquareCoordinate::from_ampere_value(self.end_position()) ) } } |
