Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Spiel für Informatik Unterricht!! (https://www.delphipraxis.net/60570-spiel-fuer-informatik-unterricht.html)

eMGee 9. Jan 2006 14:08


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.

Nightshade 9. Jan 2006 14:15

Re: Spiel für Informatik Unterricht!!
 
Und wo zeigt er Fehler an ?

JasonDX 9. Jan 2006 14:17

Re: Spiel für Informatik Unterricht!!
 
Hier liegt der Fehler:
Zitat:

Delphi-Quellcode:
room1.Beschreibung:=('room1');

strings werden ohne () zugewiesen. Also ganz einfach:
Delphi-Quellcode:
room1.Beschreibung := 'room1';
aja, und wegen dem
Delphi-Quellcode:
room1,room2,room3,room4,room5,room6,room7,room8,room9,room10,room11,room12,room13,room14,room15,room16:TRaum;
Delphi-Referenz durchsuchenArrays werden dir gefallen ;)

greetz
Mike

eMGee 9. Jan 2006 14:27

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:
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.
[edit=Admin]Code in PRE-Tags gesetzt. Mfg, Daniel[/edit]

Nils_13 9. Jan 2006 14:30

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.

Kinimod8 9. Jan 2006 14:32

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);

eMGee 9. Jan 2006 14:45

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;

3_of_8 9. Jan 2006 14:50

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.

eMGee 9. Jan 2006 14:59

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.

3_of_8 9. Jan 2006 15:05

Re: Spiel für Informatik Unterricht!!
 
Seltsam...

emteg 9. Jan 2006 15:12

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;

malo 9. Jan 2006 15:13

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:
type
  TForm1 = class(TForm)
Da hast du dann auch die Buttons stehen, dann die Prozedur FormCreate. Da musst du auch die Button-Prozeduren hinzufügen. Z.B:
Delphi-Quellcode:
procedure Button1Click(Sender: TObject);
Das musst du für jedes Click-Event machen ;)

eMGee 9. Jan 2006 15:16

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.. ;)

eMGee 9. Jan 2006 15:29

Re: Spiel für Informatik Unterricht!!
 
also hab deinen vorschlag mit den array jetzt umgesetzt, allerdings sagt delphi mir jetzt hier:

Delphi-Quellcode:
  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);
immer undefinierter bezeichner room2, room5 usw also bei allen räumen...

kann ich die räume dort nicht so ansprechen wenn ich die durch einen array erzeugt habe??

eMGee 9. Jan 2006 15:30

Re: Spiel für Informatik Unterricht!!
 
schon ok habs selber gefunden ;)

eMGee 9. Jan 2006 15:45

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.

Phoenix 9. Jan 2006 15:59

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?

eMGee 9. Jan 2006 16:08

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?

tomsel 9. Jan 2006 16:26

Re: Spiel für Informatik Unterricht!!
 
Drei mal darfst du raten. Ich wette, du kommst selbst drauf.

Thorben86 9. Jan 2006 16:45

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?

3_of_8 9. Jan 2006 16:46

Re: Spiel für Informatik Unterricht!!
 
Muss er eigentlich...

eMGee 9. Jan 2006 16:56

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?

emteg 9. Jan 2006 17:22

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:
{ 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;
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.

eMGee 9. Jan 2006 17:31

Re: Spiel für Informatik Unterricht!!
 
habe das geändert der zugriffsverletzungsfehler bleib leider dennoch :((((

ichbins 9. Jan 2006 18:03

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.

eMGee 9. Jan 2006 18:18

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:

ichbins 9. Jan 2006 18:19

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.

eMGee 9. Jan 2006 18:20

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?

eMGee 9. Jan 2006 18:21

Re: Spiel für Informatik Unterricht!!
 
sorry aber kannst du mir etwas genauer erklären wie das mit dem debuggen funktioniert? danke!!!

ichbins 9. Jan 2006 18:23

Re: Spiel für Informatik Unterricht!!
 
Delphi-Quellcode:
aktuellerraum := traum.create;
fehlt.

debuggen: entweder den Delphi-Debugger benutzen (welche Version hast du?) oder überall in deinen Code
Delphi-Quellcode:
showmessage('form.create 1. Zeile wird ausgeführt... Wert der Variablen i:'+inttostr(i));
einfügen (showmessage zeigt ein Meldungsfenster mit dem Text an und hält das Prog solange an) umd die Position des Fehlers zu erkennen.

eMGee 9. Jan 2006 18:24

Re: Spiel für Informatik Unterricht!!
 
delphi 7 personal

ichbins 9. Jan 2006 18:31

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.

eMGee 9. Jan 2006 18:39

Re: Spiel für Informatik Unterricht!!
 
Also es liegt eindeutig an dieser Stelle:

Delphi-Quellcode:
aktuellerRaum:= aktuellerRaum.Norden;
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:

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.

ichbins 9. Jan 2006 18:44

Re: Spiel für Informatik Unterricht!!
 
Aktuellerraum wurde nicht erzeugt. Das musst du in der formcreate noch einfügen:
Delphi-Quellcode:
aktuellerraum:=traum.create;
raum[i].norden/westen/süden/osten musst du auch erstellen.

Airblader 9. Jan 2006 18:45

Re: Spiel für Informatik Unterricht!!
 
@ichbins

aktuellerraum wird aber room[1] zugewiesen, und das ist instanziert...

air

eMGee 9. Jan 2006 18:46

Re: Spiel für Informatik Unterricht!!
 
doch das ist drin.. guck mal unter //Räume erzeugen

Airblader 9. Jan 2006 18:48

Re: Spiel für Informatik Unterricht!!
 
Zitat:

Zitat von eMGee
doch das ist drin.. guck mal unter //Räume erzeugen

Versuche es mal eben wegzulassen.
Da du aktuellerRaum ja room[1] zuweist, die instanziert ist, brauchst du aktuellerRaum keine eigene Instanz verpassen.

air

ichbins 9. Jan 2006 18:49

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:
procedure setausgaenge(raum,nordausgang,südausgang,ostausgang,westausgang:traum);
begin
  raum.nord:=nordausgang;
  raum.
  ...
end;
oder poste mal deinen Code.

der-olli 15. Jan 2006 19:21

Re: Spiel für Informatik Unterricht!!
 
Hi eMGee,

also das mit dem
Delphi-Quellcode:
aktuellerRaum:=TRaum.Create;
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)

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:
aktuellerRaum.Norden
zugreifen, was aber natürlich nicht geht, da der Speicher-Bereich, auf den aktuellerRaum zeigt, gar nicht existiert.

Hoffe damit sind die Fragen geklärt.

Grüße

Olli

CPP-Programmer 17. Jan 2006 13:18

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