Spiel für Informatik Unterricht!!
Hallo!
Wir sollen in unserem Info Kurs ein kleines Textadventure programmieren. Habe nun heute damit angefangen habe allerdings nicht sehr viel ahnung von delphi und beim ersten kompilieren kamen direkt etliche fehler... so wie es aussieht scheint es nur an ein oder zwei stellen zu liegen vermute das das andere folgefehler sind, kann aber leider nichts finden... bitte um hilfe denke für jemanden der sich auskennt is das kein großes ding ;) danke schonmal!! Hier der Quelltext:
Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Memo1: TMemo; Image1: TImage; 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; room1,room2,room3,room4,room5,room6,room7,room8,room9,room10,room11,room12,room13,room14,room15,room16: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); begin //---Räume erzeugen--- room1:=TRaum.Create; room2:=TRaum.Create; room3:= TRaum.Create; room4:= TRaum.Create; room5:= TRaum.Create; room6:= TRaum.Create; room7:= TRaum.Create; room8:= TRaum.Create; room9:= TRaum.Create; room10:= TRaum.Create; room11:= TRaum.Create; room12:= TRaum.Create; room13:= TRaum.Create; room14:= TRaum.Create; room15:= TRaum.Create; room16:= TRaum.Create; //---Eigenschaften der Räume--- room1.Beschreibung:=('room1'); room1.Bild:=('Bilder/room1.jpg'); room2.Beschreibung:= ('room2'); room2.Bild:= ('Bilder/room2.jpg'); room3.Beschreibung:= ('room3'); room3.Bild:= ('Bilder/room3.jpg'); room4.Beschreibung:= ('room4'); room4.Bild:= ('Bilder/room4.jpg'); room5.Beschreibung:= ('room5'); room5.Bild:= ('Bilder/room5.jpg'); room6.Beschreibung:= ('room6'); room6.Bild:= ('Bilder/room6.jpg'); room7.Beschreibung:= ('room7'); room7.Bild:= ('Bilder/room7.jpg'); room8.Beschreibung:= ('room8'); room8.Bild:= ('Bilder/room8.jpg'); room9.Beschreibung:= ('room9'); room9.Bild:= ('Bilder/room9.jpg'); room10.Beschreibung:= ('room10'); room10.Bild:= ('Bilder/room10.jpg'); room11.Beschreibung:= ('room11'); room11.Bild:= ('Bilder/room11.jpg'); room12.Beschreibung:= ('room12'); room12.Bild:= ('Bilder/room12.jpg'); room13.Beschreibung:= ('room13'); room13.Bild:= ('Bilder/room13.jpg'); room14.Beschreibung:= ('room14'); room14.Bild:= ('Bilder/room14.jpg'); room15.Beschreibung:= ('room15'); room15.Bild:= ('Bilder/room15.jpg'); room16.Beschreibung:= ('room16'); room16.Bild:= ('Bilder/room16.jpg'); //---Ausgänge setzen--- room1.setAusgaenge(nil,room2,room5,nil); room2.setAusgaenge(nil,room3,room6,room1); room3.setAusgaenge(nil,room4,room7,room2); room4.setAusgaenge(nil,nil,room8,room3); room5.setAusgaenge(room1,room6,room9,nil); room6.setAusgaenge(room2,room7,room10,room5); room7.setAusgaenge(room3,room8,room11,room6); room8.setAusgaenge(room4,nil,room12,room7); room9.setAusgaenge(room5,room10,room13,nil); room10.setAusgaenge(room6,room11,room14,room9); room11.setAusgaenge(room7,room12,room15,room10); room12.setAusgaenge(room8,nil,room16,room11); room13.setAusgaenge(room9,room14,nil,nil); room14.setAusgaenge(room10,room15,nil,room13); room15.setAusgaenge(room11,room16,nil,room14); room16.setAusgaenge(room12,nil,nil,room15); aktuellerRaum:=room1; end; //---Norden-Button--- procedure TForm1.Button1Click(Sender: TObject); begin if (aktuellerRaum.Norden <> nil) then begin aktuellerRaum:= aktuellerRaum.Norden; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; //---Osten-Button--- procedure TForm1.Button2Click(Sender: TObject); begin if (aktuellerRaum.Osten <> nil) then begin aktuellerRaum:= aktuellerRaum.Osten; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; //---Sueden-Button--- 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; //---Westen-Button--- 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; end. |
Re: Spiel für Informatik Unterricht!!
Und wo zeigt er Fehler an ?
|
Re: Spiel für Informatik Unterricht!!
Hier liegt der Fehler:
Zitat:
Delphi-Quellcode:
aja, und wegen dem
room1.Beschreibung := 'room1';
Delphi-Quellcode:
Arrays werden dir gefallen ;)
room1,room2,room3,room4,room5,room6,room7,room8,room9,room10,room11,room12,room13,room14,room15,room16:TRaum;
greetz Mike |
Re: Spiel für Informatik Unterricht!!
danke für die schnelle Hilfe, hat jedoch leider nix gebracht... habe jetzt mal alle fehler markiert..
also bei TForm1 kommt undefinierter bezeichner 'FormCreate' dann bei Button1.Click, Image1, Memo1 kommt undefnierter bezeicher und operator oder semikolon fehlt... das setzt sich bei den weiteren buttons fort, habe nur den ersten markiert....
Code:
[edit=Admin]Code in PRE-Tags gesetzt. Mfg, Daniel[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Memo1: TMemo; Image1: TImage; 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; room1,room2,room3,room4,room5,room6,room7,room8,room9,room10,room11,room12,room13,room14,room15,room16: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; [color=#ff0000] procedure TForm1.FormCreate(Sender:TObject); [/color] begin //---Räume erzeugen--- room1:=TRaum.Create; room2:=TRaum.Create; room3:= TRaum.Create; room4:= TRaum.Create; room5:= TRaum.Create; room6:= TRaum.Create; room7:= TRaum.Create; room8:= TRaum.Create; room9:= TRaum.Create; room10:= TRaum.Create; room11:= TRaum.Create; room12:= TRaum.Create; room13:= TRaum.Create; room14:= TRaum.Create; room15:= TRaum.Create; room16:= TRaum.Create; //---Eigenschaften der Räume--- room1.Beschreibung:=('room1'); room1.Bild:=('Bilder/room1.jpg'); room2.Beschreibung:= ('room2'); room2.Bild:= ('Bilder/room2.jpg'); room3.Beschreibung:= ('room3'); room3.Bild:= ('Bilder/room3.jpg'); room4.Beschreibung:= ('room4'); room4.Bild:= ('Bilder/room4.jpg'); room5.Beschreibung:= ('room5'); room5.Bild:= ('Bilder/room5.jpg'); room6.Beschreibung:= ('room6'); room6.Bild:= ('Bilder/room6.jpg'); room7.Beschreibung:= ('room7'); room7.Bild:= ('Bilder/room7.jpg'); room8.Beschreibung:= ('room8'); room8.Bild:= ('Bilder/room8.jpg'); room9.Beschreibung:= ('room9'); room9.Bild:= ('Bilder/room9.jpg'); room10.Beschreibung:= ('room10'); room10.Bild:= ('Bilder/room10.jpg'); room11.Beschreibung:= ('room11'); room11.Bild:= ('Bilder/room11.jpg'); room12.Beschreibung:= ('room12'); room12.Bild:= ('Bilder/room12.jpg'); room13.Beschreibung:= ('room13'); room13.Bild:= ('Bilder/room13.jpg'); room14.Beschreibung:= ('room14'); room14.Bild:= ('Bilder/room14.jpg'); room15.Beschreibung:= ('room15'); room15.Bild:= ('Bilder/room15.jpg'); room16.Beschreibung:= ('room16'); room16.Bild:= ('Bilder/room16.jpg'); //---Ausgänge setzen--- room1.setAusgaenge(nil,room2,room5,nil); room2.setAusgaenge(nil,room3,room6,room1); room3.setAusgaenge(nil,room4,room7,room2); room4.setAusgaenge(nil,nil,room8,room3); room5.setAusgaenge(room1,room6,room9,nil); room6.setAusgaenge(room2,room7,room10,room5); room7.setAusgaenge(room3,room8,room11,room6); room8.setAusgaenge(room4,nil,room12,room7); room9.setAusgaenge(room5,room10,room13,nil); room10.setAusgaenge(room6,room11,room14,room9); room11.setAusgaenge(room7,room12,room15,room10); room12.setAusgaenge(room8,nil,room16,room11); room13.setAusgaenge(room9,room14,nil,nil); room14.setAusgaenge(room10,room15,nil,room13); room15.setAusgaenge(room11,room16,nil,room14); room16.setAusgaenge(room12,nil,nil,room15); aktuellerRaum:=room1; end; //---Norden-Button--- [color=#ff0000]procedure TForm1.Button1Click(Sender: TObject);[/color] begin if (aktuellerRaum.Norden <> nil) then begin aktuellerRaum:= aktuellerRaum.Norden; [color=#ff0000]Image1.Picture.LoadFromFile(aktuellerRaum.Bild);[/color] [color=#ff0000]Memo1.Lines.Add(aktuellerRaum.Beschreibung);[/color] end; end; //---Osten-Button--- procedure TForm1.Button2Click(Sender: TObject); begin if (aktuellerRaum.Osten <> nil) then begin aktuellerRaum:= aktuellerRaum.Osten; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; //---Sueden-Button--- 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; //---Westen-Button--- 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; end. |
Re: Spiel für Informatik Unterricht!!
Ja was hast du denn da gemacht :shock: ? Du hast bei dem Form-Typen die Prozeduren rausgeschmissen.
Und außerdem nehm einfach den delphi Highlighter, dann lässt es sich leichter lesen. |
Re: Spiel für Informatik Unterricht!!
Du musst die Proceduren mit TForm1 am Anfang natürlich auch deklarieren:
Delphi-Quellcode:
type TForm1 = class(TForm)
procedure FormCreate(Sender: TObject); |
Re: Spiel für Informatik Unterricht!!
ok danke!! der erste fehler ist weg aber habe immer noch den anderen ....
an den stellen wo ich fett markiert hab jetzt kommt bei TForm1 immer undefinierter bezeichner und bei Image1, Memo1 auch und außerdem noch operator oder semikolon fehlt.. [code] //---Norden-Button--- procedure TForm1.Button1Click(Sender: TObject); begin if (aktuellerRaum.Norden <> nil) then begin aktuellerRaum:= aktuellerRaum.Norden; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; //---Osten-Button--- procedure TForm1.Button2Click(Sender: TObject); begin if (aktuellerRaum.Osten <> nil) then begin aktuellerRaum:= aktuellerRaum.Osten; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; //---Sueden-Button--- 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; //---Westen-Button--- 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; |
Re: Spiel für Informatik Unterricht!!
Setz den Code doch mal bitte in [delphi] Tags. Und wenn du jeweils die Fehlermeldung kurz dazu schreiben würdest, wäre das auch ganz nützlich.
|
Re: Spiel für Informatik Unterricht!!
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Memo1: TMemo; Image1: TImage; procedure Button1Click(Sender: TObject); procedure FormCreate(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; room1,room2,room3,room4,room5,room6,room7,room8,room9,room10,room11,room12,room13,room14,room15,room16: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); begin //---Räume erzeugen--- room1:=TRaum.Create; room2:=TRaum.Create; room3:= TRaum.Create; room4:= TRaum.Create; room5:= TRaum.Create; room6:= TRaum.Create; room7:= TRaum.Create; room8:= TRaum.Create; room9:= TRaum.Create; room10:= TRaum.Create; room11:= TRaum.Create; room12:= TRaum.Create; room13:= TRaum.Create; room14:= TRaum.Create; room15:= TRaum.Create; room16:= TRaum.Create; //---Eigenschaften der Räume--- room1.Beschreibung:='room1'; room1.Bild:=('Bilder/room1.jpg'); room2.Beschreibung:='room2'; room2.Bild:= ('Bilder/room2.jpg'); room3.Beschreibung:='room3'; room3.Bild:= ('Bilder/room3.jpg'); room4.Beschreibung:='room4'; room4.Bild:= ('Bilder/room4.jpg'); room5.Beschreibung:='room5'; room5.Bild:= ('Bilder/room5.jpg'); room6.Beschreibung:='room6'; room6.Bild:= ('Bilder/room6.jpg'); room7.Beschreibung:='room7'; room7.Bild:= ('Bilder/room7.jpg'); room8.Beschreibung:='room8'; room8.Bild:= ('Bilder/room8.jpg'); room9.Beschreibung:='room9'; room9.Bild:= ('Bilder/room9.jpg'); room10.Beschreibung:='room10'; room10.Bild:= ('Bilder/room10.jpg'); room11.Beschreibung:='room11'; room11.Bild:= ('Bilder/room11.jpg'); room12.Beschreibung:='room12'; room12.Bild:= ('Bilder/room12.jpg'); room13.Beschreibung:='room13'; room13.Bild:= ('Bilder/room13.jpg'); room14.Beschreibung:='room14'; room14.Bild:= ('Bilder/room14.jpg'); room15.Beschreibung:='room15'; room15.Bild:= ('Bilder/room15.jpg'); room16.Beschreibung:='room16'; room16.Bild:= ('Bilder/room16.jpg'); //---Ausgänge setzen--- room1.setAusgaenge(nil,room2,room5,nil); room2.setAusgaenge(nil,room3,room6,room1); room3.setAusgaenge(nil,room4,room7,room2); room4.setAusgaenge(nil,nil,room8,room3); room5.setAusgaenge(room1,room6,room9,nil); room6.setAusgaenge(room2,room7,room10,room5); room7.setAusgaenge(room3,room8,room11,room6); room8.setAusgaenge(room4,nil,room12,room7); room9.setAusgaenge(room5,room10,room13,nil); room10.setAusgaenge(room6,room11,room14,room9); room11.setAusgaenge(room7,room12,room15,room10); room12.setAusgaenge(room8,nil,room16,room11); room13.setAusgaenge(room9,room14,nil,nil); room14.setAusgaenge(room10,room15,nil,room13); room15.setAusgaenge(room11,room16,nil,room14); room16.setAusgaenge(room12,nil,nil,room15); aktuellerRaum:=room1; end; //---Norden-Button--- procedure TForm1.Button1Click(Sender: TObject); <------- undefnierter Bezeicher 'Button1.Click' begin if (aktuellerRaum.Norden <> nil) then begin aktuellerRaum:= aktuellerRaum.Norden; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); <------- undefnierter Bezeichner 'Image1' Memo1.Lines.Add(aktuellerRaum.Beschreibung); <------- undefnierter Bezeichner 'Memo1' end; end; //---Osten-Button--- procedure TForm1.Button2Click(Sender: TObject); begin if (aktuellerRaum.Osten <> nil) then begin aktuellerRaum:= aktuellerRaum.Osten; Image1.Picture.LoadFromFile(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; //---Sueden-Button--- 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; //---Westen-Button--- 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; end. |
Re: Spiel für Informatik Unterricht!!
Seltsam...
|
Re: Spiel für Informatik Unterricht!!
Also das erste was du machen solltest, ist dir arrays zu bauen, so blickt man ja garicht mehr durch:
Delphi-Quellcode:
var Room: array [1..16] of TRaum;
{...} 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:='Raum'+IntToStr(i); //Das ergibt immer "Raum"+Zahl, also z.B. Raum1, Raum2, ... Room[i].Bild:='Bilder\raum'+IntToStr(i)+'.jpg'; //Da werden wie obend die Namen der Bilder erzeugt. end; //---Ausgänge setzen--- room[1].setAusgaenge(nil,room2,room5,nil); room[2].setAusgaenge(nil,room3,room6,room1); room[3].setAusgaenge(nil,room4,room7,room2); room[4].setAusgaenge(nil,nil,room8,room3); room[5].setAusgaenge(room1,room6,room9,nil); room[6].setAusgaenge(room2,room7,room10,room5); room[7].setAusgaenge(room3,room8,room11,room6); room[8].setAusgaenge(room4,nil,room12,room7); room[9].setAusgaenge(room5,room10,room13,nil); room[10].setAusgaenge(room6,room11,room14,room9); room[11].setAusgaenge(room7,room12,room15,room10); room[12].setAusgaenge(room8,nil,room16,room11); room[13].setAusgaenge(room9,room14,nil,nil); room[14].setAusgaenge(room10,room15,nil,room13); room[15].setAusgaenge(room11,room16,nil,room14); room[16].setAusgaenge(room12,nil,nil,room15); aktuellerRaum:=room[1]; end; |
Re: Spiel für Informatik Unterricht!!
Was hast du denn da gemacht? :mrgreen:
Da scheint jemand entweder gerne alles selbst zu tippen, oder er benutzt gerne Strg+C und Strg+V :mrgreen: Du musst, wenn du ein Event (Ereignis) hinzufügst, auch das richtige Event im Objektinspektor auswählen. Bei FormCreate und ButtonClick reicht auch ein Doppelklick auf das entspr. Objekt. Jedenfalls musst du oben im Interface-Abschnitt bei der Klasse TForm1 noch was ergänzen. An dieser Stelle:
Delphi-Quellcode:
Da hast du dann auch die Buttons stehen, dann die Prozedur FormCreate. Da musst du auch die Button-Prozeduren hinzufügen. Z.B:
type
TForm1 = class(TForm)
Delphi-Quellcode:
Das musst du für jedes Click-Event machen ;)
procedure Button1Click(Sender: TObject);
|
Re: Spiel für Informatik Unterricht!!
ok danke für die ganze hilfe, wie gesagt hab von delpühi noch net so den plan... habe noch nie objektorientiert prgrammiert ;)
werde mir mal aus euren tipps was neues basteln.. ;) |
Re: Spiel für Informatik Unterricht!!
also hab deinen vorschlag mit den array jetzt umgesetzt, allerdings sagt delphi mir jetzt hier:
Delphi-Quellcode:
immer undefinierter bezeichner room2, room5 usw also bei allen räumen...
room[1].setAusgaenge(nil,room2,room5,nil);
room[2].setAusgaenge(nil,room3,room6,room1); room[3].setAusgaenge(nil,room4,room7,room2); room[4].setAusgaenge(nil,nil,room8,room3); room[5].setAusgaenge(room1,room6,room9,nil); room[6].setAusgaenge(room2,room7,room10,room5); room[7].setAusgaenge(room3,room8,room11,room6); room[8].setAusgaenge(room4,nil,room12,room7); room[9].setAusgaenge(room5,room10,room13,nil); room[10].setAusgaenge(room6,room11,room14,room9); room[11].setAusgaenge(room7,room12,room15,room10); room[12].setAusgaenge(room8,nil,room16,room11); room[13].setAusgaenge(room9,room14,nil,nil); room[14].setAusgaenge(room10,room15,nil,room13); room[15].setAusgaenge(room11,room16,nil,room14); room[16].setAusgaenge(room12,nil,nil,room15); kann ich die räume dort nicht so ansprechen wenn ich die durch einen array erzeugt habe?? |
Re: Spiel für Informatik Unterricht!!
schon ok habs selber gefunden ;)
|
Re: Spiel für Informatik Unterricht!!
so hab mir jetzt aus euren ganzen hilfen (danke nochmal) was geschrieben was sich auch ohne fehler kompilieren lässt allerdings tut sich beim drücken auf die buttons komischerweise nichts... weder die beschreibung taucht im memo feld auf noch ein bild wird geleaden... bin am verzweifeln :?
naja hier der quelltext
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Memo1: TMemo; Image1: TImage; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(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; //---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(aktuellerRaum.Bild); Memo1.Lines.Add(aktuellerRaum.Beschreibung); end; end; procedure TForm1.Button2Click(Sender: TObject); begin if (aktuellerRaum.Osten <> nil) then begin aktuellerRaum:= aktuellerRaum.Osten; Image1.Picture.LoadFromFile(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; end. |
Re: Spiel für Informatik Unterricht!!
Nachdem Du schon mit dem FormCreate() ein Problem hattest dünkt mir, dass die Funktionen der Buttons (also alle ButtonClick's) gar nicht mit den Buttons verknüpft sind.
Wenn Du Dein Form hast und im Objektinspektor den Button anwählst und dort die Ereignisse anzeigen lässt, verweisen die Buttons dann auch auf die entsprechenden Funktionen? |
Re: Spiel für Informatik Unterricht!!
nein bei den ereignissen ist nichts eingetragen... aber woran liegt das?? ich habe doch unten mit button1.click usw alles definiert.. was muss ich denn bei den erignissen eintragen damit es funzt?
|
Re: Spiel für Informatik Unterricht!!
Drei mal darfst du raten. Ich wette, du kommst selbst drauf.
|
Re: Spiel für Informatik Unterricht!!
Mal so ne frage: Wenn ich doppelklick auf bnen Button mach , dann legt der doch in der regel automatisch die deklaration an, oder? :)
hast du die button-Proceduren direkt geschrieben ohne über butten zu klicken? |
Re: Spiel für Informatik Unterricht!!
Muss er eigentlich...
|
Re: Spiel für Informatik Unterricht!!
ne habe auf die buttons geklickt deshalb wundert mich das ja das da keine verknüpfung war... habe allerdgins schon wieder das nächste problem... habe die buttons jetzt verknüpft und jetzt kommt sobald ich auf einen der buttons klicke nach dem ausführen eine Fehlermeldung EAcessViolation ... Zugriffsverletzung bei Adresse 00452AE6 usw.. solangsam mache ich mir gedanken ob mein delphi nicht ein am arsch is oder so... weiß einer was die fehlermeldung zu bedeuten hat?
|
Re: Spiel für Informatik Unterricht!!
Ist dir eigentlich klar, dass du den genaue pfad zu deinen bildern angeben musst? Es reicht nicht, wie z.B. bei HTML relative angaben zu machen.
Pack den ordner mit deinen bilden in das selbe verzeichnis wie deine .exe und mach dann wenn du ein bild öffnest folgendes:
Delphi-Quellcode:
Das ExtractFilePath(ParamStr(0)) gibt den pfad, in dem sich die exe befindet als string zurück. Du kannst es jetzt entweder so machen, wie ich es hier geschrieben habe oder du packst das mit dem ExtractFilePath gleich in das erzeugen der räume mit rein.
{ am beispiel vom button1 }
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; |
Re: Spiel für Informatik Unterricht!!
habe das geändert der zugriffsverletzungsfehler bleib leider dennoch :((((
|
Re: Spiel für Informatik Unterricht!!
Das Programm kann so noch garkeine JPEGs öffnen. Du musst oben bei USES die Unit JPEG dazuschreiben.
Welche Delphi-Version hast du denn? Delphi hat einen integrierten Debugger, mit dem du die Position von accessviolations anzeigen kannst. Wenn der Error kommt, meldet sich ja zuerst Delphi. Da klickst du auf ANHALTEN. Ich denke übrigens es liegt daran dass du AKTUELLERRAUM nicht mit traum.create erzeugst. |
Re: Spiel für Informatik Unterricht!!
hm mit dem bilder laden scheint das nichts zu tun zu haben, der fehler kommt auch wenn ich den teil wo die bilder lade rausnehme... habe auch delphi nochmal neu installiert hat aber nichts gebracht :cry:
|
Re: Spiel für Informatik Unterricht!!
du kannst das Projekt ja debuggen. Oder überall showmessage('jetzt an derundderpositionvonderundderprozedur'); einfügen, damit du weisst bei welchem Befehl der Fehler auftritt.
|
Re: Spiel für Informatik Unterricht!!
was meinst du damit das ich aktuellerRaum nicht mit Traum erzeuge?? soll ich aktuellerRaum innerhalb des TRaum tpyes erzeugen?
|
Re: Spiel für Informatik Unterricht!!
sorry aber kannst du mir etwas genauer erklären wie das mit dem debuggen funktioniert? danke!!!
|
Re: Spiel für Informatik Unterricht!!
Delphi-Quellcode:
fehlt.
aktuellerraum := traum.create;
debuggen: entweder den Delphi-Debugger benutzen (welche Version hast du?) oder überall in deinen Code
Delphi-Quellcode:
einfügen (showmessage zeigt ein Meldungsfenster mit dem Text an und hält das Prog solange an) umd die Position des Fehlers zu erkennen.
showmessage('form.create 1. Zeile wird ausgeführt... Wert der Variablen i:'+inttostr(i));
|
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 11:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz