Separate the width and height of the grid
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
use crate::hand_view::HandView;
|
use crate::hand_view::HandView;
|
||||||
use crate::tile_view::PlacedTileView;
|
use crate::tile_view::PlacedTileView;
|
||||||
use board_shared::board::{self, Board};
|
use board_shared::board::Board;
|
||||||
use board_shared::expr::is_valid_guess;
|
use board_shared::expr::is_valid_guess;
|
||||||
use board_shared::game::Game;
|
use board_shared::game::Game;
|
||||||
use board_shared::tile::Tile;
|
use board_shared::tile::Tile;
|
||||||
use gloo_dialogs::alert;
|
use gloo_dialogs::alert;
|
||||||
|
use board_shared::position::Grid2d;
|
||||||
use yew::prelude::*;
|
use yew::prelude::*;
|
||||||
|
|
||||||
enum SelectedTile {
|
enum SelectedTile {
|
||||||
@@ -23,9 +24,9 @@ struct BoardViewProps {
|
|||||||
fn board_view(BoardViewProps { board, on_click }: &BoardViewProps) -> Html {
|
fn board_view(BoardViewProps { board, on_click }: &BoardViewProps) -> Html {
|
||||||
html! {
|
html! {
|
||||||
<table class="board">
|
<table class="board">
|
||||||
{ (0..board::BOARD_SIZE).map(|x| html! {
|
{ (0..board.height()).map(|y| html! {
|
||||||
<tr class="board-row">
|
<tr class="board-row">
|
||||||
{ (0..board::BOARD_SIZE).map(|y| html! {
|
{ (0..board.width()).map(|x| html! {
|
||||||
<PlacedTileView x={x} y={y} key={x} tile={board.get(x, y)} on_click={on_click.clone()} />
|
<PlacedTileView x={x} y={y} key={x} tile={board.get(x, y)} on_click={on_click.clone()} />
|
||||||
}).collect::<Html>() }
|
}).collect::<Html>() }
|
||||||
</tr>
|
</tr>
|
||||||
|
@@ -1,26 +1,28 @@
|
|||||||
use crate::position::Position2d;
|
use crate::position::{Grid2d, Position2d};
|
||||||
use crate::tile::Tile;
|
use crate::tile::Tile;
|
||||||
|
|
||||||
pub const BOARD_SIZE: usize = 25;
|
const DEFAULT_BOARD_SIZE: usize = 25;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct Board {
|
pub struct Board {
|
||||||
tiles: [Option<Tile>; BOARD_SIZE * BOARD_SIZE],
|
tiles: Vec<Option<Tile>>,
|
||||||
|
width: usize,
|
||||||
|
height: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Board {
|
impl Board {
|
||||||
pub fn get(&self, x: usize, y: usize) -> Option<Tile> {
|
pub fn get(&self, x: usize, y: usize) -> Option<Tile> {
|
||||||
self.tiles[y * BOARD_SIZE + x]
|
self.tiles[y * self.width + x]
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set(&mut self, x: usize, y: usize, tile: Tile) {
|
pub fn set(&mut self, x: usize, y: usize, tile: Tile) {
|
||||||
self.tiles[y * BOARD_SIZE + x] = Some(tile);
|
self.tiles[y * self.width + x] = Some(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn difference(&self, other: &Board) -> Vec<Position2d> {
|
pub fn difference(&self, other: &Board) -> Vec<Position2d> {
|
||||||
let mut diff = Vec::new();
|
let mut diff = Vec::new();
|
||||||
for x in 0..BOARD_SIZE {
|
for y in 0..self.height {
|
||||||
for y in 0..BOARD_SIZE {
|
for x in 0..self.width {
|
||||||
if self.get(x, y) != other.get(x, y) {
|
if self.get(x, y) != other.get(x, y) {
|
||||||
diff.push(Position2d::new(x, y));
|
diff.push(Position2d::new(x, y));
|
||||||
}
|
}
|
||||||
@@ -55,10 +57,25 @@ impl Board {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Grid2d for Board {
|
||||||
|
fn width(&self) -> usize {
|
||||||
|
self.width
|
||||||
|
}
|
||||||
|
|
||||||
|
fn height(&self) -> usize {
|
||||||
|
self.height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Default for Board {
|
impl Default for Board {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
|
let size = DEFAULT_BOARD_SIZE * DEFAULT_BOARD_SIZE;
|
||||||
|
let mut tiles = Vec::with_capacity(size);
|
||||||
|
tiles.resize_with(size, || None);
|
||||||
Self {
|
Self {
|
||||||
tiles: [None; BOARD_SIZE * BOARD_SIZE],
|
tiles,
|
||||||
|
width: DEFAULT_BOARD_SIZE,
|
||||||
|
height: DEFAULT_BOARD_SIZE,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,5 +3,5 @@ pub mod expr;
|
|||||||
pub mod game;
|
pub mod game;
|
||||||
mod lexer;
|
mod lexer;
|
||||||
mod parser;
|
mod parser;
|
||||||
mod position;
|
pub mod position;
|
||||||
pub mod tile;
|
pub mod tile;
|
||||||
|
Reference in New Issue
Block a user