From f2720b36013dfdbd95a26911aa7eceee060b5b35 Mon Sep 17 00:00:00 2001 From: Wladimir Palant Date: Mon, 9 May 2022 15:09:06 +0200 Subject: [PATCH 1/2] Fixed wrong efficiency calculation for RPS --- src/rps.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rps.rs b/src/rps.rs index ce495ac..9faaf06 100644 --- a/src/rps.rs +++ b/src/rps.rs @@ -86,7 +86,7 @@ fn get_effectiveness(attacker: usize, defender: usize) -> i32 } else { - if defender_type == RPSType::Rock + if defender_type == RPSType::Paper { 100 } From ac30ee6bf7c4616477899d8db3ba5d0d8ec42f9c Mon Sep 17 00:00:00 2001 From: Wladimir Palant Date: Mon, 9 May 2022 15:19:31 +0200 Subject: [PATCH 2/2] Turned RPS efficiency into a table --- src/pokemon.rs | 4 ++-- src/rps.rs | 44 +++++++------------------------------------- 2 files changed, 9 insertions(+), 39 deletions(-) diff --git a/src/pokemon.rs b/src/pokemon.rs index de26348..90dfe21 100644 --- a/src/pokemon.rs +++ b/src/pokemon.rs @@ -4,7 +4,7 @@ use rand::Rng; use crate::types::{PokemonType, POKEMON_COUNT}; use crate::battle::Fighter; -pub const POKEMON: [[i32; POKEMON_COUNT]; POKEMON_COUNT] = [ +const EFFICIENCY: [[i32; POKEMON_COUNT]; POKEMON_COUNT] = [ [ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 50, 0, 100, 100, 50, 100 ], // Normal [ 100, 50, 50, 100, 200, 200, 100, 100, 100, 100, 100, 200, 50, 100, 50, 100, 200, 100 ], // Fire [ 100, 200, 50, 100, 50, 100, 100, 100, 200, 100, 100, 100, 200, 100, 50, 100, 100, 100 ], // Water @@ -27,7 +27,7 @@ pub const POKEMON: [[i32; POKEMON_COUNT]; POKEMON_COUNT] = [ fn get_effectiveness(attacker: usize, defender: usize) -> i32 { - POKEMON[attacker][defender] + EFFICIENCY[attacker][defender] } #[derive(Clone)] diff --git a/src/rps.rs b/src/rps.rs index 9faaf06..a0e2bfb 100644 --- a/src/rps.rs +++ b/src/rps.rs @@ -56,45 +56,15 @@ impl From for Rgb } } +const EFFICIENCY: [[i32; RPSType::COUNT]; RPSType::COUNT] = [ + [ 0, 0, 100 ], // Rock + [ 100, 0, 0 ], // Paper + [ 0, 100, 0 ], // Scissor +]; + fn get_effectiveness(attacker: usize, defender: usize) -> i32 { - let attacker_type = RPSType::from_repr(attacker).unwrap(); - let defender_type = RPSType::from_repr(defender).unwrap(); - - // should be a table. - if attacker_type == RPSType::Rock - { - if defender_type == RPSType::Scissor - { - 100 - } - else - { - 0 - } - } - else if attacker_type == RPSType::Paper - { - if defender_type == RPSType::Rock - { - 100 - } - else - { - 0 - } - } - else - { - if defender_type == RPSType::Paper - { - 100 - } - else - { - 0 - } - } + EFFICIENCY[attacker][defender] } #[derive(Clone)]