From 576f9f84f1df68e3232216a757c63c28b9ba8d14 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sat, 9 May 2026 00:41:21 +0200 Subject: [PATCH] Refactor: Organize language data into separate config functions --- main.go | 200 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 109 insertions(+), 91 deletions(-) diff --git a/main.go b/main.go index f48702e..0888419 100644 --- a/main.go +++ b/main.go @@ -27,13 +27,99 @@ const ( // LanguageScreenState holds the state for each language screen type LanguageScreenState struct { - Textures []rl.Texture2D - ImageFiles []string - ImagePath string - ScrollY int32 - Loaded bool - Title string - Color rl.Color + Textures []rl.Texture2D + ImageFiles []string + ImagePath string + ScrollY int32 + Loaded bool + Title string + Color rl.Color +} + +// getThaiConfig returns configuration for Thai language screen +func getThaiConfig() LanguageScreenState { + return LanguageScreenState{ + ImagePath: "thai/images/", + ImageFiles: []string{ + "ก_Ko Kai.png", "ข_Kho Khai.png", "ฃ_Kho Khuat.png", "ค_Kho Khwai.png", "ฅ_Kho Khon.png", + "ฆ_Kho Rakhang.png", "ง_Ngo Ngai.png", "จ_Cho Chan.png", "ฉ_Cho Ching.png", "ช_Cho Chang.png", + "ซ_So So.png", "ฌ_Cho Che.png", "ญ_Yo Ying.png", "ฎ_Do Dek.png", "ฏ_To Tao.png", + "ฐ_To Thong.png", "ฑ_To Thung.png", "ฒ_To Thahan.png", "ณ_No Nen.png", "ด_Do Dek.png", + "ต_To Tao.png", "ถ_To Thung.png", "ท_To Thahan.png", "ธ_Tho Thong.png", "น_No Nu.png", + "บ_Bo Baimai.png", "ป_Po Pla.png", "ผ_Pho Phung.png", "ฝ_Fo Fa.png", "พ_Pho Phan.png", + "ฟ_Fo Fan.png", "ภ_Pho Samphao.png", "ม_Mo Ma.png", "ย_Yo Yak.png", "ร_Ro Rua.png", + "ล_Lo Ling.png", "ว_Wo Waen.png", "ศ_So Sala.png", "ษ_So Ruezi.png", "ส_So Suan.png", + "ห_Ho Hip.png", "ฬ_Lo Chula.png", "อ_O Ang.png", "ฮ_Ho Nokhuk.png", + "ะ_Sara A.png", "ั_Sara Aa.png", "า_Sara Aa.png", "ำ_Sara Am.png", "ิ_Sara I.png", + "ี_Sara Ii.png", "ึ_Sara Ue.png", "ื_Sara Uee.png", "ุ_Sara U.png", "ู_Sara Uu.png", + "เ_Sara E.png", "แ_Sara Ae.png", "โ_Sara O.png", "ใ_Sara Ai Mai Malai.png", "ไ_Sara Ai Mai Muang.png", + "ๅ_Sara Ue.png", "ๆ_Sara Uee.png", + "๐_Zero.png", "๑_One.png", "๒_Two.png", "๓_Three.png", "๔_Four.png", + "๕_Five.png", "๖_Six.png", "๗_Seven.png", "๘_Eight.png", "๙_Nine.png", + }, + ScrollY: 0, + Title: "Thai Characters", + Color: rl.Red, + } +} + +// getKoreanConfig returns configuration for Korean language screen +func getKoreanConfig() LanguageScreenState { + return LanguageScreenState{ + ImagePath: "korean/images/", + ImageFiles: []string{ + "ㄱ_Giyeok.png", "ㄲ_SsangGiyeok.png", "ㄴ_Nieun.png", "ㄷ_Dieut.png", "ㄸ_SsangDieut.png", + "ㄹ_Rieul.png", "ㅁ_Mieum.png", "ㅂ_Pieup.png", "ㅃ_SsangPieup.png", "ㅅ_Siot.png", + "ㅆ_SsangSiot.png", "ㅇ_Ieung.png", "ㅈ_Jieut.png", "ㅉ_SSangJieut.png", "ㅊ_Chieut.png", + "ㅋ_Kieuk.png", "ㅌ_Tieut.png", "ㅍ_Pieup.png", "ㅎ_Hieut.png", + "ㅏ_A.png", "ㅐ_Ae.png", "ㅑ_Ya.png", "ㅒ_Yae.png", "ㅓ_Eo.png", + "ㅔ_E.png", "ㅕ_Yeo.png", "ㅖ_Ye.png", "ㅗ_O.png", "ㅘ_Wa.png", + "ㅙ_Wae.png", "ㅚ_Oe.png", "ㅛ_Yo.png", "ㅜ_U.png", "ㅝ_Wo.png", + "ㅞ_We.png", "ㅟ_Wi.png", "ㅠ_Yu.png", "ㅡ_Eu.png", "ㅢ_Ui.png", "ㅣ_I.png", + "ㄱㅅ_Giyeok-Siot.png", "ㄵ_Nieun-Cieut.png", "ㄶ_Nieun-Hieut.png", + "ㄺ_Rieul-Giyeok.png", "ㄻ_Rieul-Mieum.png", "ㄼ_Rieul-Pieup.png", "ㄽ_Rieul-Siot.png", + "ㄾ_Rieul-Tieut.png", "ㄿ_Rieul-Phup.png", "ㅀ_Rieul-Hieut.png", + "ㅄ_Pieup-Siot.png", + "가_Ga.png", "각_Gak.png", "간_Gan.png", "갈_Gal.png", "감_Gam.png", + "갑_Gap.png", "강_Gang.png", "개_Gae.png", "객_Gaek.png", "건_Geon.png", + "걸_Geol.png", "검_Geom.png", "겁_Geop.png", "게_Ge.png", "격_Gyeok.png", + "견_Gyeon.png", "결_Gyeol.png", "겸_Gyeom.png", "겹_Gyeop.png", "경_Gyeong.png", + "계_Gye.png", "고_Go.png", "곡_Gok.png", "곤_Gon.png", "골_Gol.png", + "공_Gong.png", "과_Gwa.png", "관_Gwan.png", "괄_Gwal.png", "광_Gwang.png", + "귀_Gwi.png", "규_Gyu.png", "균_Gyun.png", "굴_Gul.png", "굼_Gum.png", + "국_Guk.png", "군_Gun.png", "굽_Gup.png", "굿_Gut.png", "그_Geu.png", + }, + ScrollY: 0, + Title: "Korean Characters", + Color: rl.Blue, + } +} + +// getJapaneseConfig returns configuration for Japanese language screen +func getJapaneseConfig() LanguageScreenState { + return LanguageScreenState{ + ImagePath: "japanese/images/", + ImageFiles: []string{ + "あ_a.png", "い_i.png", "う_u.png", "え_e.png", "お_o.png", + "か_ka.png", "き_ki.png", "く_ku.png", "け_ke.png", "こ_ko.png", + "さ_sa.png", "し_shi.png", "す_su.png", "せ_se.png", "そ_so.png", + "た_ta.png", "ち_chi.png", "つ_tsu.png", "て_te.png", "と_to.png", + "な_na.png", "に_ni.png", "ぬ_nu.png", "ね_ne.png", "の_no.png", + "は_ha.png", "ひ_hi.png", "ふ_fu.png", "へ_he.png", "ほ_ho.png", + "ま_ma.png", "み_mi.png", "む_mu.png", "め_me.png", "も_mo.png", + "や_ya.png", "ゆ_yu.png", "よ_yo.png", + "ら_ra.png", "り_ri.png", "る_ru.png", "れ_re.png", "ろ_ro.png", + "わ_wa.png", "ゐ_wi.png", "ゑ_we.png", "を_wo.png", "ん_n.png", + "が_ga.png", "ぎ_gi.png", "ぐ_gu.png", "げ_ge.png", "ご_go.png", + "ざ_za.png", "じ_ji.png", "ず_zu.png", "ぜ_ze.png", "ぞ_zo.png", + "だ_da.png", "ぢ_di.png", "づ_du.png", "で_de.png", "ど_do.png", + "ば_ba.png", "び_bi.png", "ぶ_bu.png", "べ_be.png", "ぼ_bo.png", + "ぱ_pa.png", "ぴ_pi.png", "ぷ_pu.png", "ぺ_pe.png", "ぽ_po.png", + }, + ScrollY: 0, + Title: "Hiragana Characters", + Color: rl.Green, + } } func main() { @@ -114,81 +200,14 @@ func main() { prevScreen := ScreenMenu // Language screen states + thaiConfig := getThaiConfig() + koreanConfig := getKoreanConfig() + japaneseConfig := getJapaneseConfig() + languageStates := map[string]*LanguageScreenState{ - ScreenThai: { - ImagePath: "thai/images/", - ImageFiles: []string{ - "ก_Ko Kai.png", "ข_Kho Khai.png", "ฃ_Kho Khuat.png", "ค_Kho Khwai.png", "ฅ_Kho Khon.png", - "ฆ_Kho Rakhang.png", "ง_Ngo Ngai.png", "จ_Cho Chan.png", "ฉ_Cho Ching.png", "ช_Cho Chang.png", - "ซ_So So.png", "ฌ_Cho Che.png", "ญ_Yo Ying.png", "ฎ_Do Dek.png", "ฏ_To Tao.png", - "ฐ_To Thong.png", "ฑ_To Thung.png", "ฒ_To Thahan.png", "ณ_No Nen.png", "ด_Do Dek.png", - "ต_To Tao.png", "ถ_To Thung.png", "ท_To Thahan.png", "ธ_Tho Thong.png", "น_No Nu.png", - "บ_Bo Baimai.png", "ป_Po Pla.png", "ผ_Pho Phung.png", "ฝ_Fo Fa.png", "พ_Pho Phan.png", - "ฟ_Fo Fan.png", "ภ_Pho Samphao.png", "ม_Mo Ma.png", "ย_Yo Yak.png", "ร_Ro Rua.png", - "ล_Lo Ling.png", "ว_Wo Waen.png", "ศ_So Sala.png", "ษ_So Ruezi.png", "ส_So Suan.png", - "ห_Ho Hip.png", "ฬ_Lo Chula.png", "อ_O Ang.png", "ฮ_Ho Nokhuk.png", - "ะ_Sara A.png", "ั_Sara Aa.png", "า_Sara Aa.png", "ำ_Sara Am.png", "ิ_Sara I.png", - "ี_Sara Ii.png", "ึ_Sara Ue.png", "ื_Sara Uee.png", "ุ_Sara U.png", "ู_Sara Uu.png", - "เ_Sara E.png", "แ_Sara Ae.png", "โ_Sara O.png", "ใ_Sara Ai Mai Malai.png", "ไ_Sara Ai Mai Muang.png", - "ๅ_Sara Ue.png", "ๆ_Sara Uee.png", - "๐_Zero.png", "๑_One.png", "๒_Two.png", "๓_Three.png", "๔_Four.png", - "๕_Five.png", "๖_Six.png", "๗_Seven.png", "๘_Eight.png", "๙_Nine.png", - }, - ScrollY: 0, - Title: "Thai Characters", - Color: rl.Red, - }, - ScreenKorean: { - ImagePath: "korean/images/", - ImageFiles: []string{ - "ㄱ_Giyeok.png", "ㄲ_SsangGiyeok.png", "ㄴ_Nieun.png", "ㄷ_Dieut.png", "ㄸ_SsangDieut.png", - "ㄹ_Rieul.png", "ㅁ_Mieum.png", "ㅂ_Pieup.png", "ㅃ_SsangPieup.png", "ㅅ_Siot.png", - "ㅆ_SsangSiot.png", "ㅇ_Ieung.png", "ㅈ_Jieut.png", "ㅉ_SSangJieut.png", "ㅊ_Chieut.png", - "ㅋ_Kieuk.png", "ㅌ_Tieut.png", "ㅍ_Pieup.png", "ㅎ_Hieut.png", - "ㅏ_A.png", "ㅐ_Ae.png", "ㅑ_Ya.png", "ㅒ_Yae.png", "ㅓ_Eo.png", - "ㅔ_E.png", "ㅕ_Yeo.png", "ㅖ_Ye.png", "ㅗ_O.png", "ㅘ_Wa.png", - "ㅙ_Wae.png", "ㅚ_Oe.png", "ㅛ_Yo.png", "ㅜ_U.png", "ㅝ_Wo.png", - "ㅞ_We.png", "ㅟ_Wi.png", "ㅠ_Yu.png", "ㅡ_Eu.png", "ㅢ_Ui.png", "ㅣ_I.png", - "ㄱㅅ_Giyeok-Siot.png", "ㄵ_Nieun-Cieut.png", "ㄶ_Nieun-Hieut.png", - "ㄺ_Rieul-Giyeok.png", "ㄻ_Rieul-Mieum.png", "ㄼ_Rieul-Pieup.png", "ㄽ_Rieul-Siot.png", - "ㄾ_Rieul-Tieut.png", "ㄿ_Rieul-Phup.png", "ㅀ_Rieul-Hieut.png", - "ㅄ_Pieup-Siot.png", - "가_Ga.png", "각_Gak.png", "간_Gan.png", "갈_Gal.png", "감_Gam.png", - "갑_Gap.png", "강_Gang.png", "개_Gae.png", "객_Gaek.png", "건_Geon.png", - "걸_Geol.png", "검_Geom.png", "겁_Geop.png", "게_Ge.png", "격_Gyeok.png", - "견_Gyeon.png", "결_Gyeol.png", "겸_Gyeom.png", "겹_Gyeop.png", "경_Gyeong.png", - "계_Gye.png", "고_Go.png", "곡_Gok.png", "곤_Gon.png", "골_Gol.png", - "공_Gong.png", "과_Gwa.png", "관_Gwan.png", "괄_Gwal.png", "광_Gwang.png", - "귀_Gwi.png", "규_Gyu.png", "균_Gyun.png", "굴_Gul.png", "굼_Gum.png", - "국_Guk.png", "군_Gun.png", "굽_Gup.png", "굿_Gut.png", "그_Geu.png", - }, - ScrollY: 0, - Title: "Korean Characters", - Color: rl.Blue, - }, - ScreenJapanese: { - ImagePath: "japanese/images/", - ImageFiles: []string{ - "あ_a.png", "い_i.png", "う_u.png", "え_e.png", "お_o.png", - "か_ka.png", "き_ki.png", "く_ku.png", "け_ke.png", "こ_ko.png", - "さ_sa.png", "し_shi.png", "す_su.png", "せ_se.png", "そ_so.png", - "た_ta.png", "ち_chi.png", "つ_tsu.png", "て_te.png", "と_to.png", - "な_na.png", "に_ni.png", "ぬ_nu.png", "ね_ne.png", "の_no.png", - "は_ha.png", "ひ_hi.png", "ふ_fu.png", "へ_he.png", "ほ_ho.png", - "ま_ma.png", "み_mi.png", "む_mu.png", "め_me.png", "も_mo.png", - "や_ya.png", "ゆ_yu.png", "よ_yo.png", - "ら_ra.png", "り_ri.png", "る_ru.png", "れ_re.png", "ろ_ro.png", - "わ_wa.png", "ゐ_wi.png", "ゑ_we.png", "を_wo.png", "ん_n.png", - "が_ga.png", "ぎ_gi.png", "ぐ_gu.png", "げ_ge.png", "ご_go.png", - "ざ_za.png", "じ_ji.png", "ず_zu.png", "ぜ_ze.png", "ぞ_zo.png", - "だ_da.png", "ぢ_di.png", "づ_du.png", "で_de.png", "ど_do.png", - "ば_ba.png", "び_bi.png", "ぶ_bu.png", "べ_be.png", "ぼ_bo.png", - "ぱ_pa.png", "ぴ_pi.png", "ぷ_pu.png", "ぺ_pe.png", "ぽ_po.png", - }, - ScrollY: 0, - Title: "Hiragana Characters", - Color: rl.Green, - }, + ScreenThai: &thaiConfig, + ScreenKorean: &koreanConfig, + ScreenJapanese: &japaneseConfig, } // Main game loop @@ -203,6 +222,8 @@ func main() { btn.Clicked = false btn.Scale = 1.0 } + backBtn.Clicked = false + backBtn.Scale = 1.0 // Reset language screen state when switching to it if currentScreen != ScreenMenu { @@ -332,7 +353,7 @@ func main() { default: // Language screens state := languageStates[currentScreen] - + // Draw back button scaledWidth := backBtn.Bounds.Width * backBtn.Scale scaledHeight := backBtn.Bounds.Height * backBtn.Scale @@ -355,8 +376,7 @@ func main() { // Draw title rl.DrawText(state.Title, 140, 20, 30, state.Color) - rl.DrawText("Press ESC to return to menu", screenWidth-200, 20, 20, rl.Black) - + // Grid layout columns := 7 imageWidth := int32(64) @@ -364,7 +384,7 @@ func main() { spacing := int32(10) startX := int32(20) startY := int32(60) - + // Draw images in grid for i, texture := range state.Textures { if texture.ID != 0 { @@ -372,18 +392,18 @@ func main() { col := i % columns x := startX + int32(col)*(imageWidth+spacing) y := startY + int32(row)*(imageHeight+spacing) - state.ScrollY - + // Draw background for image rl.DrawRectangle(x, y, imageWidth, imageHeight, rl.LightGray) - + // Draw the texture rl.DrawTexture(texture, int32(x), int32(y), rl.White) - + // Draw border rl.DrawRectangleLines(x, y, imageWidth, imageHeight, rl.Black) } } - + // Handle scroll with mouse wheel scroll := rl.GetMouseWheelMove() if scroll != 0 { @@ -392,9 +412,7 @@ func main() { state.ScrollY = 0 } } - - // Draw scroll hint rl.DrawText("Use mouse wheel to scroll", screenWidth/2-100, screenHeight-30, 16, rl.Gray) }