Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - "Prozedur überschreiben" ---> Wie geht das?
Stocki1990 - So 01.11.09 19:42
Titel: "Prozedur überschreiben" ---> Wie geht das?
Servus Leute!
Ich bin gerade dabei, meine Hausübung in Software Engineering zu machen. Nachdem ich das Problem mit den INI-Files durch das Forum gelöst worden ist (danke nochmals), tritt schon das nächste Problem auf:
Da wir gerade das Spiel "Schiffe versenken" nachprogrammieren sollen, habe ich eine Prozedur entworfen, welche das Spielfeld beim Start des Programmes auf die Spielfläche "zeichnet". Hier der Code der Prozedur:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Spielfelderstellen(); var S,Z,F: integer; begin Z:= 1; F:= 1; for Z := 1 to Zeilen do begin
for S := 1 to Spalten do begin Feld[Z,F]:= TShape.Create(self); Feld[Z,F].parent := form1; Feld[Z,F].width:= Breite; Feld[Z,F].height:= hoehe; Feld[Z,F].left:= startposition_left + (Breite + Abstand_hor)*S; Feld[Z,F].top:= startposition_top + (Hoehe + Abstand_ver)*Z; Feld[Z,F].onmouseup := fillshape;
end; end; end; |
Wenn ich auf die Unit2 wechsle, kann ich hier die Daten des Spielbretts bestimmen. Dies funktioniert auch, jedoch wird mir zum 1ten Spielbrett (bleibt unverändert) ein 2tes Spielbrett hinzugefügt, dass die gewünschten Maße hat.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm2.Button1Click(Sender: TObject); begin
Unit1.Startposition_left := strtoint(edit_abstandlinks.text); Unit1.Startposition_top := strtoint(edit_abstandoben.text);
Unit1.Zeilen := strtoint(edit_anzahlzeilen.text); Unit1.Spalten := strtoint(edit_anzahlspalten.text);
Unit1.Hoehe := strtoint(edit_hoehezelle.text); Unit1.Breite := strtoint(edit_breitezelle.text);
form2.close;
form1.Spielfelderstellen; end; |
Daher stellt sich nun die Frage, ob man die 1te Prozedur mittels Befehl irgendwie "überschreiben" kann, sodass nur 1 Spielbrett mit den aktualisierten Daten angezeigt wird.
Da ich leider keine Ahnung habe, wie man dies macht, habe ich mir gedacht, dass ich mal die Experten frage :)
Ich hoffe, dass ihr mir hierbei helfen könnt.
Grüße aus Salzburg
Christoph
PS: Wünsche euch noch ein schönes Allerheiligen
jaenicke - So 01.11.09 20:05
Nun ja, was willst du denn beim zweiten Mal machen?
Das Spielfeld erstellen? Warum? Es ist doch schon da...
Eigentlich musst du doch nur die Parameter entsprechend ändern. :idea:
Du hast die Shapes doch in einem Array, das heißt du kannst einfach darauf zugreifen und diese ändern.
Stocki1990 - Di 10.11.09 08:50
Servus Leute!
Danke für die Antwort. Leider weiß ich nicht so wirklich, wie man
dies auch in den Programmcode hineinschreibt *schämen tu*
Könnte es mir jemand vl. anhand eines Beispieles erläutern ???
Danke im Voraus :)
Christoph
Lannes - Di 10.11.09 12:36
Hallo,
ich würde ein "Schiffe versenken" auch mit DrawGrids realisieren, ist einfacher als mit TShapes.
Aber zurück zum Thema "procedur überschreiben".
Man muss eine Prozedur nicht überschreiben, denn man kann die Prozedur durch entsprechende Parameter(übergeben in den Prozedurvariablen) beeinflussen. Denke das
jaenicke das gemeint hat.
In der Prozedur Spielfelderstellen werden die gleichen Parameter genutzt die auch in Button1Click gesetzt werden. Du könntest die Prozedur Spielfelderstellen anpassen, so das -wenn das Spielfeld schon angelegt wurde-, nur das Spielfeld aktualisiert wird.
Besser ist es eine weitere Prozedur zur Veränderung des Spielfelds anzulegen der die neuen Parameter direkt übergeben werden, z.B SpielfeldUpdate.
ein grobes Beispiel, etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure SpielfeldUpDate(Startposition_left,Startposition_top: Integer ); begin Feld[Z,F].left:= Startposition_left ... end; |
Diese Prozedur dann über den Button aufrufen und die Parammeter in den Prozedurvariablen direkt übergeben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm2.Button1Click(Sender: TObject); begin SpielfeldUpDate(strtoint(edit_abstandlinks.text), strtoint(edit_abstandoben.text), ); end; |
jaenicke - Mi 11.11.09 00:37
Lannes hat folgendes geschrieben : |
Denke das jaenicke das gemeint hat. |
Ich meinte dort die Eigenschaften (Position, ...) der Shapes mit den zu ändernden Parametern. ;-)
Aber das ist ja auch das was du im Beispiel dann auch machst.
Stocki1990 - Mi 11.11.09 10:42
Servus Leute!
Danke für eure zahlreichen Antworten. Ich glaube, dass ich nun verstanden
habe, wie das Ganze geht :)
Ohne zu zögern kann ich sagen, dass ihr die Besten seid ;)
Wünsche euch noch einen schönen Tag
Christoph
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!