From 2854f41437465934e4e26a8dcb24bd58bfe8f5a5 Mon Sep 17 00:00:00 2001 From: leca Date: Thu, 21 Mar 2024 01:30:47 +0300 Subject: [PATCH] small improvements --- src/game.rs | 100 +++++++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/src/game.rs b/src/game.rs index 4401de8..68f82c0 100644 --- a/src/game.rs +++ b/src/game.rs @@ -1,12 +1,22 @@ use rand::Rng; +const VOWELS: usize = 5; +const CONSONANTS: usize = 11; +const OBS: &str = ""; + +type KanaCharacters<'a> = [[&'a str; VOWELS]; CONSONANTS]; + pub enum Kanas { Romaji, Hiragana, - Katakana + Katakana, } -pub struct Hieroglyph {syllable: String, row: usize, column: usize} +pub struct Hieroglyph { + syllable: String, + row: usize, + column: usize, +} impl std::fmt::Display for Hieroglyph { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -14,86 +24,86 @@ impl std::fmt::Display for Hieroglyph { } } -impl std::fmt::Debug for Hieroglyph{ +impl std::fmt::Debug for Hieroglyph { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Hieroglyph: {} => ({}, {})", self.syllable, self.row, self.column) + write!( + f, + "Hieroglyph: {} => ({}, {})", + self.syllable, self.row, self.column + ) } } -const ROMAJI: [[&str; 5]; 11] = [ - ["a", "i", "u", "e", "o"], +const ROMAJI: KanaCharacters = [ + ["a", "i", "u", "e", "o"], ["ka", "ki", "ku", "ke", "ko"], ["sa", "si", "su", "se", "so"], ["ta", "ti", "tu", "te", "to"], ["na", "ni", "nu", "ne", "no"], ["ha", "hi", "hu", "he", "ho"], ["ma", "mi", "mu", "me", "mo"], - ["ya", "0", "yu", "0", "yo"], + ["ya", OBS, "yu", OBS, "yo"], ["ra", "ri", "ru", "re", "ro"], - ["wa", "0", "0", "0", "wo"], - ["n", "0", "0", "0", "0"], + ["wa", OBS, OBS, OBS, "wo"], + ["n", OBS, OBS, OBS, OBS], ]; -const HIRAGANA: [[&str; 5]; 11] = [ - ["あ", "い", "う", "え", "お"], +const HIRAGANA: KanaCharacters = [ + ["あ", "い", "う", "え", "お"], ["か", "き", "く", "け", "こ"], ["さ", "し", "す", "せ", "そ"], ["た", "ち", "つ", "て", "と"], ["な", "に", "ぬ", "ね", "の"], ["は", "ひ", "ふ", "へ", "ほ"], ["ま", "み", "む", "め", "も"], - ["や", "0", "ゆ", "0", "よ"], + ["や", OBS, "ゆ", OBS, "よ"], ["ら", "り", "る", "れ", "ろ"], - ["わ", "0", "0", "0", "を"], - ["ん", "0", "0", "0", "0"], + ["わ", OBS, OBS, OBS, "を"], + ["ん", OBS, OBS, OBS, OBS], ]; -const KATAKANA: [[&str; 5]; 11] = [ - ["ア", "イ", "ウ", "エ", "オ"], +const KATAKANA: KanaCharacters = [ + ["ア", "イ", "ウ", "エ", "オ"], ["カ", "キ", "ク", "ケ", "コ"], ["サ", "シ", "ス", "セ", "ソ"], ["タ", "チ", "ツ", "テ", "ト"], ["ナ", "ニ", "ヌ", "ネ", "ノ"], ["ハ", "ヒ", "フ", "ヘ", "ホ"], ["マ", "ミ", "ム", "メ", "モ"], - ["ヤ", "0", "ユ", "0", "ヨ"], + ["ヤ", OBS, "ユ", OBS, "ヨ"], ["ラ", "リ", "ル", "レ", "ロ"], - ["ワ", "0" , "0", "0", "ヲ"], - ["ン", "0", "0", "0", "0"], + ["ワ", OBS, OBS, OBS, "ヲ"], + ["ン", OBS, OBS, OBS, OBS], ]; -pub fn get_kana_pair_for_hieroglyph(k: Kanas, h: &Hieroglyph) -> Hieroglyph { +fn get_characters_for_kana(k: &Kanas) -> KanaCharacters { match k { - Kanas::Hiragana => Hieroglyph { - syllable: HIRAGANA[h.row][h.column].to_string(), - row: h.row, - column: h.column - }, - Kanas::Katakana => Hieroglyph { - syllable: KATAKANA[h.row][h.column].to_string(), - row: h.row, - column: h.column - }, - Kanas::Romaji => Hieroglyph { - syllable: ROMAJI[h.row][h.column].to_string(), - row: h.row, - column: h.column - }, + Kanas::Hiragana => HIRAGANA, + Kanas::Katakana => KATAKANA, + Kanas::Romaji => ROMAJI, + } +} + +pub fn get_kana_pair_for_hieroglyph(k: Kanas, h: &Hieroglyph) -> Hieroglyph { + Hieroglyph { + syllable: get_characters_for_kana(&k)[h.row][h.column].to_string(), + row: h.row, + column: h.column, } } pub fn generate_random_hieroglyph(k: Kanas) -> Hieroglyph { - let row: usize = rand::thread_rng().gen_range(0..ROMAJI.len()-1); - let column: usize = rand::thread_rng().gen_range(0..ROMAJI[0].len()-1); + let row: usize = rand::thread_rng().gen_range(0..CONSONANTS); + let column: usize = rand::thread_rng().gen_range(0..VOWELS); - let generated: String = match k { - Kanas::Romaji => ROMAJI[row][column].to_string(), - Kanas::Hiragana => HIRAGANA[row][column].to_string(), - Kanas::Katakana => KATAKANA[row][column].to_string() - }; + let syllable: String = get_characters_for_kana(&k)[row][column].to_string(); - if generated == "0" { + if syllable == OBS { return generate_random_hieroglyph(k); } - Hieroglyph { syllable: generated, row, column} -} \ No newline at end of file + Hieroglyph { + syllable, + row, + column, + } +}