|
Antwort |
Registriert seit: 8. Jan 2010 31 Beiträge Delphi 7 Personal |
#41
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 =) |
Zitat |
Registriert seit: 5. Jan 2005 Ort: Stadthagen 9.454 Beiträge Delphi 10 Seattle Enterprise |
#42
Zitat von Simme:
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.
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) |
Zitat |
Registriert seit: 15. Jan 2006 Ort: Das schöne Enger nahe Bielefeld 809 Beiträge Delphi XE Professional |
#43
Debugge die Schleife und guck dir bei jedem Durchlauf den Index an, der gelöscht werden soll.
Bomben.Delete(idx) // Hier Breakpoint drauf setzen 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. 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. |
Zitat |
Registriert seit: 8. Jan 2010 31 Beiträge Delphi 7 Personal |
#44
Zitat von wicht:
Debugge die Schleife und guck dir bei jedem Durchlauf den Index an, der gelöscht werden soll.
Zitat von wicht:
Bomben.Delete(idx) // Hier Breakpoint drauf setzen
Zitat von wicht:
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.
Wenn du dich nicht mit dem Debugger auseinandersetzt oder den Quelltext postest wird es kompliziert dir zu helfen, jedenfalls was mich betrifft.
Zitat von wicht:
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.
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 |
Zitat |
Registriert seit: 15. Jan 2006 Ort: Das schöne Enger nahe Bielefeld 809 Beiträge Delphi XE Professional |
#46
Hi!
Zu viel nicht, aber doch viel und ich für meinen Teil habe es dann aufgeschoben. Ich bin immer noch willig zu helfen , 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 Bis dann! |
Zitat |
Registriert seit: 7. Aug 2008 Ort: Brandenburg 1.477 Beiträge Delphi 12 Athens |
#47
Zitat von Simme:
Sorry, war das zu viel?
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; |
Zitat |
Registriert seit: 8. Jan 2010 31 Beiträge Delphi 7 Personal |
#48
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 =) |
Zitat |
Registriert seit: 7. Aug 2008 Ort: Brandenburg 1.477 Beiträge Delphi 12 Athens |
#49
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. |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |