diff options
| author | srdusr <graytrevor98@gmail.com> | 2023-03-22 23:13:53 +0200 |
|---|---|---|
| committer | srdusr <graytrevor98@gmail.com> | 2023-03-22 23:13:53 +0200 |
| commit | da91bc4477fd60214f10b9202e54e8772cf7169d (patch) | |
| tree | f6c36ee8660fa91f00d0524bdd99f7ec1edf8932 /src/main.rs | |
| parent | 155894a8fc98a0a253233e50bb9ed10c09f9e922 (diff) | |
| download | typerpunk-da91bc4477fd60214f10b9202e54e8772cf7169d.tar.gz typerpunk-da91bc4477fd60214f10b9202e54e8772cf7169d.zip | |
Pseudo code for typing game
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 118 |
1 files changed, 117 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index e7a11a9..b5a5760 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,119 @@ + +// Crates +use rand::Rng; +use std::time::{Duration, Instant}; +use tui::{ + backend::TermionBackend, + layout::{Constraint, Direction, Layout}, + style::{Color, Modifier, Style}, + widgets::{Block, Borders, Paragraph, Span}, + Terminal, +}; + +// Constants +const PARAGRAPH: &str = "The quick brown fox jumps over the lazy dog."; + +// Enums +enum AppState { + Playing(GameState), + Stats(GameState, Duration), + Quit, +} + +// Structs +struct GameState { + paragraph: String, + user_input: String, + start_time: Instant, + difficulty: Difficulty, +} + +enum Difficulty { + Easy, + Medium, + Hard, +} + +// Implementations +impl GameState { + fn new(difficulty: Difficulty) -> Self { + let mut rng = rand::thread_rng(); + let paragraph = PARAGRAPH.to_owned(); + + let user_input = String::new(); + let start_time = Instant::now(); + + Self { + paragraph, + user_input, + start_time, + difficulty, + } + } + + fn wpm(&self) -> f64 { + // ... + } + + fn accuracy(&self) -> f64 { + // ... + } + + fn elapsed_time(&self) -> Duration { + // ... + } + + fn advance(&mut self) -> bool { + // ... + } + + fn check_end_condition(&self) -> bool { + // ... + } +} + +// Functions fn main() { - println!("Hello, world!"); + // ... } + +/* + * The following code defines a typing game in Rust. + * + * In main, the game loop is started by calling `run_game()`. + * + * The `GameState` struct represents the state of the game, including the difficulty level, + * the current paragraph to type, the player's progress, and various methods for manipulating + * and querying the game state. These methods include: + * + * - `new(difficulty: Difficulty)`: creates a new game state with the given difficulty. + * - `get_paragraph(difficulty: Difficulty)`: returns a random paragraph of the specified difficulty. + * - `wpm(&self)`: calculates the current words per minute of the player. + * - `accuracy(&self)`: calculates the current accuracy of the player. + * - `check_end_condition(&self)`: checks if the game has ended. + * - `advance(&mut self)`: advances the game to the next character. + * - `reset(&mut self)`: resets the game state to its initial state. + * + * The `Difficulty` enum represents the difficulty level of the game, and includes a method to create + * an enum variant from a string: + * + * - `from_str(s: &str) -> Result<Self, &'static str>`: creates a difficulty enum variant from a string. + * + * The `App` struct represents the application as a whole, and includes methods for handling input, + * updating the game state, setting the game difficulty, resetting the game, and setting the current + * application state. These methods include: + * + * - `new()`: creates a new `App` instance. + * - `handle_input(&mut self, input: Key)`: handles keyboard input. + * - `update(&mut self, elapsed: Duration)`: updates the game state based on the elapsed time. + * - `set_difficulty(&mut self, difficulty: Difficulty)`: sets the game difficulty. + * - `reset_game(&mut self)`: resets the game state to its initial state. + * - `set_state(&mut self, state: AppState)`: sets the current application state. + * + * The `AppState` enum represents the state of the application, including whether the game is being played, + * whether the player is viewing their stats, or whether the game is quitting. The enum variants include: + * + * - `Playing(GameState)`: represents the game state while the game is being played. + * - `Stats(GameState, Instant)`: represents the game state and start time while displaying stats. + * - `Quit`: represents the state where the game is quitting. + */ |
