From 4205515f04ff0e08f66ce3c9b152a1d5360eb22d Mon Sep 17 00:00:00 2001 From: Kushal Date: Thu, 8 Aug 2024 15:46:16 -0400 Subject: [PATCH] save game statistics this is a work in progress --- src/game_error.rs | 2 ++ src/main.rs | 26 +++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/game_error.rs b/src/game_error.rs index 7ccc0d5..7a0526f 100644 --- a/src/game_error.rs +++ b/src/game_error.rs @@ -6,4 +6,6 @@ pub enum GameError { Reqwest(#[from] reqwest::Error), #[error("IO error")] Io(#[from] std::io::Error), + #[error("Serde JSON error")] + SerdeJson(#[from] serde_json::Error), } diff --git a/src/main.rs b/src/main.rs index 7d83ce4..3bff9a9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,6 +49,15 @@ fn main() -> Result<(), GameError> { return Ok(()); } + if args.len() > 1 && args[1] == "--show-stats" { + let game_stats = read_game_stats()?; + println!("Game Statistics:"); + println!("Attempts: {:?}", game_stats.attempts); + println!("Secret Number: {}", game_stats.secret_number); + println!("Guesses: {:?}", game_stats.guesses); + return Ok(()); + } + play_guessing_game(config.analytics_consent)?; Ok(()) } @@ -59,7 +68,7 @@ fn play_guessing_game(analytics_consent: bool) -> Result<(), GameError> { let secret_number = rand::thread_rng().gen_range(1..=100); let mut attempts = Vec::new(); // Initialize attempts as a vector - let guesses = Vec::new(); + let mut guesses = Vec::new(); // Initialize guesses as a mutable vector loop { println!("Please input your guess."); @@ -76,6 +85,7 @@ fn play_guessing_game(analytics_consent: bool) -> Result<(), GameError> { }; attempts.push(guess); // Add each guess to attempts + guesses.push(guess); // Add each guess to guesses println!("You guessed: {guess}"); @@ -142,3 +152,17 @@ fn fetch_hello_world() -> Result<(), GameError> { } Ok(()) } + +fn read_game_stats() -> Result { + let strategy = choose_app_strategy(AppStrategyArgs { + top_level_domain: "org".to_string(), + author: "Kushal Hada".to_string(), + app_name: "KusGuessingGame".to_string(), + }).unwrap(); + + let stats_path = strategy.data_dir().join("game_stats.json"); + let stats_data = fs::read_to_string(&stats_path)?; + let game_stats: GameStats = serde_json::from_str(&stats_data)?; + + Ok(game_stats) +}