Einzelnen Beitrag anzeigen

ka8578

Registriert seit: 15. Okt 2020
1 Beiträge
 
Delphi 10.3 Rio
 
#1

Problem mit Schleifen/Array/??? - Brettspiel Mastermind

  Alt 15. Okt 2020, 18:27
Hallo liebes Forum,

ich bin neu hier, (fachfremd) in Informatik unterrichtender Lehrer und bastele gerade an einem Projekt für meinen Wahlpflichtkurs im Jahrgang 10. Ich möchte das Brettspiel "Mastermind" als Smartphone-App umsetzen und stecke nun seit zwei Tagen fest. Leider weiß ich nicht mal, welche die passende Überschrift für mein Problem ist (siehe Titel). Sorry, hier jedenfalls die Infos ...

Ziel d. Spiels:
Das Programm generiert fünf Zufallsfarben, der Spieler muss sie mit möglichst wenigen Versuchen erraten. Er erhält nach jedem Versuch eine Rückmeldung, wie viele richtige Farben er hatte etc. Einen Screenshot des (noch im Rohbau befindlichen) Layouts habe ich angehängt.


Mein Problem:
Ich nutze zur Darstellung 60 TRectangles (12 Reihen mit je 5 Stück), welche dann mit einer Farbe befüllt werden. Ich wollte es vermeiden, 60 Zeilen Code nach dem Schema
Delphi-Quellcode:
Form1.Rec1_1.Fill.Color := TAlphaColorRec.Blue;
Form1.Rec1_2.Fill.Color := ...
...
Form1.Rec12_5.Fill.Color := ... ;
zu schreiben. Ich habe mir gedacht, dass das auch einfacher und effektiver gehen muss und es mit einer for-Schleife (und Arrays) nach folgendem (erstmal vereinfachten) Schema probiert:
Delphi-Quellcode:
...
// Array-Deklaration:
  rechteckenamen: array[1..5] of String;
  rechtecke: array[1..5] of TRectangle;
...
// Befüllen des 1. Arrays (Namen d. Rectangle zunächst als string):
  for I := 1 to 5 do
    rechteckenamen[I] := 'Form1.Rec1_'+inttostr(I) ;

// zum Testen die Namen auf nem Label anzeigen (ja, es klappt!)
  Form1.LbTest.Text := string(rechteckenamen[1])+#13#10 +
    string(rechteckenamen[2])+#13#10 +
    string(rechteckenamen[3])+#13#10 +
    string(rechteckenamen[4])+#13#10 +
    string(rechteckenamen[5])+#13#10 ;

// Befüllen d. 2. Arrays (Umwandlung von string nach TRectangle)
  for J := 1 to 5 do
    rechtecke[J] := TRectangle(rechteckenamen[J]) ;

// wieder Testen (ja, es klappt)
  Form1.LbTest2.Text := string(rechtecke[1])+#13#10 +
    string(rechtecke[2])+#13#10 +
    string(rechtecke[3])+#13#10 +
    string(rechtecke[4])+#13#10 +
    string(rechtecke[5])+#13#10 ;
Soweit funktioniert alles. Sobald ich aber versuche, die im 2. Array gespeicherten und korrekt benannten Rechtecke mit einer Farbe zu versehen (und z.B. die folgende Code-Zeile hinzufüge) ...
  rechtecke[1].Fill.Color := TAlphaColorRec.Blue; ... dann bekomme ich von RAD Studio zwar keine Fehler angezeigt, aber beim Ausführen des Programms (und Klick auf den entsprechenden Button) eine Fehlermeldung "Zugriffsverletzung bei Adresse ... in Modul ..." (siehe Anhang) angezeigt.

Ich bin hier irgendwie mit meinem Latein (bzw. meinen bescheidenen Programmierkenntnissen) am Ende und wäre daher sehr dankbar über ein paar Tipps ...
  • ... wo oben mein Fehler liegt,
  • ... bzw. ob ich komplett auf dem Holzweg bin und mein Vorhaben so wie beschrieben gar nicht realisierbar ist,
  • ... oder es sowieso ganz anders viel besser/einfacher ginge.
Ich hoffe, ich habe nichts Wichtiges vergessen.
Vielen Dank schonmal und viele Grüße

Christoph

PS.: Ich habe diesen Post nach bestem Wissen und Gewissen erstellt. Auch die hier im Forum zu findenden Beiträge zum Brettspiel Mastermind haben mir bei meinem Problem leider nicht weitergeholfen.
Miniaturansicht angehängter Grafiken
screenshot-mastermind.png   screenshot-mastermind-fehler.png  
  Mit Zitat antworten Zitat