![]() |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Also, alle eure Vorschläge bringen nichts.
Mal eine Frage: Habt ihr schon mal probiert, eine Solche Objektliste mittels des Count-Wertes zu löschen? Das funktioniert so nicht. Ich hab mehrere Sachen ausprobiert. Alles führt zum Scheitern. Immer wieder kommt die Fehlermeldung. Könnte man nicht einfach alle Bilder löschen (mit Image.Destroy oder so) und dann Objektliste.Clear machen? Liebe Grüße, Simon =) |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Zitat:
![]() |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Debugge die Schleife und guck dir bei jedem Durchlauf den Index an, der gelöscht werden soll.
Delphi-Quellcode:
Und wenn du den Wert von idx siehst, dann vergleichst du ihn mal mit Bomben.Count. Das was Sir Rufo gepostet hat sieht okay aus und die Rückwärtsschleife benutze ich immer, funktioniert auch. Was meinst du im vorletzten Post mit "allgemeinen Schleife"? Wenn du zwei Schleifen über die selbe Liste hast und in der inneren Schleife Elemente löscht könnte das auch Essig sein.
Bomben.Delete(idx) // Hier Breakpoint drauf setzen
Wenn du dich nicht mit dem Debugger auseinandersetzt oder den Quelltext postest wird es kompliziert dir zu helfen, jedenfalls was mich betrifft. Ansonsten, das Beispiel von Sir Rufo was er gerade nochmal erwähnte funktioniert einfach nur. Und "ist zu hoch für mich" bringt da nichts, versuche das zu verstehen und frage doch gegebenenfalls nochmal nach, wenn du etwas bestimmtes nicht verstehst. Weil genau das, was in dem Beispiel ist, willst du haben. |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Zitat:
Zitat:
Zitat:
Zitat:
Ich habe jetzt versucht, das ganze auf mein Programm zu übertragen. Dabei ist rausgekommen, dass, wenn er einmal in der While-Do-Schleife drin ist, da nie wieder rauskommt. Meine Fragen zu Sir Rufos Programm: Bei dir ändert sich der Index nicht. Wie kommt er da wieder aus der Schleife raus? Dadurch, dass sich Objektliste.Count ändert? Bei mir zumindest scheint das irgendwie nicht zu funktionieren. Eine weitere Frage: Was bewirkt das Inc(Index)? Das hab ich noch nie gesehen und ich habe keine Ahnung, was das bewirkt. So. Und damit ihr auf eure Kosten kommt und mir dadurch vielleicht weiterhelfen könnt, hier der gesamte Quelltext im Timer:
Delphi-Quellcode:
Sicherlich könnte man das in 20 zeilen schreiben, nur weiß ich nicht, wie. Sagt einfach mal was dazu. Dass es einfacherer geht, ist eindeutig...
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, explosion : Integer; loesche : Boolean; begin Label5.Caption := IntToStr(Bomben.Count); i := 0; While i < Bomben.Count do //Alle Bomben die es gibt durchgehen begin Application.ProcessMessages; explosion := TBombe(Bomben[i]).ExplodierZeit; if (GetTickCount > explosion) Then//Zeit erreicht? begin //Boom, Bombe ist hochgegangen explosion := GetTickCount + 10000; For zeile := 1 To 11 Do For spalte := 1 To 11 Do begin links := (spalte - 1) * 65; oben := (zeile - 1) * 65; If ((links <= TBombe(Bomben[i]).Mitte.X) And (links + breite >= TBombe(Bomben[i]).Mitte.X) And (oben <= TBombe(Bomben[i]).Mitte.Y) And (oben + hoehe >= TBombe(Bomben[i]).Mitte.Y)) Then begin x_wert := spalte; y_wert := zeile; BREAK; end; end; Label4.Caption := 'Ich bin durch!'; TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert))).Stretch := False; TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert))).Proportional := False; For zaehler := 1 To 4 Do gesprengt[zaehler] := False; For zaehler := 1 To Spieler1.reichweite Do begin If (x_wert + zaehler > 0) And (x_wert + zaehler < 12) Then begin If mauer[y_wert, x_wert + zaehler] = 6 Then gesprengt[1] := True; If (gesprengt[1] = False) Then begin If ((mauer[y_wert,x_wert + zaehler] = 1) Or (mauer[y_wert,x_wert + zaehler] = 2) Or (mauer[y_wert,x_wert + zaehler] = 3) Or (mauer[y_wert,x_wert + zaehler] = 4)) Then gesprengt[1] := True; Case mauer[y_wert, x_wert + zaehler] of 1: begin item[1] := True; itemx[1] := x_wert + zaehler; itemy[1] := y_wert; end; 2: begin item[2] := True; itemx[2] := x_wert + zaehler; itemy[2] := y_wert; end; 3: begin item[3] := True; itemx[3] := x_wert + zaehler; itemy[3] := y_wert; end; 4: begin item[4] := True; itemx[4] := x_wert + zaehler; itemy[4] := y_wert; end; end; //If ((mauer[y_wert,x_wert + zaehler] = 0) Or (mauer[y_wert,x_wert + zaehler] = 5)) Then addon[y_wert,x_wert + zaehler] := 0; mauer[y_wert,x_wert + zaehler] := 0; 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; end; end; If (y_wert + zaehler > 0) And (y_wert + zaehler < 12) Then begin If mauer[y_wert + zaehler, x_wert ] = 6 Then gesprengt[2] := True; If gesprengt[2] = False Then begin If ((mauer[y_wert + zaehler,x_wert] = 1) Or (mauer[y_wert + zaehler,x_wert] = 2) Or (mauer[y_wert + zaehler,x_wert] = 3) Or (mauer[y_wert + zaehler,x_wert] = 4)) Then gesprengt[2] := True; Case mauer[y_wert + zaehler,x_wert] of 1: begin item[1] := True; itemx[1] := x_wert; itemy[1] := y_wert + zaehler; end; 2: begin item[2] := True; itemx[2] := x_wert; itemy[2] := y_wert + zaehler; end; 3: begin item[3] := True; itemx[3] := x_wert; itemy[3] := y_wert + zaehler; end; 4: begin item[4] := True; itemx[4] := x_wert; itemy[4] := y_wert + zaehler; end; end; //If ((mauer[y_wert + zaehler, x_wert] = 0) Or (mauer[y_wert + zaehler, x_wert] = 5)) Then addon[y_wert + zaehler, x_wert] := 0; mauer[y_wert + zaehler, x_wert] := 0; TImage(FindComponent('Feld' + IntToStr(y_wert + zaehler) + '_' + IntToStr(x_wert))).Picture.LoadFromFile('Bilder&Animationen\rot.bmp'); If (((Spieler1.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler1.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler1.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler1.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).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+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler2.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler2.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler2.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).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; end; end; Spieler1.BringToFront; end; For zaehler := 1 DownTo -Spieler1.reichweite Do begin If (x_wert + zaehler > 0) And (x_wert + zaehler < 12) Then begin If mauer[y_wert, x_wert + zaehler] = 6 Then gesprengt[3] := True; If (gesprengt[3] = False) Then begin If ((mauer[y_wert,x_wert + zaehler] = 1) Or (mauer[y_wert,x_wert + zaehler] = 2) Or (mauer[y_wert,x_wert + zaehler] = 3) Or (mauer[y_wert,x_wert + zaehler] = 4)) Then gesprengt[3] := True; Case mauer[y_wert, x_wert + zaehler] of 1: begin item[1] := True; itemx[1] := x_wert + zaehler; itemy[1] := y_wert; end; 2: begin item[2] := True; itemx[2] := x_wert + zaehler; itemy[2] := y_wert; end; 3: begin item[3] := True; itemx[3] := x_wert + zaehler; itemy[3] := y_wert; end; 4: begin item[4] := True; itemx[4] := x_wert + zaehler; itemy[4] := y_wert; end; end; //If ((mauer[y_wert,x_wert + zaehler] = 0) Or (mauer[y_wert,x_wert + zaehler] = 5)) Then addon[y_wert,x_wert + zaehler] := 0; mauer[y_wert,x_wert + zaehler] := 0; 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; end; end; If (y_wert + zaehler > 0) And (y_wert + zaehler < 12) Then begin If mauer[y_wert + zaehler, x_wert ] = 6 Then gesprengt[4] := True; If gesprengt[4] = False Then begin If ((mauer[y_wert + zaehler,x_wert] = 1) Or (mauer[y_wert + zaehler,x_wert] = 2) Or (mauer[y_wert + zaehler,x_wert] = 3) Or (mauer[y_wert + zaehler,x_wert] = 4)) Then gesprengt[4] := True; Case mauer[y_wert + zaehler,x_wert] of 1: begin item[1] := True; itemx[1] := x_wert; itemy[1] := y_wert + zaehler; end; 2: begin item[2] := True; itemx[2] := x_wert; itemy[2] := y_wert + zaehler; end; 3: begin item[3] := True; itemx[3] := x_wert; itemy[3] := y_wert + zaehler; end; 4: begin item[4] := True; itemx[4] := x_wert; itemy[4] := y_wert + zaehler; end; end; //If ((mauer[y_wert + zaehler, x_wert] = 0) Or (mauer[y_wert + zaehler, x_wert] = 5)) Then addon[y_wert + zaehler, x_wert] := 0; mauer[y_wert + zaehler, x_wert] := 0; TImage(FindComponent('Feld' + IntToStr(y_wert + zaehler) + '_' + IntToStr(x_wert))).Picture.LoadFromFile('Bilder&Animationen\rot.bmp'); If (((Spieler1.p1.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler1.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler1.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler1.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler1.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler1.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler1.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).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+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p1.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p1.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p1.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler2.p2.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p2.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p2.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p2.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler2.p3.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p3.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p3.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p3.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top)) Or ((Spieler2.p4.X < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Width) And (Spieler2.p4.X >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Left) And (Spieler2.p4.Y < TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Top + TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).Height) And (Spieler2.p4.Y >= TImage(FindComponent('Feld' + IntToStr(y_wert+ zaehler) + '_' + IntToStr(x_wert))).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; end; end; Spieler1.BringToFront; end; //Bomben.Delete(i); //TBombe(Bomben[i]).Explosion.Play; SndPlaySound('explosion.wav', SND_ASYNC); TBombe(Bomben[i]).Visible := False; Delay(1000); TBombe(Bomben[i]).Fertig := True; //TBombe(Bomben[i]).Explosion.Close; For zaehler := -Spieler1.reichweite To Spieler1.reichweite Do begin If (x_wert + zaehler > 0) And (x_wert + zaehler < 12) And (mauer[y_wert,x_wert + zaehler] = 0) Then TImage(FindComponent('Feld' + IntToStr(y_wert) + '_' + IntToStr(x_wert + zaehler))).Picture.LoadFromFile('Bilder&Animationen\weiß.bmp'); If (y_wert + zaehler > 0) And (y_wert + zaehler < 12) And (mauer[y_wert + zaehler, x_wert] = 0) Then TImage(FindComponent('Feld' + IntToStr(y_wert + zaehler) + '_' + IntToStr(x_wert))).Picture.LoadFromFile('Bilder&Animationen\weiß.bmp'); Spieler1.BringToFront; end; If item[4] = True Then begin TImage(FindComponent('Feld' + IntToStr(itemy[4]) + '_' + IntToStr(itemx[4]))).Picture.LoadFromFile('Bilder&Animationen\Bombe_neu.jpg'); TImage(FindComponent('Feld' + IntToStr(itemy[4]) + '_' + IntToStr(itemx[4]))).Stretch := True; end; If item[2] = True Then begin TImage(FindComponent('Feld' + IntToStr(itemy[2]) + '_' + IntToStr(itemx[2]))).Picture.LoadFromFile('Bilder&Animationen\Schnell.bmp'); TImage(FindComponent('Feld' + IntToStr(itemy[2]) + '_' + IntToStr(itemx[2]))).Stretch := True; end; If item[3] = True Then begin TImage(FindComponent('Feld' + IntToStr(itemy[3]) + '_' + IntToStr(itemx[3]))).Picture.LoadFromFile('Bilder&Animationen\Knall.jpg'); TImage(FindComponent('Feld' + IntToStr(itemy[3]) + '_' + IntToStr(itemx[3]))).Stretch := True; end; Label3.Caption := 'Vorbei!'; Label4.Caption := ''; //TBombe(Bomben[i]).Fertig := True; //zahl := i; //ja := True; Spieler1.bombegelegt := Spieler1.bombegelegt - 1; If Spieler1.bombegelegt < 0 Then Spieler1.bombegelegt := 0; If Spieler1.bombegelegt < Spieler1.laufzahl_bombe Then Spieler1.zuendet := 0; If Spieler1.bombegelegt = 0 Then zeit := Bomben.Count - 1; If ((GetTickCount - TBombe(Bomben[i]).ExplodierZeit >= 4000) And (TBombe(Bomben[i]).Fertig = True)) Then begin TBombe(Bomben[i]).Fertig := False; Bomben.Delete(i); end Else Inc(i); //Bomben.Delete(i); {If (Spieler1.bombegelegt = 0) Then For e := zeit DownTo 0 Do begin Try Bomben.Delete(e); Except end; end;} end; end; Label1.Caption := IntToStr(Spieler1.bombegelegt); end; Liebe Grüße, Simon |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Sorry, war das zu viel?
|
Re: Allgemeines Problem in meinem Programm/ Threads!?
Hi!
Zu viel nicht, aber doch viel und ich für meinen Teil habe es dann aufgeschoben. Ich bin immer noch willig zu helfen :-D , aber das kann ich erst im Laufe des Wochenendes machen. Oder wenn das glorreiche Unternehmen mir endlich mal ein paar von den 38 Urlaubstagen, die ich noch habe, gibt... Ich versuche heute Abend oder Morgen mal etwas zusammenzuschreiben. Das könnte dann allerdings auch ein langer Text werden :mrgreen: Bis dann! |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Zitat:
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; |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Danke an alle, die mir geholfen haben. Ich werde dieses Thema jetzt erstmal als beantwortet und gelöst markieren, weil mein allgemeines Problem im Allgemeinen gelöst ist.
Ich habe den letzten Beitrag von Blup nicht so richtig verstanden. Aber das ist in Ordnung, trotzdem danke. Liebe Grüße, Simon =) |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Liste der Anhänge anzeigen (Anzahl: 1)
Da du so lange nicht reagiert hast, dachte ich schon, du hast dein Projekt aufgegeben.
Wenn etwas unverständlich ist, frag einfach nach. Zur Entspannung hab ich noch ein bischen an deinem Code rumgefeilt. Vieleicht kannst du ja noch ein par Anregungen entnehmen. Insbesondere ist mir noch ein Problem bei Explosionen die sich gegenseitig überschneiden aufgefallen. Da mir die Deklarationen fehlten, habe ich diese nachempfunden. Hinweis: Zweidimensionale Arrays werden allgemein immer mit [Spalte, Zeile] adressiert (z.B. TStringGrid.Cells[], Point() usw.), nicht umgekehrt. |
Re: Allgemeines Problem in meinem Programm/ Threads!?
Liste der Anhänge anzeigen (Anzahl: 1)
Dann hier auch noch meine Version..
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 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