Autor Beitrag
Stocki1990
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 01.11.09 19:42 
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:

ausblenden 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.

ausblenden 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);

//Unit1.Farbe := stringtocolor(edit_spielerfarbe.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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 618
Erhaltene Danke: 368

W7
Delphi 6 pro
BeitragVerfasst: Di 10.11.09 11:40 
Moin Stocki1990,

vielleicht hilft dies weiter www.delphi-forum.de/...+gegen+PC_78263.html

Gruß
Fiete

_________________
Fietes Gesetz: use your brain (THINK)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 user profile iconjaenicke 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure SpielfeldUpDate(Startposition_left,Startposition_top: Integer 
                                               {... weitere Prozedurvariablen});  
begin
  //bestehendes Spielfeld an Hand der übergebenen Parameter anpassen
  Feld[Z,F].left:= Startposition_left ...
  //etc.
end;


Diese Prozedur dann über den Button aufrufen und die Parammeter in den Prozedurvariablen direkt übergeben.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm2.Button1Click(Sender: TObject);
begin
  SpielfeldUpDate(strtoint(edit_abstandlinks.text),
                  strtoint(edit_abstandoben.text),
                  {... weitere Parameter}  );
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 11.11.09 00:37 
user profile iconLannes hat folgendes geschrieben Zum zitierten Posting springen:
Denke das user profile iconjaenicke 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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