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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use chess::{Board, Square};
use method_shorthands::methods::UW;

use crate::{square::From, game::ui_settings::*};

pub fn display_board(board: Board, ui_settings: UISettings) {
    let mut display = String::from("
 _______________________________
8 -/+/-/+/-/+/-/+ |
7 +/-/+/-/+/-/+/- |
6 -/+/-/+/-/+/-/+ |
5 +/-/+/-/+/-/+/- |
4 -/+/-/+/-/+/-/+ |
3 +/-/+/-/+/-/+/- |
2 -/+/-/+/-/+/-/+ |
1 +/-/+/-/+/-/+/- |
  A/*/C/D/E/F/G/H
    ");

    for r in 0..8 {
        for f in 0..8 {
            let square = Square::from_rf(r, f);
            if let Some(piece) = board.piece_on(square) {
                let idx = (20 * (-1 * r as i32 + 7) + 2 * f as i32 + 36) as usize;
                display.replace_range(idx..=idx, &(piece.to_string(board.color_on(square).uw())));
            }
        }
    }

    if ui_settings.swap_colors {
        let mut vec: Vec<char> = display.chars().collect();
        for k in 0..vec.len() {
            if k == 192 { break; }
            vec[k] = match vec[k].is_uppercase() {
                false => vec[k].to_ascii_uppercase(),
                true => vec[k].to_ascii_lowercase()
            }
        }
        display = vec.iter().collect();
    }

    display = display.chars()
        .map(|char| if char == 'K' { char::from_u32(0x2654).uw() } else { char })
        .map(|char| if char == 'Q' { char::from_u32(0x2655).uw() } else { char })
        .map(|char| if char == 'R' { char::from_u32(0x2656).uw() } else { char })
        .map(|char| if char == 'B' { char::from_u32(0x2657).uw() } else { char })
        .map(|char| if char == 'N' { char::from_u32(0x2658).uw() } else { char })
        .map(|char| if char == 'P' { char::from_u32(0x2659).uw() } else { char })
        .map(|char| if char == 'k' { char::from_u32(0x265A).uw() } else { char })
        .map(|char| if char == 'q' { char::from_u32(0x265B).uw() } else { char })
        .map(|char| if char == 'r' { char::from_u32(0x265C).uw() } else { char })
        .map(|char| if char == 'b' { char::from_u32(0x265D).uw() } else { char })
        .map(|char| if char == 'n' { char::from_u32(0x265E).uw() } else { char })
        .map(|char| if char == 'p' { char::from_u32(0x265F).uw() } else { char })
        .map(|char| if char == '*' { 'B' } else { char })
        .collect();

    display = display.replace("/", "   ");   

    println!("{display}");
}

// Example:
// 8♜♞♝♛♚♝♞♜
// 7♟︎♟︎♟︎♟︎♟︎♟︎♟︎♟︎
// 6 - - - -
// 5- - - -
// 4 - - - -
// 3- - - -
// 2♙♙♙♙♙♙♙♙
// 1♖♘♗♕♔♗♘♖
//  ABCDEFGH