|
Registriert seit: 7. Aug 2008 Ort: Brandenburg 1.487 Beiträge Delphi 12 Athens |
#37
![]() Sorry, war das zu viel?
Dein Projekt ist extrem unübersichtlich, da alles in einer großen Methode steht. Niemand will sich so etwas gern anschaun. Du solltest mit Unterfunktionen mit Parametern und Rückgabewerten arbeiten. Jede Unterfunktion erfüllt dabei genau eine Aufgabe. Der Namen der Funktion kann die Aufgabe beschreiben. Beipiel:
Delphi-Quellcode:
Das ist doch übersichtlicher und verständlicher als im Vergleich dein Konstrukt und das kommt auch gleich mehrmals vor:
function TForm2.GetFeldImage(x, y: Integer): TImage;
begin Result := TImage(FindComponent('Feld' + IntToStr(y) + '_' + IntToStr(x))); end; function TForm2.SpielerFeldKollision(Spieler: TImage; Feld: TImage): Boolean; begin Result := PtInRect(Feld.BoundsRect, Spieler.p1) or PtInRect(Feld.BoundsRect, Spieler.p2) or PtInRect(Feld.BoundsRect, Spieler.p3) or PtInRect(Feld.BoundsRect, Spieler.p4) or end; procedure TForm2.SpielerSieg(Spieler: TImage); var sMsg: string; begin if Spieler = Spieler1 then sMsg := Form1.name2 + ' ist tot! ' + Form1.name1 + ' hat gewonnen!' else sMsg := Form1.name1 + ' ist tot! ' + Form1.name2 + ' hat gewonnen!'; ShowMessage(sMsg); Form1.Visible := True; Form1.Panel3.Visible := True; tot := True; Form2.Close; end; procedure TForm2.Timer1Timer(Sender: TObject); var FeldImage: TImage; {...} FeldImage := GetFeldImage(x_wert + zaehler, y_wert); FeldImage.Picture.LoadFromFile('Bilder&Animationen\rot.bmp'); if SpielerFeldKollision(Spieler1, FeldImage) then begin SpielerSieg(Spieler2); BREAK; end; if SpielerFeldKollision(Spieler2, FeldImage) then begin SpielerSieg(Spieler1); BREAK; end;
Delphi-Quellcode:
Dein eigentliches Problem ist aber, daß die OnTimer Methode im ProzessMessage rekursiv aufgerufen wird.
TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Picture.LoadFromFile('Bilder&Animationen\rot.bmp');
If (((Spieler1.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler1.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler1.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler1.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top)) Or ((Spieler1.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler1.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler1.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler1.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top)) Or ((Spieler1.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler1.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler1.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler1.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top)) Or ((Spieler1.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler1.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler1.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler1.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))) Then begin ShowMessage(Form1.name1 + ' ist tot! ' + Form1.name2 + ' hat gewonnen!'); Form1.Visible := True; Form1.Panel3.Visible := True; tot := True; Form2.Close; BREAK; end; If (((Spieler2.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler2.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler2.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler2.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top)) Or ((Spieler2.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler2.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler2.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler2.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top)) Or ((Spieler2.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler2.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler2.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler2.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top)) Or ((Spieler2.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Width) And (Spieler2.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Left) And (Spieler2.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Height) And (Spieler2.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Top))) Then begin ShowMessage(Form1.name2 + ' ist tot! ' + Form1.name1 + ' hat gewonnen!'); Form1.Visible := True; Form1.Panel3.Visible := True; tot := True; Form2.Close; BREAK; end; Das könnte verhindert werden, z.B. in dem der Timer wärend der Verarbeitung angehalten wird.
Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin Timer1.Enabled := False; try finally Timer1.Enabled := True; end; end; |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |