Added basic display for board

This commit is contained in:
Joel Therrien 2023-07-22 16:43:49 -07:00
parent b874bb99d4
commit 4e4912ac3f
2 changed files with 94 additions and 10 deletions

View file

@ -1,15 +1,18 @@
const GRID_LENGTH: u8 = 15;
const TRAY_LENGTH: u8 = 7;
const ALL_LETTERS_BONUS: u32 = 50;
use std::fmt;
use std::fmt::{Formatter, Write};
pub const GRID_LENGTH: u8 = 15;
pub const TRAY_LENGTH: u8 = 7;
pub const ALL_LETTERS_BONUS: u32 = 50;
#[derive(Debug)]
enum Letter {
pub enum Letter {
FixedLetter{text: char, points: u32},
Blank(char)
}
#[derive(Debug)]
enum CellType {
pub enum CellType {
Normal,
DoubleWord,
DoubleLetter,
@ -19,19 +22,19 @@ enum CellType {
}
#[derive(Debug)]
struct Cell {
value: Option<Letter>,
pub struct Cell {
pub value: Option<Letter>,
cell_type: CellType,
}
#[derive(Debug)]
struct Board {
pub struct Board {
cells: Vec<Cell>,
}
impl Board {
fn new() -> Self {
pub fn new() -> Self {
let mut cells = Vec::new();
@ -98,7 +101,7 @@ impl Board {
Board {cells}
}
fn get_cell(&self, x: u8, y: u8) -> Result<&Cell, &str> {
pub fn get_cell(&self, x: u8, y: u8) -> Result<&Cell, &str> {
if x >= GRID_LENGTH || y >= GRID_LENGTH {
Err("x & y must be within the board's coordinates")
} else {
@ -106,6 +109,63 @@ impl Board {
Ok(self.cells.get(coord).unwrap())
}
}
pub fn get_cell_mut(&mut self, x: u8, y: u8) -> Result<&mut Cell, &str> {
if x >= GRID_LENGTH || y >= GRID_LENGTH {
Err("x & y must be within the board's coordinates")
} else {
let coord = (x + GRID_LENGTH*y) as usize;
Ok(self.cells.get_mut(coord).unwrap())
}
}
}
impl fmt::Display for Board {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
let mut str = String::new();
let normal = "\x1b[48;5;174m\x1b[38;5;0m";
let triple_word = "\x1b[48;5;196m\x1b[38;5;0m";
let double_word = "\x1b[48;5;204m\x1b[38;5;0m";
let triple_letter = "\x1b[48;5;21m\x1b[38;5;15m";
let double_letter = "\x1b[48;5;51m\x1b[38;5;0m";
str.write_char('\n').unwrap();
for x in 0..GRID_LENGTH {
for y in 0..GRID_LENGTH {
let cell = self.get_cell(x, y).unwrap();
let color = match cell.cell_type {
CellType::Normal => {normal}
CellType::DoubleWord => {double_word}
CellType::DoubleLetter => {double_letter}
CellType::TripleLetter => {triple_letter}
CellType::TripleWord => {triple_word}
CellType::Start => {double_word}
};
let content = match &cell.value {
None => {' '}
Some(letter) => {*match letter {
Letter::FixedLetter {text, points} => {text},
Letter::Blank(text) => {text}
}}
};
str.write_str(color).unwrap();
str.write_char(content).unwrap();
}
str.write_str("\x1b[0m\n").unwrap();
}
write!(f, "{}", str)
}
}

24
src/main.rs Normal file
View file

@ -0,0 +1,24 @@
use WordGrid::{Board, Letter};
fn main() {
let mut board = Board::new();
let c1 = board.get_cell_mut(8, 6).unwrap();
c1.value = Some(Letter::FixedLetter {text: 'J', points: 0});
board.get_cell_mut(8, 7).unwrap().value = Some(Letter::FixedLetter {text: 'o', points: 0});
board.get_cell_mut(8, 8).unwrap().value = Some(Letter::FixedLetter {text: 'e', points: 0});
board.get_cell_mut(8, 9).unwrap().value = Some(Letter::FixedLetter {text: 'l', points: 0});
board.get_cell_mut(9, 8).unwrap().value = Some(Letter::FixedLetter {text: 'i', points: 0});
board.get_cell_mut(9, 9).unwrap().value = Some(Letter::FixedLetter {text: 's', points: 0});
board.get_cell_mut(10, 8).unwrap().value = Some(Letter::FixedLetter {text: 'c', points: 0});
board.get_cell_mut(10, 9).unwrap().value = Some(Letter::FixedLetter {text: 'o', points: 0});
board.get_cell_mut(10, 10).unwrap().value = Some(Letter::FixedLetter {text: 'o', points: 0});
board.get_cell_mut(10, 11).unwrap().value = Some(Letter::FixedLetter {text: 'l', points: 0});
println!("{}", board);
//println!("\x1b[38;5;196m Hello my name is Joel");
//println!("\x1b[48;5;20m Hello my name is Joel");
}