1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::cmp::Ordering;

use crate::board::{game::{Resolution, GameResults}, Board, actions::{Move}};

#[derive(Debug)]
pub struct AtaxxResolution<const T: usize>;

impl<const T: usize> Resolution<T> for AtaxxResolution<T> {
    fn resolve(&self, board: &mut Board<T>, legal_moves: &[Move]) -> GameResults {
        if legal_moves.len() > 0 {
            if board.state.sub_moves == 100 {
                return GameResults::Draw;
            }

            return GameResults::Ongoing;
        }

        let black_stones = board.state.teams[0].count_ones();
        let white_stones = board.state.teams[1].count_ones();

        match black_stones.cmp(&white_stones) {
            Ordering::Greater => {
                GameResults::Win(0)
            }
            Ordering::Equal => {
                GameResults::Draw
            }
            Ordering::Less => {
                GameResults::Win(1)
            }
        }
    }
}