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
Antwort Antwort
Jumpy

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

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
Fallenzer

Registriert seit: 3. Aug 2019
Ort: Wernigerode, Sachsen-Anhalt, DE
29 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Programm stoppt

  Alt 2. Apr 2020, 10:10
Genauere Daten zum if-then-Befehl:

Wenn das Label an einer bestimmten Position und das Image ebenfalls auf der MÖGLICHEN Höhe (daher auch die vielen [or]s) ist, erfolgt eine Punkthochzählung und die Generierung einer neuen Zufallszahl für die Auswahl eines neuen Labels...

Übrigens: den einen Tipp mit dem Kürzen durch eine Prozedur habe ich erfolgreich angewendet. Danke für alle Ratschläge...

...aber dennoch ist mein Problem immer noch nicht gelöst: Ich schicke euch nun eine Bildschirmaufnahme, damit ihr wisst, was für ein Problem ich genau meine....
Angehängte Dateien
Dateityp: zip Bildschirmaufnahm.zip (1,15 MB, 16x aufgerufen)
Danilo Bleul (existiert seit 2005)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.357 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Programm stoppt

  Alt 2. Apr 2020, 18:48
Mal eine grundsätzliche Frage: Nutzt Du Haltepunkte, überwachte Ausdrücke und Debugging (schrittweise Programmausführung).

Wenn nicht, schau Dir das mal genauer an.

Du kannst auch "OutputDegugString()" verwenden, um irgendwelche Zwischenwerte oder Abläufe in der Konsole nachzuvollziehen.

Der Anfang ist halt mühsam und man muss erst mal einen Angriffspunkt finden (wie beim Tapete ablösen ).
Aber wenn Du Interesse hast, dann wird das schon...


Deine Frage ist hier derzeit etwas unkonkret.
Wenn Du genauere Fragen enger umreißen kannst, wirst Du auch mehr Hilfe bekommen.
Lass Dich nicht entmutigen, wenn es anfangs etwas holprig läuft.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: Programm stoppt

  Alt 2. Apr 2020, 22:51
Der Fehler wäre meiner Meinung nach fast sofort ersichtlich, wenn das Programm mit dem KLEINEN grünen Dreieck (mit Debugger, "Start F9" steht da im Hint) ausgeführt würde statt mit dem großen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:33 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