Thema: Delphi Programm stoppt

Einzelnen Beitrag anzeigen

Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.690 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Programm stoppt

  Alt 1. Apr 2020, 15:08
Keine Idee ob das das Problem löst, aber in der Timer-Prozedur fehlt das "labelmove(Label2);" das analog für alle anderen Labels vorhanden ist.

Bist du bereit was zu lernen und für Vorschläge wie man "sauberer" programmiert offen?
Dein Code würde kürzer und übersichtlicher werden und solche Fehler würden schneller auffallen.

Beispiel:
Diesen Block verwendest du (nur mit einem anderen Label) immer wieder im der Timer-Prozedur:
Delphi-Quellcode:
 
  begin
    Label1.Left:=labelspace;
    Label1.Font.Color:=clblack;
    punktetemporär:=punktetemporär + 10;
    Label16.Caption:=' ' + inttostr(punktetemporär);
    zufallslabel:=random(14)+1;
  end;
das könnte man in eine Prozedur auslagern und muss dass nicht immer wiederholen:

Delphi-Quellcode:
 
  procedure ResetLabelAndIncreasePoints(labe:TLabel)
  begin
    Labe.Left:=labelspace;
    Labe.Font.Color:=clblack;
    punktetemporär:=punktetemporär + 10;
    Label16.Caption:=' ' + inttostr(punktetemporär);
    zufallslabel:=random(14)+1;
  end;
und in der TimerProzedur stünde z.B.:
Delphi-Quellcode:
//...
if zufallslabel=1 then
    begin
    labelmove(Label1);
    if ((((Label1.Left <= imagespace) and (Label1.Left >= (imagespace-32)))) and
       ((Image1.Top=imagetop+(50*8)) or (Image1.Top=imagetop+(50*7)))) then
     begin
     ResetLabelAndIncreasePoints(label1)
     end;
    end;
Nur als erster Ansatz einer Verbesserung.
Noch einfacher würde es im nächsten Schritt, wenn du alle Labels in einer Liste oder einem Array speicherst (bei Programmstart) und dann kannst du über einen Index auf ein Label zugreifen und die TimerProzedur sähe nur noch so aus:

Delphi-Quellcode:
//...
zufallszahl:=random(14)+1; //eigentl. auch neue Prozedur ala GenerateNextZufallszahl
//...
zufallslabel:=TLabel(ListeMitLabels[zufallszahl]);
if movelabel(zufallslabel) then //movelabel wird Funktion die True zurückgibt wenn Spielende noch nicht erreicht
  begin
  if SeltsameBedingungErfüllt then
    begin
    ResetLabel;
    IncreasePoints;
    DisplayPoints;
    zufallszahl:=random(14)+1;
    end;
  end
else
  begin
  SendGameOverMessage;
  ResetGame;
  end;
Sorry für das Denglisch
Ralph

Geändert von Jumpy ( 1. Apr 2020 um 15:13 Uhr)
  Mit Zitat antworten Zitat