Game CodedColor für die STM32F103 Bluepill

OP #7592188
Lesenswert?

Vor Jahren (und es war wirklich vor Jahren, genauere Anzahl derer 4) hatte ich angefangen gehabt, ein Rätselspiel für Mikrocontroller zu schreiben, das inspiriert war von den Rätsel in den Fernsehzeitschriften der ausgehenden 70er, anfangenden 80er Jahre.

Dieses hieß damals Symbolrechnen und heute weiß ich, dass es dafür einen "richtigen" Namen gibt: Arithmogriph.

Nun habe ich es nicht geschafft, auf einem kleinen Display (160x128 oder auch 128x128 Pixel) Symbole so abzubilden, dass die noch gut erkenn- und unterscheidbar sind. Also habe ich kurzerhand die Symbole durch Farben ersetzt und ich habe das ganze nunc "coded color" genannt.

Nachdem das Spiel vor 4 Jahren gelaufen ist, hatte ich das weggelegt gehabt, weil ich irgendwie keine Lust darauf hatte, ein Menü für das Spiel zu programmieren (eben eine Fleißarbeit).

Nachdem ich dann eben doch ein Menü dazugetan habe, möchte ich Spiel hier eben posten, vllt. mag das ja jemand spielen und knobbeln (habe ich jetzt eine ganze Weile lang getan).

Um was geht es?

Der Controller erstellt eine Rechenaufgabe in der Form:

1
812 + 251 = 1063
2
 -     +      -
3
625 - 491 =  134
4
 =     =      =
5
----------------
6
187 + 742 =  929

Hierbei verschlüsselt er jede einzelne Ziffer durch eine andere Farbe. Eine Verschlüsselung mit Buchstaben (weil hier keine Farben dargestellt werden können) würde das dann so aussehen:

1
DFB + BHF = FCJA
2
 -     +      -
3
JBH - IGF =  FAI
4
 =     =      =
5
----------------
6
FDE + EIB =  GBG

Beim Spiel gilt es, eben jeder Farbe eine Ziffer zuzuordnen. Hierfür kann mit den Tasten rechts-links eine Farbe markiert werden und mit den Tasten hoch-runter eine Ziffer eingestellt werden.

Wird das Menü angewählt, so kann dieses mit einem schnellen Doppeldrücken der hoch-Taste dieses aktiviert werden. Ein Doppeldrücken entspricht hier also einer Enter/Return Eingabe.

Im Menü stehen folgende Optionen zur Auswahl:

  • Neu
  • Load
  • Save
  • Auswahl
  • Loesung
  • Zurueck

Insgesamt stehen 9999 Rätsel zur Verfügung. Mit dem Menüpunkt "Auswahl" kann ein bestimmtes Rätsel aufgerufen werden.


Im Archiv sind sämtliche Sourcecodes enthalten, um das Programm zu übersetzen (Linux) . Das Programm bedient sich der libopencm3 Bibliothek (die ebenfalls enthalten ist).

Packe das Archiv in ein Verzeichnis Deiner Wahl aus und wechsle in das dort in das Verzeichnis "game_codedcolor_release".

Ein einfacher Aufruf "make" übersetzt das Programm bei einem installierten arm-none-eabi-gcc.

Zum Flashen der Bluepill benötigt es einen ST-Link V2 Programmer. Dieser wird durch ein Hostprogramm < st-link > auf dem Linuxrechner gesteuert.

Ein "make flash" programmiert die Bluepill mit dem Rätselprogramm.

Sollte im System kein < st-link > installiert sein, findet man die Programmersoftware zu einem st-link unter:

https://github.com/stlink-org/stlink/


Demjenigen, der das nachbauen und spielen möchte: Viel Spaß dabei,

Ralph

Angehängte Dateien:
OP #7592194
Lesenswert?

Ach herjeh, ich habe einen Fehler gemacht beim Schreiben der Verschlüsselung. Die Verschlüsselung im obigen Text muß lauten:

1
    812 + 251 = 1063
2
     -     +      -
3
    625 - 491 =  134
4
    ----------------
5
    187 + 742 =  929
6

7
##################################
8

9
    ECA +  ABC = CDJI
10
     -      +      -
11
    JAB -  HGC =  CIH
12
    -----------------
13
    CEF +  FHA =  GAG
OP #7593170
Lesenswert?

Rick schrieb:

Nett, aber 2024 und der Font hat keine Umlaute? Mitte der 90er hätte ich das ja noch akzeptiert...

na ja, da der Font von mir händisch gemacht ist, dieser auch in Controllern mit wenig mit sehr wenig Speicher zum Einsatz kommt (und ich keine Lust darauf hatte den Zeichensatz zu erweitern), fehlen dem Font alle Zeichen > Ascii-Code 127 (und auch alle Zeichen < 32).

Wer das unbedingt machen mag, kann sich ja den Font um genau diese wenigen dt. Umlaute erweitern und an den Stellen einfügen an denen sie gebraucht werden... :-)

Im übrigen verwende ich in meinen Codes bis heute keine dt. Umlaute, damit das auch auf alten bis uralten Systemen noch sauber dargestellt wird.

In einem Controller UTF-8 zu verwenden finde ich persönlich etwas "übertrieben". Okay, ISO 8859-x würde ja auch gehen.

OP #7593177
Lesenswert?

... by the way: Man hätte ja auch noch monieren können, dass im Menü deutsch und englisch gemischt angezeigt wird. Statt "save" hätte ich speichern und statt "load" hätte ich laden schreiben können.

Der Code sollte so gut dokumentiert an den Stellen sein, damit das, wie 900ss schreibt, jeder selbst ändern kann!

#7595305
Lesenswert?

Ralph S. schrieb:

Im übrigen verwende ich in meinen Codes bis heute keine dt. Umlaute, damit das auch auf alten bis uralten Systemen noch sauber dargestellt wird.

Das wiederum ist ein nachvollziehbarer Grund.

Ich wollte deine Arbeit im übrigen keinesfalls schlechtreden. Mir fällt nur immer wieder auf, das man mit solchen Kleinigkeiten viel rausholen bzw. auch kaputtmachen kann.

(Bestes Beispiel: Ein Gebrauchtwagenhändler, der mir eine verdreckte Karre für 15k verkaufen wollte...)

Gast #7595310
Lesenswert?

Jasson J. schrieb:

Klingt mir eher wie: Hauptsache ich kann es schlecht machen.

Wenn ich mir die Lesenswert-Zähler über das Forum anschaue glaube ich fast, da sitzen Trolle mit ihrem Morgenkaffee und drücken fleißg den Minus-Button.

So ist es. Allerdings wird auch dort vieles automatisiert.

OP #7595995
Lesenswert?

Steve van de Grens schrieb:

dort vieles automatisiert.

:-) das wurde an anderen Stellen ja schon häufig diskutiert und das macht die "Lesenswert?" Eigentschaft der Seiten absolut unbrauchbar. Erstaunlich ist hier die "Geschwindigkeit" mit der ein Post eine -5 erreicht und ich bin noch mehr erstaunt dass der Post von Steve nur eine "-4" hat.

Für alle diejenigen deren Herz an der Bewertungsfunktion hängt: denkt euch einfach 5 negative Bewertungen weniger und dann passt das (vielleicht oder vielleicht auch nicht):

Kräht der Hahn früh morgens auf dem Mist, ändert sich das Wetter oder es bleibt wie es ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren