AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm stoppt

Ein Thema von Fallenzer · begonnen am 1. Apr 2020 · letzter Beitrag vom 2. Apr 2020
 
Jumpy

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

AW: Programm stoppt

  Alt 1. Apr 2020, 14: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 14:13 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz