AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Allgemeines Problem in meinem Programm/ Threads!?
Thema durchsuchen
Ansicht
Themen-Optionen

Allgemeines Problem in meinem Programm/ Threads!?

Ein Thema von Simme · begonnen am 1. Mär 2010 · letzter Beitrag vom 25. Mär 2010
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Simme

Registriert seit: 8. Jan 2010
31 Beiträge
 
Delphi 7 Personal
 
#31

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 4. Mär 2010, 22:56
Zitat von Sir Rufo:
Ich verstehe gar nicht, warum du mit/zu jeder Bombe ein Image hast.
Wieso verstehst du das nicht? Ich hab ja nicht für jeden Bombenzustand ein Image. Sondern nur für jede Bombe. Dieses Image wird immer erzeugt, wenn man die entsprechende Taste zum Bombenlegen drückt. Und wenn die Bombe explodiert ist, soll dieses Image wieder gelöscht werden aus der Liste. So mein Gedankengang.

Zitat von Sir Rufo:
Eine Bombe hat 3 Zustände

0 - warten
1 - explodieren
2 - explodiert

Diese Zustände würde ich mir in einer Klasse TBombe merken.

Wenn du jetzt eine ImageList nimmst mit 3 Bildern jeweils eins für jeden Zustand,
dann nimmst du je nach Zustand aus der ImageList einfach das Bild raus.

Das macht die ganze Verwaltung wesentlich einfacher.
Ich finde, es macht die Verwaltung nicht einfacherer. Das ist ja auch nicht mein Problem. Es geht halt um die Images. Aber du hast wahrscheinlich einen anderen Denkansatz als ich...

Liebe Grüße,
Simon =)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#32

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 4. Mär 2010, 23:05
Also hast du das gleiche Image in jeder Klasse einmal drin und auf dem Formular zeigst du das auch noch mit an.

Ja, dann würde ich mir auch Gedanken über den Speicher machen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#33

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 4. Mär 2010, 23:08
Löscht du eventuell Bombenobjekte aus der Liste mit Hilfe einer Schleife?
Das könnte bei... unsachgemäßer Vorgehensweise nämlich das mit dem Listenindex erklären .. Ein herrlicher Fehler den glaube ich fast jeder schonmal gemacht hat.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#34

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 4. Mär 2010, 23:11
Zitat von wicht:
Löscht du eventuell Bombenobjekte aus der Liste mit Hilfe einer Schleife?
Das könnte bei... unsachgemäßer Vorgehensweise nämlich das mit dem Listenindex erklären .. Ein herrlicher Fehler den glaube ich fast jeder schonmal gemacht hat.
Ist aber auch nur ein Blick in die

Der SourceCode ist so geheim, dass wenn er den hier zeigen würde, er uns sofort alle erschießen müsste
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#35

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 4. Mär 2010, 23:15
Da hast du sowas von Recht. Aber ich würde fast drauf wetten, dass es so ist ...
Ich wollte sogar die Erklärung samt Lösungsansatz posten aber... weil es eben ist, erstmal abwarten ist wohl vernünftiger.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Simme

Registriert seit: 8. Jan 2010
31 Beiträge
 
Delphi 7 Personal
 
#36

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 5. Mär 2010, 15:24
Macht ihr mich grad dumm?

Das Problem ist, dass der Quelltext zum Bombezünden so komplex ist, dass ich das nicht alles mitposten will, vor allem auch, weil ich mich bestimmt dafür schämen müsste, weils sicher sehr viel einfacherer geht. Aber ich versuche, euch den ganzen Code verkürzt zu posten.

Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
var
  i, e: Integer;
  gesprengt, item : ARRAY[1..4] of Boolean;
  itemx, itemy : Array[1..4] of Integer;
  zeit, x_wert, y_wert, Start : Integer;
begin
  Label5.Caption := IntToStr(Bomben.Count);
  for i := 0 to Bomben.Count - 1 do //Alle Bomben die es gibt durchgehen
    begin
    {...}
    Spieler1.bombegelegt := Spieler1.bombegelegt - 1;
    If Spieler1.bombegelegt < 0 Then Spieler1.bombegelegt := 0;
    If Spieler1.bombegelegt < Spieler1.laufzahl_bombe Then Spieler1.zuendet := 0;
  end;
  Label1.Caption := IntToStr(Spieler1.bombegelegt);
  If (Spieler1.bombegelegt = 0) Then
    begin
      Bomben.Delete(i);
    end;
end;
Also, an sich lösche ich die Bomben erst aus der Liste, wenn sich keine Bombe mehr auf dem Spielfeld befindet. Denn die Variable bombegelegt sagt, wieviele Bomben sich auf dem Spielfeld noch befinden. Das Problem ist nur, dass das mit dem bombegelegt nicht mehr so funktioniert, wie ursprünglich geplant. Naja.

Zitat von wicht:
Löscht du eventuell Bombenobjekte aus der Liste mit Hilfe einer Schleife?
Das könnte bei... unsachgemäßer Vorgehensweise nämlich das mit dem Listenindex erklären .. Ein herrlicher Fehler den glaube ich fast jeder schonmal gemacht hat.
Ja, das mache ich, wie du siehst. Ich hab aber keine Ahnung, ob ich das unsachgemäß mache. Naja, sagt einfach mal bescheid. Wenn ihr noch mehr wollt, sagt bescheid.

Liebe Grüße,
Simon =)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#37

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 5. Mär 2010, 19:29
Keine Anhung was in {...} steht, aber da unten wird nichts in einer Schleife aus der Liste gelöscht.

Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
var
  i, e: Integer;
  gesprengt, item : ARRAY[1..4] of Boolean;
  itemx, itemy : Array[1..4] of Integer;
  zeit, x_wert, y_wert, Start : Integer;
begin
  Label5.Caption := IntToStr(Bomben.Count);
  for i := 0 to Bomben.Count - 1 do //Alle Bomben die es gibt durchgehen
  begin
    {...}
    Spieler1.bombegelegt := Spieler1.bombegelegt - 1;
    If Spieler1.bombegelegt < 0 Then Spieler1.bombegelegt := 0;
    If Spieler1.bombegelegt < Spieler1.laufzahl_bombe Then Spieler1.zuendet := 0;
  end;

  Label1.Caption := IntToStr(Spieler1.bombegelegt);
  If (Spieler1.bombegelegt = 0) Then
  begin
    Bomben.Delete(i);
  end;
end;
Du greifst einfach unten auf i zu. Ich habe mal gelesen, dass Schleifenvariablen nach der Schleife undefiniert sind oder sein können. Von daher wird dort vermutlich irgendetwas gelöscht, was es in der Liste gar nicht gibt, weil i so ziemlich alles sein kann.
Wenn du in der Schleife Objekte aus der Liste löschen würdest, solltest du die Schleife anders aufbauen. Weil sobald in der Schleife ein Objekt gelöscht wird, hat die Liste ein Element weniger. Die Schleife merkt davon allerdings nichts und geht bis zum alten Count - 1. Aber das Letzte Element in der Liste fehlt ja jetzt danke dem vorherigen Aufruf von Delete(), das führt auch zu einem Fehler. Lösung: Schleife umdrehen:

Delphi-Quellcode:
for i := Bomben.Count - 1 downto 0 do
begin
  Bomben.Delete(i);
end;
Gewöhn dich an den Debugger, damit wärst du da nämlich selbst drauf gekommen, dass du oben nicht in einer Schleife löscht. Ausserdem kann der Debugger Variablenwerte anzeigen - im Delete würdest du dann sehen, was i wirklich ist. Man kommt sehr oft in Situationen, wo das Ding mehr als nützlich ist..

HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Simme

Registriert seit: 8. Jan 2010
31 Beiträge
 
Delphi 7 Personal
 
#38

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 7. Mär 2010, 00:43
Das ist auch nicht der Fehler. An sich ist es logisch, was du gesagt hast. Aber der Fehler besteht weiterhin. Vielleicht hat es noch etwas zu tun mit der allgemeinen Schleife. Muss man da vielleicht auch runterzählen?

Liebe Grüße,
Simon
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#39

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 7. Mär 2010, 00:49
Wenn das da oben Dein Originalcode ist, sollte Delphi eigentlich eine Warnung ausgeben ("Variable ist nach Schleifendurchlauf undefiniert" oder so ähnlich). Was also heißt: die Schleife rückwärts durchlaufen wie gesagt und innerhalb prüfen, ob das Objekt gelöscht werden sol (und dies dann auch tun).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#40

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 7. Mär 2010, 01:01
Wieso die schleife rückwärts durchgehen?

Ist eine Möglichkeit ... aber ... da war doch noch der Compiler, der aus Rückwärts auch mal Vorwärts macht oder umgekehrt.

M.E. ist es so besser (da hat man es in der Hand - hoffe ich doch ):
Delphi-Quellcode:
var
  idx : integer;
begin
  idx := 0;
  while idx < Bomben.Count do
    begin
      if BombeMussGeloeschtWerden then
        Bomben.Delete( idx )
      else
        Inc( idx );
    end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 18:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz