![]() |
Re: Spiel für Informatik Unterricht!!
delphi 7 personal
|
Re: Spiel für Informatik Unterricht!!
Liste der Anhänge anzeigen (Anzahl: 1)
dann müsste doch normalerweise bei jedem Fehler Delphi mit einer solchen Meldung kommen (siehe Anhang) Die Beispielmeldung is Delphi2005 aber von 7 auf 2005 hat sich da nicht viel geändert. da klickst du auf ANHALTEN, dann markiert er die Fehlercodezeile (soweit er kann). Wenn die Fehlermeldung nicht kommt, dann klickst du mal 'n bisschen im Delphi-Menü rum bis du auf Debugger-Optionen kommst (glaub unter TOOLS). Da markierst du die Checkbox BEI EXCEPTIONS STOPPEN.
|
Re: Spiel für Informatik Unterricht!!
Also es liegt eindeutig an dieser Stelle:
Delphi-Quellcode:
also an aktuellerRaum, habe jetzt mal probiert alles nacheinander aus der prozedur rauszuholen und sobald nichts mehr mit aktuelleRaum drin ist läufts.... also hier nochmal der ganze quelltext habe absolut keine Ahnung was mit aktuellerRaum nicht stimmt.... :evil:
aktuellerRaum:= aktuellerRaum.Norden;
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, JPEG; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Image1: TImage; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TRaum=class Beschreibung:String; Bild:String; Norden,Osten,Sueden,Westen:TRaum; procedure setAusgaenge(norden,osten,sueden,westen:TRaum); end; var Form1: TForm1; Room: array [1..16] of TRaum; aktuellerRaum:TRaum; implementation {$R *.dfm} procedure TRaum.setAusgaenge(norden,osten,sueden,westen:TRaum); begin self.Norden:= norden; self.Osten:= osten; self.Sueden:= sueden; self.Westen:= westen; end; procedure TForm1.FormCreate(Sender:TObject); var i: integer; begin //---Räume erzeugen--- for i:=1 to 16 do begin Room[i]:=TRaum.Create; Room[i].Beschreibung:='blabla'; Room[i].Bild:='Bilder\raum'+IntToStr(i)+'.jpg'; end; aktuellerRaum:=TRaum.Create; //---Ausgänge setzen--- room[1].setAusgaenge(nil,room[2],room[5],nil); room[2].setAusgaenge(nil,room[3],room[6],room[1]); room[3].setAusgaenge(nil,room[4],room[7],room[2]); room[4].setAusgaenge(nil,nil,room[8],room[3]); room[5].setAusgaenge(room[1],room[6],room[9],nil); room[6].setAusgaenge(room[2],room[7],room[10],room[5]); room[7].setAusgaenge(room[3],room[8],room[11],room[6]); room[8].setAusgaenge(room[4],nil,room[12],room[7]); room[9].setAusgaenge(room[5],room[10],room[13],nil); room[10].setAusgaenge(room[6],room[11],room[14],room[9]); room[11].setAusgaenge(room[7],room[12],room[15],room[10]); room[12].setAusgaenge(room[8],nil,room[16],room[11]); room[13].setAusgaenge(room[9],room[14],nil,nil); room[14].setAusgaenge(room[10],room[15],nil,room[13]); room[15].setAusgaenge(room[11],room[16],nil,room[14]); room[16].setAusgaenge(room[12],nil,nil,room[15]); aktuellerRaum:=room[1]; end; procedure TForm1.Button1Click(Sender: TObject); begin if (aktuellerRaum.Norden <> nil) then begin aktuellerRaum:= aktuellerRaum.Norden; Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; procedure TForm1.Button3Click(Sender: TObject); begin if (aktuellerRaum.Sueden <> nil) then begin aktuellerRaum:= aktuellerRaum.Sueden; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; procedure TForm1.Button4Click(Sender: TObject); begin if (aktuellerRaum.Westen <> nil) then begin aktuellerRaum:= aktuellerRaum.Westen; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; procedure TForm1.Button2Click(Sender: TObject); begin aktuellerRaum:= aktuellerRaum.Westen; end; end. |
Re: Spiel für Informatik Unterricht!!
Aktuellerraum wurde nicht erzeugt. Das musst du in der formcreate noch einfügen:
Delphi-Quellcode:
raum[i].norden/westen/süden/osten musst du auch erstellen.
aktuellerraum:=traum.create;
|
Re: Spiel für Informatik Unterricht!!
@ichbins
aktuellerraum wird aber room[1] zugewiesen, und das ist instanziert... air |
Re: Spiel für Informatik Unterricht!!
doch das ist drin.. guck mal unter //Räume erzeugen
|
Re: Spiel für Informatik Unterricht!!
Zitat:
Da du aktuellerRaum ja room[1] zuweist, die instanziert ist, brauchst du aktuellerRaum keine eigene Instanz verpassen. air |
Re: Spiel für Informatik Unterricht!!
ich glaube das ganze wäre weeeeeeeiiiiiiit einfacher wenn du statt den Klassen records verwenden würdest und die setausgänge-Prozedur so gestaltest:
Delphi-Quellcode:
oder poste mal deinen Code.
procedure setausgaenge(raum,nordausgang,südausgang,ostausgang,westausgang:traum);
begin raum.nord:=nordausgang; raum. ... end; |
Re: Spiel für Informatik Unterricht!!
Hi eMGee,
also das mit dem
Delphi-Quellcode:
würde ich ganz schnell wieder vergessen, da du aktuellerRaum ja danach eh wieder überschreibst und dadurch nur ein Speicherleck entsteht, da du das vorher erzeugte Objekt aktuellerRaum nie wieder freigibst (was ja schon gesagt wurde). (genauso müsstest du auch im OnDestroy-Event die ganzen Räume mit room[i].Destroy (i=1..16) wieder freigeben)
aktuellerRaum:=TRaum.Create;
Zu deiner AccessViolation schlage ich dir mal vor, einfach auf dein Formular zu gehen, und in den Objekt-Inspektor bei dem Ereignis OnCreate FormCreate einzutragen. So wie das aussieht, werden nämlich deine ganzen Räume (und damit ja auch aktuellerRaum) nie einem Wert zugewiesen (bzw. haben rein zufällige Werte), da ja das OnCreate gar nicht erst aufgerufen wird. (Setze dich in diesem Zusammenhang am besten gleich mal mit Haltepunkten / Debugger auseinander -> Delphi-Hilfe oder deinen Informatik-Lehrer fragen :) ) Damit will Delphi dann z.B. im Button1Click-Event auf
Delphi-Quellcode:
zugreifen, was aber natürlich nicht geht, da der Speicher-Bereich, auf den aktuellerRaum zeigt, gar nicht existiert.
aktuellerRaum.Norden
Hoffe damit sind die Fragen geklärt. Grüße Olli |
Re: Spiel für Informatik Unterricht!!
Wäre net wenn du hier euer Programmiertes spiel reinstellen könntest + Source.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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