So schwer ist das gar nicht und es gibt hunderte Möglichkeiten das umzusetzen.
Versuchs mal so:
Da du 2*4 Felder hast, reichen die X-Werte der Felder von 0 bis 1 und die Y-Werte der Felder von 0 bis 3.
Das Feld des roten Charakters ist also (0,0), das Feld des blauen Charakters ist (0,1), die bisher noch nicht freigeschalteten Charaktere sind auf (0-1,1-3).
Jetzt setzt du noch zwei Variablen für den Cursor, eine für den X-Wert und eine für den Y-Wert
Drückt der Spieler...
→ bzw. D ...wird der aktuelle X-Wert um eins erhöht ← bzw. A ...wird der aktuelle X-Wert um eins verringert ↓ bzw. S ...wird der aktuelle Y-Wert um eins erhöht ↑ bzw. W ...wird der aktuelle Y-Wert um eins verringert Space bzw. Enter ...wird der aktuell angewählte Charakter ausgewählt + entsprechendes visuelles/akustisches Feedback
Problem ist jetzt, dass der X- und Y-Wert aus unserem Korsett von X:0-1 und Y:0-3 ausbrechen kann (drückt der Spieler viermal → bzw. D erreicht der X-Wert des Cursors 4, aber wir haben ja nur zwei Spalten an Charakteren).
Ist aber einfach zu lösen, indem wir den X-Wert modulo 2 rechnen, da -1%2=1; 0%2=0; 1%2=1; 2%2=0...
Entsprechend rechnen wir den Y-Wert modulo 4, da: -1%4=3; 0%4=0; 1%4=1; 2%4=2; 3%4=3; 4%4=0...
Die Werte können also nicht mehr ausbrechen. Geht bestimmt schicker und ist super ghetto, ist aber gut genug™
Damit ist das ganze im Hintegrund umgesetzt, fehlt also nur noch die Anzeige!
Die X- und Y-Werte die wir da bisher haben eignen sich natürlich nochnichtsogut zum Bilder einblenden, weil sie noch keine praktisch verwertbaren Koordinaten darstellen.
Halb so schlimm, Bilder renderst du einfach an folgenden Koordinaten:
X=Außenabstand des Menüs zum linken Bildschirmrand in Pixeln + X-Wert*(Iconbreite in Pixeln + gewünschter Abstand zwischen den Icons in Pixeln)
Y=Außenabstand des Menüs zum oberen Bildschrimrand in Pixeln + Y-Wert*(Iconhöhe in Pixeln + gewünschter Abstand zwischen den Icons in Pixeln)
Mein Beispiel geht davon aus, dass die Engine die du verwendest den Nullpunkt der Koordinaten in der oberen, linken Ecke setzt und die Position der Bilder ebenfalls anhand ihrer oberen, linken Ecke bestimmt wird. Bei anderen Standards musst du wahrscheinlich ein wenig umschreiben. Außerdem habe ich das Ganze nicht getestet, sollte aber etwa so funktionieren.