summaryrefslogtreecommitdiff
path: root/model/src
diff options
context:
space:
mode:
Diffstat (limited to 'model/src')
-rw-r--r--model/src/board.rs2
-rw-r--r--model/src/coordinates.rs59
-rw-r--r--model/src/moves.rs4
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())
)
}
}