From 37253c7035a656c0d5fb4fceea3e3820c49a85a4 Mon Sep 17 00:00:00 2001 From: Chris Anders Date: Sat, 26 Oct 2024 08:07:48 +0200 Subject: [PATCH] refactor: Cleanup --- src/MimaSim/MimaSim/MIMA/Font.cs | 426 ++++++++++++++++--------------- 1 file changed, 222 insertions(+), 204 deletions(-) diff --git a/src/MimaSim/MimaSim/MIMA/Font.cs b/src/MimaSim/MimaSim/MIMA/Font.cs index a5f5ea8..9684955 100644 --- a/src/MimaSim/MimaSim/MIMA/Font.cs +++ b/src/MimaSim/MimaSim/MIMA/Font.cs @@ -1,4 +1,3 @@ -using System; using System.Linq; using System.Collections.Generic; using MimaSim.MIMA.Components; @@ -7,13 +6,200 @@ namespace MimaSim.MIMA; public class Font { - Dictionary _characters = new(); - - public (bool[] pixels, int width) this[char key] => _characters[key]; + private static readonly Dictionary Characters = new(); public Font() { - _characters.Add('a', ([ + AddLowerCaseLetters(); + AddDigits(); + AddSpecialChars(); + } + + private void AddSpecialChars() + { + Characters.Add('!', ([ + false, false, true, false, false, // Zeile 1: ..#.. + false, false, true, false, false, // Zeile 2: ..#.. + false, false, true, false, false, // Zeile 3: ..#.. + false, false, false, false, false, // Zeile 4: ..... + false, false, true, false, false // Zeile 5: ..#.. + ], 5)); + + Characters.Add('@', ([ + true, true, true, true, false, // Zeile 1: ####. + true, false, false, true, true, // Zeile 2: #..## + true, false, true, false, true, // Zeile 3: #.#.# + true, false, true, true, false, // Zeile 4: #.##. + true, true, false, false, false // Zeile 5: ##... + ], 5)); + + Characters.Add('#', ([ + false, true, false, true, false, // Zeile 1: .#.#. + true, true, true, true, true, // Zeile 2: ##### + false, true, false, true, false, // Zeile 3: .#.#. + true, true, true, true, true, // Zeile 4: ##### + false, true, false, true, false // Zeile 5: .#.#. + ], 5)); + + Characters.Add('$', ([ + false, true, true, true, false, // Zeile 1: .###. + true, false, true, false, false, // Zeile 2: #.#.. + false, true, true, true, false, // Zeile 3: .###. + false, false, true, false, true, // Zeile 4: ..#.# + true, true, true, true, false // Zeile 5: ####. + ], 5)); + + Characters.Add('%', ([ + true, false, false, true, false, // Zeile 1: #..#. + false, false, true, false, false, // Zeile 2: ..#.. + false, true, false, false, false, // Zeile 3: .#... + false, false, true, false, false, // Zeile 4: ..#.. + true, false, false, true, false // Zeile 5: #..#. + ], 5)); + + Characters.Add('&', ([ + false, true, true, false, false, // Zeile 1: .##.. + true, false, true, false, false, // Zeile 2: #.#.. + false, true, true, false, true, // Zeile 3: .##.# + true, false, true, true, false, // Zeile 4: #.##. + false, true, false, true, true // Zeile 5: .#.## + ], 5)); + + Characters.Add('*', ([ + false, true, false, true, false, // Zeile 1: .#.#. + false, false, true, false, false, // Zeile 2: ..#.. + true, true, true, true, true, // Zeile 3: ##### + false, false, true, false, false, // Zeile 4: ..#.. + false, true, false, true, false // Zeile 5: .#.#. + ], 5)); + + Characters.Add('+', ([ + false, false, true, false, false, // Zeile 1: ..#.. + false, false, true, false, false, // Zeile 2: ..#.. + true, true, true, true, true, // Zeile 3: ##### + false, false, true, false, false, // Zeile 4: ..#.. + false, false, true, false, false // Zeile 5: ..#.. + ], 5)); + + Characters.Add('-', ([ + false, false, false, false, false, // Zeile 1: ..... + false, false, false, false, false, // Zeile 2: ..... + true, true, true, true, true, // Zeile 3: ##### + false, false, false, false, false, // Zeile 4: ..... + false, false, false, false, false // Zeile 5: ..... + ], 5)); + + Characters.Add('/', ([ + false, false, false, false, true, // Zeile 1: ....# + false, false, false, true, false, // Zeile 2: ...#. + false, false, true, false, false, // Zeile 3: ..#.. + false, true, false, false, false, // Zeile 4: .#... + true, false, false, false, false // Zeile 5: #.... + ], 5)); + + Characters.Add('=', ([ + false, false, false, false, false, // Zeile 1: ..... + true, true, true, true, true, // Zeile 2: ##### + false, false, false, false, false, // Zeile 3: ..... + true, true, true, true, true, // Zeile 4: ##### + false, false, false, false, false // Zeile 5: ..... + ], 5)); + + Characters.Add(' ', ([ + false, false, false, false, false, // Zeile 1: ..... + false, false, false, false, false, // Zeile 2: ..... + false, false, false, false, false, // Zeile 3: ..... + false, false, false, false, false, // Zeile 4: ..... + false, false, false, false, false, // Zeile 5: ..... + ], 5)); + } + + private void AddDigits() + { + Characters.Add('0', ([ + true, true, true, true, true, // Zeile 1: ##### + true, false, false, false, true, // Zeile 2: #...# + true, false, false, false, true, // Zeile 3: #...# + true, false, false, false, true, // Zeile 4: #...# + true, true, true, true, true // Zeile 5: ##### + ], 5)); + + Characters.Add('1', ([ + false, false, false, true, false, // Zeile 1: ...#. + false, false, true, true, false, // Zeile 2: ..##. + false, false, false, true, false, // Zeile 3: ...#. + false, false, false, true, false, // Zeile 4: ...#. + false, false, false, true, false // Zeile 5: ...#. + ], 5)); + + Characters.Add('2', ([ + true, true, true, true, true, // Zeile 1: ##### + false, false, false, false, true, // Zeile 2: ....# + true, true, true, true, true, // Zeile 3: ##### + true, false, false, false, false, // Zeile 4: #.... + true, true, true, true, true // Zeile 5: ##### + ], 5)); + + Characters.Add('3', ([ + true, true, true, true, true, // Zeile 1: ##### + false, false, false, false, true, // Zeile 2: ....# + true, true, true, true, true, // Zeile 3: ##### + false, false, false, false, true, // Zeile 4: ....# + true, true, true, true, true // Zeile 5: ##### + ], 5)); + + Characters.Add('4', ([ + true, false, false, false, true, // Zeile 1: #...# + true, false, false, false, true, // Zeile 2: #...# + true, true, true, true, true, // Zeile 3: ##### + false, false, false, false, true, // Zeile 4: ....# + false, false, false, false, true // Zeile 5: ....# + ], 5)); + + Characters.Add('5', ([ + true, true, true, true, true, // Zeile 1: ##### + true, false, false, false, false, // Zeile 2: #.... + true, true, true, true, true, // Zeile 3: ##### + false, false, false, false, true, // Zeile 4: ....# + true, true, true, true, true // Zeile 5: ##### + ], 5)); + + Characters.Add('6', ([ + true, true, true, true, true, // Zeile 1: ##### + true, false, false, false, false, // Zeile 2: #.... + true, true, true, true, true, // Zeile 3: ##### + true, false, false, false, true, // Zeile 4: #...# + true, true, true, true, true // Zeile 5: ##### + ], 5)); + + Characters.Add('7', ([ + true, true, true, true, true, // Zeile 1: ##### + false, false, false, false, true, // Zeile 2: ....# + false, false, false, true, false, // Zeile 3: ...#. + false, false, true, false, false, // Zeile 4: ..#.. + false, true, false, false, false // Zeile 5: .#... + ], 5)); + + Characters.Add('8', ([ + true, true, true, true, true, // Zeile 1: ##### + true, false, false, false, true, // Zeile 2: #...# + true, true, true, true, true, // Zeile 3: ##### + true, false, false, false, true, // Zeile 4: #...# + true, true, true, true, true // Zeile 5: ##### + ], 5)); + + Characters.Add('9', ([ + true, true, true, true, true, // Zeile 1: ##### + true, false, false, false, true, // Zeile 2: #...# + true, true, true, true, true, // Zeile 3: ##### + false, false, false, false, true, // Zeile 4: ....# + true, true, true, true, true // Zeile 5: ##### + ], 5)); + } + + private void AddLowerCaseLetters() + { + Characters.Add('a', ([ false, true, true, true, false, // Zeile 1: .###. false, false, false, false, true, // Zeile 2: ....# false, true, true, true, true, // Zeile 3: .#### @@ -21,7 +207,7 @@ public Font() false, true, true, true, false // Zeile 5: .###. ], 5)); - _characters.Add('b', ([ + Characters.Add('b', ([ true, false, false, false, false, // Zeile 1: #.. true, false, false, false, false, // Zeile 2: #.... true, true, true, true, false, // Zeile 3: ####. @@ -29,7 +215,7 @@ public Font() true, true, true, true, false // Zeile 5: ####. ], 5)); - _characters.Add('c', ([ + Characters.Add('c', ([ false, true, true, true, false, // Zeile 1: .###. true, false, false, false, false, // Zeile 2: #.... true, false, false, false, false, // Zeile 3: #.... @@ -37,7 +223,7 @@ public Font() false, true, true, true, false // Zeile 5: .###. ], 5)); - _characters.Add('d', ([ + Characters.Add('d', ([ false, false, false, false, true, // Zeile 1: ....# false, false, false, false, true, // Zeile 2: ....# false, true, true, true, true, // Zeile 3: .#### @@ -45,7 +231,7 @@ public Font() false, false, true, true, false // Zeile 5: ..##. ], 5)); - _characters.Add('e', ([ + Characters.Add('e', ([ false, true, true, true, false, // Zeile 1: .###. true, false, false, false, true, // Zeile 2: #...# true, true, true, true, false, // Zeile 3: ####. @@ -53,7 +239,7 @@ public Font() false, true, true, true, false // Zeile 5: .###. ], 5)); - _characters.Add('f', ([ + Characters.Add('f', ([ false, true, true, true, true, // Zeile 1: .#### true, false, false, false, false, // Zeile 2: #.... true, true, true, false, false, // Zeile 3: ###.. @@ -61,7 +247,7 @@ public Font() true, false, false, false, false // Zeile 5: #.... ], 5)); - _characters.Add('g', ([ + Characters.Add('g', ([ false, true, true, true, false, // Zeile 1: .###. true, false, false, false, true, // Zeile 2: #...# true, false, false, false, true, // Zeile 3: #...# @@ -69,7 +255,7 @@ public Font() false, false, false, false, true // Zeile 5: ....# ], 5)); - _characters.Add('h', ([ + Characters.Add('h', ([ true, false, false, false, false, // Zeile 1: #.... true, false, false, false, false, // Zeile 2: #.... true, true, true, true, false, // Zeile 3: ####. @@ -77,7 +263,7 @@ public Font() true, false, false, false, true // Zeile 5: #...# ], 5)); - _characters.Add('i', ([ + Characters.Add('i', ([ false, true, false, // Zeile 1: .#. false, true, false, // Zeile 2: .#. false, true, false, // Zeile 3: .#. @@ -85,7 +271,7 @@ public Font() false, true, false // Zeile 5: .#. ], 3)); - _characters.Add('j', ([ + Characters.Add('j', ([ false, false, false, true, false, // Zeile 1: ...#. false, false, false, true, false, // Zeile 2: ...#. false, false, false, true, false, // Zeile 3: ...#. @@ -93,7 +279,7 @@ public Font() false, true, true, false, false // Zeile 5: .##.. ], 5)); - _characters.Add('k', ([ + Characters.Add('k', ([ true, false, false, false, true, // Zeile 1: #...# true, false, false, true, false, // Zeile 2: #..#. true, true, true, false, false, // Zeile 3: ###.. @@ -101,7 +287,7 @@ public Font() true, false, false, false, true // Zeile 5: #...# ], 5)); - _characters.Add('l', ([ + Characters.Add('l', ([ true, false, false, false, false, // Zeile 1: #.... true, false, false, false, false, // Zeile 2: #.... true, false, false, false, false, // Zeile 3: #.... @@ -109,7 +295,7 @@ public Font() true, true, true, true, false // Zeile 5: ####. ], 5)); - _characters.Add('m', ([ + Characters.Add('m', ([ true, true, false, true, true, // Zeile 1: ##.## true, false, true, false, true, // Zeile 2: #.#.# true, false, false, false, true, // Zeile 3: #...# @@ -117,7 +303,7 @@ public Font() true, false, false, false, true // Zeile 5: #...# ], 5)); - _characters.Add('n', ([ + Characters.Add('n', ([ true, true, true, false, false, // Zeile 1: ###.. true, false, false, true, false, // Zeile 2: #..#. true, false, false, false, true, // Zeile 3: #...# @@ -125,7 +311,7 @@ public Font() true, false, false, false, true // Zeile 5: #...# ], 5)); - _characters.Add('o', ([ + Characters.Add('o', ([ false, true, true, true, false, // Zeile 1: .###. true, false, false, false, true, // Zeile 2: #...# true, false, false, false, true, // Zeile 3: #...# @@ -133,7 +319,7 @@ public Font() false, true, true, true, false // Zeile 5: .###. ], 5)); - _characters.Add('p', ([ + Characters.Add('p', ([ true, true, true, true, false, // Zeile 1: ####. true, false, false, false, true, // Zeile 2: #...# true, true, true, true, false, // Zeile 3: ####. @@ -141,7 +327,7 @@ public Font() true, false, false, false, false // Zeile 5: #.... ], 5)); - _characters.Add('q', ([ + Characters.Add('q', ([ false, true, true, true, false, // Zeile 1: .###. true, false, false, false, true, // Zeile 2: #...# true, false, false, false, true, // Zeile 3: #...# @@ -149,7 +335,7 @@ public Font() false, false, false, false, true // Zeile 5: ....# ], 5)); - _characters.Add('r', ([ + Characters.Add('r', ([ true, true, true, false, false, // Zeile 1: ###.. true, false, false, true, false, // Zeile 2: #..#. true, false, false, false, false, // Zeile 3: #.... @@ -157,7 +343,7 @@ public Font() true, false, false, false, false // Zeile 5: #.... ], 5)); - _characters.Add('s', ([ + Characters.Add('s', ([ false, true, true, true, false, // Zeile 1: .###. true, false, false, false, false, // Zeile 2: #.... false, true, true, true, false, // Zeile 3: .###. @@ -165,7 +351,7 @@ public Font() true, true, true, true, false // Zeile 5: ####. ], 5)); - _characters.Add('t', ([ + Characters.Add('t', ([ true, true, true, true, true, // Zeile 1: ##### false, false, true, false, false, // Zeile 2: ..#.. false, false, true, false, false, // Zeile 3: ..#.. @@ -173,7 +359,7 @@ public Font() false, false, true, false, false // Zeile 5: ..#.. ], 5)); - _characters.Add('u', ([ + Characters.Add('u', ([ true, false, false, false, true, // Zeile 1: #...# true, false, false, false, true, // Zeile 2: #...# true, false, false, false, true, // Zeile 3: #...# @@ -181,7 +367,7 @@ public Font() false, true, true, true, false // Zeile 5: .###. ], 5)); - _characters.Add('v', ([ + Characters.Add('v', ([ true, false, false, false, true, // Zeile 1: #...# true, false, false, false, true, // Zeile 2: #...# false, true, false, true, false, // Zeile 3: .#.#. @@ -189,7 +375,7 @@ public Font() false, false, true, false, false // Zeile 5: ..#.. ], 5)); - _characters.Add('w', ([ + Characters.Add('w', ([ true, false, false, false, true, // Zeile 1: #...# true, false, false, false, true, // Zeile 2: #...# true, false, false, false, true, // Zeile 3: #...# @@ -197,7 +383,7 @@ public Font() false, true, false, true, false // Zeile 5: .#.#. ], 5)); - _characters.Add('x', ([ + Characters.Add('x', ([ true, false, false, false, true, // Zeile 1: #...# false, true, false, true, false, // Zeile 2: .#.#. false, false, true, false, false, // Zeile 3: ..#.. @@ -205,7 +391,7 @@ public Font() true, false, false, false, true // Zeile 5: #...# ], 5)); - _characters.Add('y', ([ + Characters.Add('y', ([ true, false, false, false, true, // Zeile 1: #...# false, true, false, true, false, // Zeile 2: .#.#. false, false, true, false, false, // Zeile 3: ..#.. @@ -213,204 +399,36 @@ public Font() false, true, true, false, false // Zeile 5: .##.. ], 5)); - _characters.Add('z', ([ + Characters.Add('z', ([ true, true, true, true, true, // Zeile 1: ##### false, false, false, true, false, // Zeile 2: ...#. false, false, true, false, false, // Zeile 3: ..#.. false, true, false, false, false, // Zeile 4: .#... true, true, true, true, true // Zeile 5: ##### ], 5)); - - _characters.Add('0', ([ - true, true, true, true, true, // Zeile 1: ##### - true, false, false, false, true, // Zeile 2: #...# - true, false, false, false, true, // Zeile 3: #...# - true, false, false, false, true, // Zeile 4: #...# - true, true, true, true, true // Zeile 5: ##### - ], 5)); - - _characters.Add('1', ([ - false, false, false, true, false, // Zeile 1: ...#. - false, false, true, true, false, // Zeile 2: ..##. - false, false, false, true, false, // Zeile 3: ...#. - false, false, false, true, false, // Zeile 4: ...#. - false, false, false, true, false // Zeile 5: ...#. - ], 5)); - - _characters.Add('2', ([ - true, true, true, true, true, // Zeile 1: ##### - false, false, false, false, true, // Zeile 2: ....# - true, true, true, true, true, // Zeile 3: ##### - true, false, false, false, false, // Zeile 4: #.... - true, true, true, true, true // Zeile 5: ##### - ], 5)); - - _characters.Add('3', ([ - true, true, true, true, true, // Zeile 1: ##### - false, false, false, false, true, // Zeile 2: ....# - true, true, true, true, true, // Zeile 3: ##### - false, false, false, false, true, // Zeile 4: ....# - true, true, true, true, true // Zeile 5: ##### - ], 5)); - - _characters.Add('4', ([ - true, false, false, false, true, // Zeile 1: #...# - true, false, false, false, true, // Zeile 2: #...# - true, true, true, true, true, // Zeile 3: ##### - false, false, false, false, true, // Zeile 4: ....# - false, false, false, false, true // Zeile 5: ....# - ], 5)); - - _characters.Add('5', ([ - true, true, true, true, true, // Zeile 1: ##### - true, false, false, false, false, // Zeile 2: #.... - true, true, true, true, true, // Zeile 3: ##### - false, false, false, false, true, // Zeile 4: ....# - true, true, true, true, true // Zeile 5: ##### - ], 5)); - - _characters.Add('6', ([ - true, true, true, true, true, // Zeile 1: ##### - true, false, false, false, false, // Zeile 2: #.... - true, true, true, true, true, // Zeile 3: ##### - true, false, false, false, true, // Zeile 4: #...# - true, true, true, true, true // Zeile 5: ##### - ], 5)); - - _characters.Add('7', ([ - true, true, true, true, true, // Zeile 1: ##### - false, false, false, false, true, // Zeile 2: ....# - false, false, false, true, false, // Zeile 3: ...#. - false, false, true, false, false, // Zeile 4: ..#.. - false, true, false, false, false // Zeile 5: .#... - ], 5)); - - _characters.Add('8', ([ - true, true, true, true, true, // Zeile 1: ##### - true, false, false, false, true, // Zeile 2: #...# - true, true, true, true, true, // Zeile 3: ##### - true, false, false, false, true, // Zeile 4: #...# - true, true, true, true, true // Zeile 5: ##### - ], 5)); - - _characters.Add('9', ([ - true, true, true, true, true, // Zeile 1: ##### - true, false, false, false, true, // Zeile 2: #...# - true, true, true, true, true, // Zeile 3: ##### - false, false, false, false, true, // Zeile 4: ....# - true, true, true, true, true // Zeile 5: ##### - ], 5)); - - _characters.Add('!', ([ - false, false, true, false, false, // Zeile 1: ..#.. - false, false, true, false, false, // Zeile 2: ..#.. - false, false, true, false, false, // Zeile 3: ..#.. - false, false, false, false, false, // Zeile 4: ..... - false, false, true, false, false // Zeile 5: ..#.. - ], 5)); - - _characters.Add('@', ([ - true, true, true, true, false, // Zeile 1: ####. - true, false, false, true, true, // Zeile 2: #..## - true, false, true, false, true, // Zeile 3: #.#.# - true, false, true, true, false, // Zeile 4: #.##. - true, true, false, false, false // Zeile 5: ##... - ], 5)); - - _characters.Add('#', ([ - false, true, false, true, false, // Zeile 1: .#.#. - true, true, true, true, true, // Zeile 2: ##### - false, true, false, true, false, // Zeile 3: .#.#. - true, true, true, true, true, // Zeile 4: ##### - false, true, false, true, false // Zeile 5: .#.#. - ], 5)); - - _characters.Add('$', ([ - false, true, true, true, false, // Zeile 1: .###. - true, false, true, false, false, // Zeile 2: #.#.. - false, true, true, true, false, // Zeile 3: .###. - false, false, true, false, true, // Zeile 4: ..#.# - true, true, true, true, false // Zeile 5: ####. - ], 5)); - - _characters.Add('%', ([ - true, false, false, true, false, // Zeile 1: #..#. - false, false, true, false, false, // Zeile 2: ..#.. - false, true, false, false, false, // Zeile 3: .#... - false, false, true, false, false, // Zeile 4: ..#.. - true, false, false, true, false // Zeile 5: #..#. - ], 5)); - - _characters.Add('&', ([ - false, true, true, false, false, // Zeile 1: .##.. - true, false, true, false, false, // Zeile 2: #.#.. - false, true, true, false, true, // Zeile 3: .##.# - true, false, true, true, false, // Zeile 4: #.##. - false, true, false, true, true // Zeile 5: .#.## - ], 5)); - - _characters.Add('*', ([ - false, true, false, true, false, // Zeile 1: .#.#. - false, false, true, false, false, // Zeile 2: ..#.. - true, true, true, true, true, // Zeile 3: ##### - false, false, true, false, false, // Zeile 4: ..#.. - false, true, false, true, false // Zeile 5: .#.#. - ], 5)); - - _characters.Add('+', ([ - false, false, true, false, false, // Zeile 1: ..#.. - false, false, true, false, false, // Zeile 2: ..#.. - true, true, true, true, true, // Zeile 3: ##### - false, false, true, false, false, // Zeile 4: ..#.. - false, false, true, false, false // Zeile 5: ..#.. - ], 5)); - - _characters.Add('-', ([ - false, false, false, false, false, // Zeile 1: ..... - false, false, false, false, false, // Zeile 2: ..... - true, true, true, true, true, // Zeile 3: ##### - false, false, false, false, false, // Zeile 4: ..... - false, false, false, false, false // Zeile 5: ..... - ], 5)); - - _characters.Add('/', ([ - false, false, false, false, true, // Zeile 1: ....# - false, false, false, true, false, // Zeile 2: ...#. - false, false, true, false, false, // Zeile 3: ..#.. - false, true, false, false, false, // Zeile 4: .#... - true, false, false, false, false // Zeile 5: #.... - ], 5)); - - _characters.Add('=', ([ - false, false, false, false, false, // Zeile 1: ..... - true, true, true, true, true, // Zeile 2: ##### - false, false, false, false, false, // Zeile 3: ..... - true, true, true, true, true, // Zeile 4: ##### - false, false, false, false, false // Zeile 5: ..... - ], 5)); } - public short Measure(char c) + public (short width, short height) Measure(char c) { - foreach (var kv in _characters) + foreach (var kv in Characters) { if (kv.Key == c) { - return (short)kv.Value.Item2; + return ((short)kv.Value.Item2, (short)(kv.Value.Item1.Length / kv.Value.Item2)); } } - return 0; + return (0, 0); } public short Measure(string s) { - return (short)s.Sum(c => Measure(c) + 1); + return (short)s.Sum(c => Measure(c).width + 1); } public void DrawChar(short xOffset, short yOffset, char ch) { - if (!_characters.TryGetValue(ch, out var character)) + if (!Characters.TryGetValue(ch, out var character)) { bool[] boxPixels = [