From 4cb8ec44d6b0c301be4fa0f8847b25a067eeee60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Hauspie?= <michael.hauspie@univ-lille.fr> Date: Mon, 28 Nov 2022 22:27:20 +0100 Subject: [PATCH] Refactor to make a board module with a tictactoe submodule --- src/board/mod.rs | 3 +++ src/{board.rs => board/tictactoe.rs} | 37 ++++++++++++++++------------ src/main.rs | 4 +-- 3 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 src/board/mod.rs rename src/{board.rs => board/tictactoe.rs} (72%) diff --git a/src/board/mod.rs b/src/board/mod.rs new file mode 100644 index 0000000..80b24fb --- /dev/null +++ b/src/board/mod.rs @@ -0,0 +1,3 @@ +//! A module that implements several board games + +pub mod tictactoe; diff --git a/src/board.rs b/src/board/tictactoe.rs similarity index 72% rename from src/board.rs rename to src/board/tictactoe.rs index 0900f91..2b9a6b4 100644 --- a/src/board.rs +++ b/src/board/tictactoe.rs @@ -1,5 +1,5 @@ - #[derive(Clone, Copy, Debug, PartialEq)] +/// A Tictactoe square pub enum Square { Empty, Cross, @@ -16,11 +16,12 @@ impl std::fmt::Display for Square { } } -pub struct Board { +/// A TicTacToe board +pub struct TicTacToe { board: [Square; 9], } -impl Board { +impl TicTacToe { /// Creates a new empty board pub fn new() -> Self { Self { @@ -34,14 +35,18 @@ impl Board { } } -impl std::fmt::Display for Board { +impl std::fmt::Display for TicTacToe { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + writeln!(f, " A B C")?; for row in 0..3 { - writeln!(f, " {} | {} | {}", - self.board[row * 3], - self.board[row * 3 + 1], - self.board[row * 3 + 2], - )?; + writeln!( + f, + " {} | {} | {} {}", + self.board[row * 3], + self.board[row * 3 + 1], + self.board[row * 3 + 2], + row + 1, + )?; if row == 0 || row == 1 { writeln!(f, "---+---+---")?; } @@ -53,10 +58,10 @@ impl std::fmt::Display for Board { #[cfg(test)] mod tests { use super::*; - + #[test] fn new_board_squares_are_empty() { - let board = Board::new(); + let board = TicTacToe::new(); for square in board.board { assert_eq!(square, Square::Empty); @@ -65,13 +70,14 @@ mod tests { #[test] fn empty_board_to_string() { - let expected = " . | . | . + let expected = " A B C + . | . | . 1 ---+---+--- - . | . | . + . | . | . 2 ---+---+--- - . | . | . + . | . | . 3 "; - assert_eq!(expected, format!("{}", Board::new())); + assert_eq!(expected, format!("{}", TicTacToe::new())); } #[test] @@ -86,5 +92,4 @@ mod tests { fn circle_square_to_string_big_o() { assert_eq!("O", format!("{}", Square::Circle)); } - } diff --git a/src/main.rs b/src/main.rs index a91e144..3b1cd9c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,9 @@ mod board; -use board::Board; +use board::tictactoe::TicTacToe; fn main() { - let board = Board::new(); + let board = TicTacToe::new(); board.display(); } -- GitLab