refactored scores to make sense and check on each insertion :D
This commit is contained in:
@@ -9,8 +9,8 @@ pub use indices::*;
|
|||||||
use self::score_checkers::scan;
|
use self::score_checkers::scan;
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct Board {
|
pub struct Board {
|
||||||
p1_score: i32,
|
red_score: i32,
|
||||||
p2_score: i32,
|
blu_score: i32,
|
||||||
columns: Array2D<Disk>,
|
columns: Array2D<Disk>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,8 +19,8 @@ impl Default for Board {
|
|||||||
let columns = Array2D::filled_with(Disk::EMPTY, 7, 6);
|
let columns = Array2D::filled_with(Disk::EMPTY, 7, 6);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
p1_score: 0,
|
red_score: 0,
|
||||||
p2_score: 0,
|
blu_score: 0,
|
||||||
columns,
|
columns,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,20 +28,65 @@ impl Default for Board {
|
|||||||
|
|
||||||
impl Board {
|
impl Board {
|
||||||
fn getscore(&self) -> (i32, i32) {
|
fn getscore(&self) -> (i32, i32) {
|
||||||
(self.p1_score, self.p2_score)
|
(self.red_score, self.blu_score)
|
||||||
}
|
}
|
||||||
fn play(&mut self, disk: Disk, col: i32) -> bool {
|
fn play(&mut self, disk: Disk, col: usize) -> bool {
|
||||||
let column = &self.columns.as_columns()[col as usize];
|
let column = &self.columns.as_columns()[col as usize];
|
||||||
let empty = column.iter().filter(|&a| matches!(a, Disk::EMPTY)).count();
|
let empty = column.iter().filter(|&a| matches!(a, Disk::EMPTY)).count();
|
||||||
dbg!(empty);
|
dbg!(empty);
|
||||||
let top = column.len() - empty;
|
let top = column.len() - empty;
|
||||||
match self.columns.set(top, col as usize, disk) {
|
match self.columns.set(top, col as usize, disk) {
|
||||||
Ok(_) => true,
|
Ok(_) => {
|
||||||
|
self.score_check((top, col));
|
||||||
|
true
|
||||||
|
}
|
||||||
Err(_) => false,
|
Err(_) => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn score_check(&mut self, index: (usize, usize)) {
|
fn score_check(&mut self, index: (usize, usize)) {
|
||||||
unimplemented!()
|
use score_checkers::*;
|
||||||
|
let moves = get_legal_moves(
|
||||||
|
&index,
|
||||||
|
(self.columns.num_rows(), self.columns.num_columns()),
|
||||||
|
);
|
||||||
|
match self.columns.get(index.0, index.1) {
|
||||||
|
Some(disk) => match disk {
|
||||||
|
Disk::RED => {
|
||||||
|
for _move in moves {
|
||||||
|
let mut consecutive = scan(&self.columns, &index, _move.clone(), 4);
|
||||||
|
if consecutive < 4 {
|
||||||
|
consecutive += scan(
|
||||||
|
&self.columns,
|
||||||
|
&index,
|
||||||
|
flip_direction(_move),
|
||||||
|
4 - consecutive + 1,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if consecutive - 1 == 4 {
|
||||||
|
self.red_score += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Disk::BLU => {
|
||||||
|
for _move in moves {
|
||||||
|
let mut consecutive = scan(&self.columns, &index, _move.clone(), 4);
|
||||||
|
if consecutive < 4 {
|
||||||
|
consecutive += scan(
|
||||||
|
&self.columns,
|
||||||
|
&index,
|
||||||
|
flip_direction(_move),
|
||||||
|
4 - consecutive + 1,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if consecutive - 1 == 4 {
|
||||||
|
self.blu_score += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Disk::EMPTY => return,
|
||||||
|
},
|
||||||
|
None => return,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fn game_over(&self) -> bool {
|
fn game_over(&self) -> bool {
|
||||||
self.columns
|
self.columns
|
||||||
|
|||||||
Reference in New Issue
Block a user