Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Allgemeines Problem in meinem Programm/ Threads!? (https://www.delphipraxis.net/148436-allgemeines-problem-meinem-programm-threads.html)

wicht 2. Mär 2010 22:17

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Ich habe die TObjectList noch nie verwendet.
Ist das eine Fehlermeldung beim Ablauf des Programms, oder noch davor - also beim kompilieren? Ich vermute letzteres?
Quelltext, bitte.

Simme 2. Mär 2010 22:27

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Ja, der Fehler tritt noch beim Compilieren auf. Hier der Quelltext:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
{...}
private
    { Private-Deklarationen }
    Bomben: TList; //Wenn ich hier TObjectList eingebe, kommt die Fehlermeldung. In der Hilfe-Datei ist die Liste aber vorhanden
    zahl : Integer;
    ja: Boolean;
  public
    { Public-Deklarationen }
  end;
Lg,
Simon =)

Sir Rufo 2. Mär 2010 22:37

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Wenn so ein Fehler auftritt, dann liegt das daran, dass

a) deine Delphi-Version dieses nicht kennt

oder ... eher wahrscheinlicher

b) du nicht die korrekte Unit eingebunden hast

Um die Unit herauszufinden gibt es (speziell in diesem Beispiel) die Möglichkeit

a) schaue in meinen Quelltext, welche Units ich eingebunden habe und du nicht

oder (geht auch ganz hervorragend)

b) du nutzt die Früchte unseres Herrn und schaust mal dort vorbei Delphi-Referenz durchsuchenTObjectList

und schwupps (oder auch "wuppdi") stellen wir fest, das ominöse TObjectList verbirgt sich in der Unit "Contnrs"


Ich vermute mal, dass du das Programm von mir noch nicht versucht hast zu kompilieren, sonst wäre dir aufgefallen, dass dein Delphi TObjectList kennt.

olee 2. Mär 2010 22:40

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Wenn man das mächtige Werkzeug namens 'HILFE' oder den Gott 'F1' nutzt,

erfährt man schnell, das TObjectList in der Unit Contnrs deklariert ist.

D.h.: Die unit Contnrs ganz oben in die Uses eintragen ;)

EDIT: Mist! Zu spät :P

MFG

Simme 2. Mär 2010 23:05

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Ja, bei meiner Hilfe stand's nicht drin. Aber ist jetzt nicht so wichtig. Das funktioniert jetzt. Das Problem ist jetzt noch: Wenn ich mehrere Bomben habe und die erste explodiert ist, kommt oft (nicht immer!) eine Fehlermeldung mit "zugriffsverletzung" usw.
Woher kommt die?

Gute Nacht,
Simon =)

wicht 2. Mär 2010 23:11

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Herzlichen Glückwunsch zum Geburtstag :party:
Nimm dir den Debugger und finde es so raus. Ich vermute, du greifst irgendwo auf eine Bombe zu, obwohl die Bombe durch das BombenListe.Delete() schon zerstört wurde, also nicht mehr existiert. Benutze ausschließlich die Liste, um auf die Bomben zuzugreifen, dann sollte das nicht passieren, wenn es denn daran liegt.

Simme 3. Mär 2010 22:54

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Hey,
danke. =)
also, das Problem mit dem Debugger: Im Moment ist von objektorientierter Programmierung bei mir noch nicht so viel zu sehen. Ich weiß sie jetzt aber anzuwenden, hab jetzt aber nicht die Zeit, das noch alles umzustellen. Deshalb hab ich das nur bei den Spielmännchen noch gemacht, weil es das total vereinfacht hat. Allerdings ist das beim Spielfeld nicht so. Somit gehe ich andauernd alle Spielfelder des 11x11 großen Spielfeldes durch. 11x11 sind 121 Spieldfelder. Und durch solche Schleifen muss ich dann immer wieder durch beim Debugger. 121 mal. Das nervt und ist sehr aufwendig.
Er hat halt immer ein Problem damit, wenn eine Bombe explodiert ist. Obwohl ich eigentlich versucht habe, es so einzurichten, dass er die Liste nur löscht, wenn sich keine Bombe mehr auf dem Spielfeld befindet...
ich schau mir das morgen in der Schule nochmal an, ich geh jetzt ins Bett. Bin sehr müde. Wenn du noch eine Idee hast, dann poste sie mir. ;) Ansonsten schreib ich dir morgen nochmal irgendwann und gebe Bericht über den Stand der Dinge.

Eine gute Nacht wünscht
Simon =)

wicht 3. Mär 2010 23:28

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Nabend.
Ich werd erstmal warten, ob du so noch weiter kommst, aber ein Tipp noch :) ... Wenn du die Schleife über alle Spielfelder machst (du könntest sie auch über alle Mannchen/Bomben machen, dann läuft sie nicht 1xx mal durch :) ), setze deinen Brechpunkt vom Debugger doch in eine weitere Bedingung:

Delphi-Quellcode:
for i := 0 to 11 do
  for n := 0 to 11 do
    if Spielfeld[i][n] is TMaennchen then
    begin
      // tu was mit dem maennchen und hier rein den breakpoint setzen
      TMaennchen(Spielfeld[i][n]).TuWas;
    end;
Dafür muss Spielfeld natürlich so aussehen:

Delphi-Quellcode:
var
  Spielfeld: array[0..10, 0..10] of TObject;
Und man sollte evtl am Anfang jedes Feld mit nil initialisieren. Ist aber auch sehr nervig, wenn sich ein Maennchen bewegt, es immer im Spielfeld auf die neue Koordinate zu setzen. Führt ausserdem dazu, dass auf einem Feld immer nur ein Spieler/Bombe sein kann, nichts gleichzeitig (Nach dem Bombe legen bleibt man ja drauf stehen, deshalb ist das schon ein starkes Minus). Du solltest also eventuell überlegen, ob das Spielfeld nicht über mehrere Listen verwaltet werden soll, wie Bomben und Mannchen, in einer großen Liste. Jede TBombe hat X und Y als Eigenschaft der Klasse, so wie das TMaennchen auch. Dann gehst du einfach über diese Liste und weißst ja direkt, wo das Element, was du in dem Schleifendurchlauf gerade hast, platziert ist... War jetzt doch ein etwas längerer Post, aber egal...

HTH

Simme 4. Mär 2010 21:35

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
So, hallo nochmal!
Also, ich hab nach wie vor keine Ahnung, woran das liegt... Da kommt immer "Das Maximum(0) ist überschritten." Statt 0 steht da auch manchmal 1 oder 2. Ich hab schon einiges probiert. Ich habe echt keine Ahnung, woran es liegt. Es liegt irgendwie daran, dass ich die Bombenobjekte lösche. Aber warum das so ist, raff ich trotzdem noch nicht.
Mal eine kurze Expertenfrage: Wäre es auch akzeptabel, die Bomben einfach nicht zu löschen, sondern sie einfach invisible zu machen? Würde das sehr viel Speicher blockieren? Ist halt pro gelegte Bombe ein Image mehr.
Ich habe übrigens dadurch, dass ich jetzt weiß, wie ein Timer funktioniert, auch das Problem mit der Tastenverzögerung gelöst. =) Ich habe außerdem den Spieler als extra Klasse vereinbart, damit wurde ein Mehrspielermodus jetzt sehr viel einfacherer möglich. Das ist dann mein letzter Fortschritt. Der Mehrspielermodus. Das funktioniert eigentlich alles gut! ;) Ich freu mich! =) Das einzige zu lösende Problem wäre jetzt eben das mit der ObjectList.

Vielleicht hast du/habt ihr ja noch Ideen!?

Liebe Grüße,
Simon =)

Sir Rufo 4. Mär 2010 21:44

Re: Allgemeines Problem in meinem Programm/ Threads!?
 
Ich verstehe gar nicht, warum du mit/zu jeder Bombe ein Image hast.

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.

Einen Vorschlag für die Bomben-Klasse und die Verarbeitung in einer TObjectList habe ich ja schon gegeben.

So, it's on u


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 Uhr.
Seite 3 von 5     123 45      

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