![]() |
Problem mit eigenem Textadventure in Delphi
Hallo erstmal :)
Ich wusste nicht genau, unter welchem Bereich ich mein Problem posten soll, daher schon mal im voraus eine Entschuldigung von mir, falls das hier der falsche Ort dafür sein sollte. Ich sollte für den Unterricht ein Textadventure erstellen. Das Problem dabei ist jetzt ,dass ich das noch nie gemacht habe und jetzt anhand der vom Lehrer gegebenen Infos versucht habe, eins auf die Beine zu stellen. Ich bin nun soweit ich das beurteilen kann durch, allerdings bekomme ich ständig eine Fehlermeldung sobald ich das Programm starten will . Ich habe schon gesucht und gesucht, aber ich finde den Fehler einfach nicht bzw ich weiß auch nicht, ob vielleicht etwas fehlt und das ganze deswegen nicht läuft. Es wäre wirklich nett, wenn mir jemand sagen könnte, wo mein Fehler liegt, damit ich ihn beheben kann ( Abgabe ist nämlich leider schon in ein paar Tagen und ich möchte nur ungern etwas abgeben,was nicht funktioniert ). Hier mein "Text" ( Ich hoffe, er ist nicht zu lang :/ ): __________________________________________________ ___________________________
Delphi-Quellcode:
__________________________________________________ __
unit Schulprojektbearbeitet;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg; type TRaum = class Beschreibung : string; FotoReferenz : String; Gegenstand : String; Norden, Sueden, Westen, Osten : TRaum; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure setAusgaenge (norden, sueden, westen, osten, hoch, runter : TRaum); end; TRucksack = Class Item : Array [1..5] of String; procedure hinzufuegen (S:String); function ausgeben : String; Function voll: boolean; end; TForm2 = class(TForm) Edit1: TEdit; Button1: TButton; Memo1: TMemo; Image1: TImage; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; aktuellerRaum: TRaum; Garten, Flur, Fluroben, Flur2, Flur3, Maggiesraum, Lisasraum, Bartszimmer, Elternschlafzimmer, Badezimmer, Badezimmer2, Kueche, TVRoom, Esszimmer, Wohnzimmer, Eingang : TRaum; Norden, Sueden, Westen, Osten: TRaum; Rucksack: TRucksack; implementation begin {$R *.dfm} procedure TRucksack.hinzufuegen ( S:String); var i : integer ; begin i := 1; while (i <= 5) do begin if (self.item[i]=S) then break else if self.item[i]= " then begin self.item[i] = s; break end; inc(i); end; end; function TRucksack.ausgeben : string; var i: integer; begin result := " ; i:=1; while (i <=5) do begin if(self.item[i] = ") then break else result := result + self.item[i] + ','; inc(i); end; end; function TRucksack.voll : boolean; var i, j : integer ; begin result := false; j:= 0; for i := 1 to 5 do if (self.item[i]<> ") then inc(j); if(j=5) then result := true; end; procedure TForm2.Button2Click(Sender: TObject); begin Raumwechsel('Norden'); end; procedure TForm2.FormCreate(Sender: TObject); begin Rucksack:=TRucksack.create memo1.lines.add('Herzlich Willkommen in der Welt der Simpsons'); Garten := TRaum.Create; Eingang := TRaum.Create; Flur := TRaum.Create; Fluroben := TRaum.Create; Kueche := TRaum.Create; TVRoom := TRaum.Create; Wohnzimmer := TRaum.Create; Esszimmer := TRaum.Create; Flur2 := TRaum.create; Flur3 := TRaum.Create; Maggiesraum := TRaum.Create; Lisasraum := TRaum.Create; Bartszimmer :=TRaum.Create; Badezimmer := TRaum.Create; Badezimmer2 := TRaum.create; Elternschlafzimmer :=TRaum.Create; Garten.Beschreibung :=('Nun stehen Sie vor dem Haus der Simpsons.Treten Sie doch ein'); Eingang.Beschreibung :=('Wie Sie sehen werden Sie bereits erwartet'); Flur.Beschreibung :=('Sie stehen nun im Flur.Wohin wollen Sie als nächstes?'); Fluroben.Beschreibung :=('Sie haben den ersten Stock des Hauses betreten'); Kueche.Beschreibung :=('Haben Sie Hunger? Dann sind Sie hier genau richtig, denn Sie sind in der Küche gelandet'); Esszimmer.Beschreibung :=('Sie haben das Esszimmer betreten'); Wohnzimmer.Beschreibung := ('Sie befinden sich nun im gemütlichstem Zimmer des Hauses , dem Wohnzimmer'); TVRoom.Beschreibung :=('Erkennen Sie dieses Zimmer vielleicht wieder? Es ist wohl das bekannteste der Simpsonsfamilie'); Fluroben.Beschreibung :=('Nun stehen Sie im ersten Stock. Wohin soll es nun gehen?'); Flur2.Beschreibung :=('Nun stehen sie weiter Rechts im Flur und haben die Wahl zwischen dem Badezimmer und dem Elternschlafzimmer'); Flur3.Beschreibung :=('Sie haben sich dazu entschieden, weiter links in den Flur hinein zu gehen und haben nun die Wahl zwischen Barts Zimmer und dem zweiten Badezimmer') Bartszimmer.Beschreibung := ('Hier herrscht das Chaos.Sind Sie sicher ,dass sie hier hin wollten?'); Lisaszimmer.Beschreibung :=('Lust auf eine Runde Saxophon? Lisas Zimmer ist perfekt dafür!'); Elternschlafzimmer.Beschreibung := ('Hier im Elternschlafzimmer haben Sie ja eigentlich nichts zu suchen , aber wir drücken mal ein Auge zu'); Badezimmer.Beschreibung := ('Nach langem Suchen haben sie endlich das erste der zwei Badezimmer gefunden'); Badezimmer2.Beschreibung := ('Toilette frei, hier kommt das zweite Badezimmer'); Maggieszimmer.Beschreibung := ('Achtung, ein freilaufendes Baby, herumliegende Schnuller und Legowurfattacken gehören hier zur Standarteinrichtung'); Garten.setAusgaenge(Eingang, nil, nil, nil, nil, nil); Eingang.setAusgaenge(Flur, Garten, nil, nil, nil, nil); Flur.setAusgaenge(Kueche, Eingang, Wohnzimmer, Esszimmer ,Fluroben ,nil); Wohnzimmer.setAusgaenge(TVRoom, nil, nil, Flur, nil, nil); TVRoom.setAusgaenge(nil, Wohnzimmer, nil, Kueche, nil, nil); Kueche.setAusgaenge nil, Esszimmer, TVRoom, nil, nil, nil); Esszimmer.setAusgaenge(Kueche, nil, Flur, nil, nil, nil); Fluroben.setAusgaenge( Maggiesraum, Lisasraum, Flur2, Flur3, nil, Flur); Flur2.setAusgaenge(Badezimmer, Elternschlafzimmer, Fluroben, nil, nil, nil); Flur3.setAusgaenge(Badezimmer2, Bartszimmer, nil, Fluroben, nil, nil); Flur.Gegenstand:= ' '; Fluroben.Gegenstand:= ' '; Flur2.Gegenstand:= ' '; Flur3.Gegenstand:= ' '; Maggiesraum.Gegenstand:= 'blauer Schnuller'; Lisasraum.Gegenstand:= 'Saxophon'; Bartszimmer.Gegenstand:= 'Krusty-der-Clown-Aufziehpuppe'; Elternschlafzimmer.Gegenstand:= ' '; Badezimmer.Gegenstand := ' '; Badezimmer2.Gegenstand := ' '; Garten.Gegenstand := ' '; Eingang.Gegenstand := ' '; Kueche.Gegenstand := ' Mit rosa Glassur überzogener Donut'; TVRoom.Gegenstand := 'Duffbierdose'; Esszimmer.Gegenstand := ' '; Kueche.Gegenstand := ' '; Wohnzimmer. Gegenstand := ' '; aktuellerRaum := Garten ; Garten.Fotoreferenz := 'Bilder/Klassenraum.jpg'; Eingang.Fotoreferenz := 'Bilder/Eingang.jpg'; Flur.Fotoreferenz := 'Bilder/Flur.jpg'; Kueche.Fotoreferenz := 'Bilder/Kueche.jpg'; Esszimmer.Fotoreferenz := 'Bilder/Esszimmer.jpg'; TVRoom.Fotoreferenz := 'Bilder/TVRoom.jpg'; Wohnzimmer.Fotoreferenz := 'Bilder/Wohnzimmer.jpg'; Maggiesraum.Fotoreferenz := 'Bilder/Maggiesraum.jpg'; Lisasraum.Fotoreferenz := 'Bilder/Lisasraum.jpg'; Elternschlafzimmer.Fotoreferenz := 'Bilder/Elternschlafzimmer.jpg'; Badezimmer.Fotoreferenz := 'Bilder/Badezimmer1.jpg' Bartszimmer.Fotoreferenz := 'Bilder/Bartszimmer.jpg'; Badezimmer2.Fotoreferenz :='Bilder/Badezimmer2.jpg'; Image1.Picture.LoadFromFile(aktueller.Raum.Fotorefetenz); end; procedure TRaum.setAusgaenge (norden, sueden, westen, osten : TRaum); begin self.Norden := norden; self.Sueden := sueden; self.westen := westen; self.osten := osten; end; procedure TForm2.Raumwechsel (Eingabe:String); begin Memo1.clear; Rucksack.hinzufuegen(aktuellerRaum.Gegenstand); Eingabe := Edit1.text; if (Eingabe = 'Norden') and (aktuellerRaum.Norden <> nil) then aktuellerRaum := aktuellerRaum.Norden; if (Eingabe = 'Sueden') and (aktuellerRaum.Sueden <> nil) then aktuellerRaum := aktuellerRaum.Sueden; if (Eingabe = 'Westen') and (aktuellerRaum.Westen <> nil) then aktuellerRaum := aktuellerRaum.Westen; if (Eingabe = 'Osten') and (aktuellerRaum.Osten <> nil) then aktuellerRaum := aktuellerRaum.Osten; Memo1.Lines.add(aktuellerRaum.Beschreibung); Memo1.Lines.add(' '); Memo1.linesadd('Im Rucksack enthalten:' + Rucksack.ausgeben); if Rucksack.voll then Memo1.lines.add('Glückwunsch, Sie haben alle Gegenstände gefunden'); Memo1.lines.add(' '); Memo1.Lines.add('Wählen Sie die gewünchte Richtung in die Sie gehen möchten'); if aktuellerRaum.Norden <> nil then memo1.lines.add('--> Norden'); if aktuellerRaum.Sueden <> nil then memo1.Lines.add('--> Sueden'); if aktuellerRaum.Westen <> nil then memo1.Lines.add('--> Westen'); if aktuellerRaum.Osten <> nil then memo1.lines.add ('--> Osten'); end; procedure TForm2.Button3Click(Sender: TObject); begin Raumwechsel('Osten'); end; procedure TForm2.Button4Click(Sender: TObject); begin Raumwechsel('Westen'); end; procedure TForm2.Button5Click(Sender: TObject); begin Raumwechsel('Sueden'); end; procedure TForm2.Button1Click(Sender: TObject); var Eingabe : String; begin aktuellerRaum := Garten; memo1.clear; Eingabe := Edit1.text; if (Eingabe = 'Norden') and (aktuellerRaum.Norden <> nil) then aktuellerRaum := aktuellerRaum.Norden; if (Eingabe = 'Sueden') and (aktuellerRaum.Sueden <> nil) then aktuellerRaum := aktuellerRaum.Sueden; if (Eingabe = 'Westen') and (aktuellerRaum.Westen <> nil) then aktuellerRaum := aktuellerRaum.Westen; if (Eingabe = 'Osten') and (aktuellerRaum.Osten <> nil) then aktuellerRaum := aktuellerRaum.Osten; Memo1.Lines.add(aktuellerRaum.Beschreibung); if aktuellerRaum.Norden <> nil then memo1.lines.add('--> Norden'); if aktuellerRaum.Sueden <> nil then memo1.Lines.add('--> Sueden'); if aktuellerRaum.Westen <> nil then memo1.Lines.add('--> Westen'); if aktuellerRaum.Osten <> nil then memo1.lines.add ('--> Osten'); Memo1.Lines.add(aktuellerRaum.Beschreibung); end; end. Wenn Ihr irgendwelche Fehler findet, bitte bitte sagt Bescheid ! Danke Schön schon einmal im Voraus (: |
AW: Problem mit eigenem Textadventure in Delphi
Hallo und Willkommen in der DP :dp:,
würdest Du Dir ![]() |
AW: Problem mit eigenem Textadventure in Delphi
Der Code ist, so wie er hier eingefügt ist, etwas unübersichtlich.
![]() ![]() Aber könnte zumindest des "begin" nach "implementation" zuviel im Code sein? |
AW: Problem mit eigenem Textadventure in Delphi
ich habe testweise das begin weggemacht, aber daran scheint es nicht zu liegen.
Ich bekomme immer noch die Fehlermeldungen . Vielleicht mal etwas genauer zu der Fehlermeldung : Mir wird immer ein : "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt" angezeigt. Aber ich weiß nicht wirklich, was damit gemeint ist geschweige denn, wie ich diesen Fehler beheben kann. Auch wird mir beim speichern immer angezeigt, dass Feld form2.sueden ( genauso wie bei feld form2.Fotoreferenz, Feld Form2.Gegenstand, Feld Form2.Osten, Feld Form2. Osten und Feld Form2.Westen) keine entsprechende Komponente besitzen würde. |
AW: Problem mit eigenem Textadventure in Delphi
Irgendwie hast du in der Interface-Deklaration TRaum und TForm2 kräftig durchgemischt. Schau dir das mal an. TRucksack hast du ja auch außerhalb von TRaum deklariert.
Grüße Mikhal |
AW: Problem mit eigenem Textadventure in Delphi
An den Fehlermeldungen kann Du Dich nicht orientieren. Du mußt Dein Code erst einmal aufräumen (einrücken). Dafür habe ich Dir 2 Links gegeben. Ich glaube, wenn Du den Code sauber hast, dann siehst Du Deine Fehler selbst.
Mit dem "begin ..end" ist es wie mit den Klammern in Mathe. |
AW: Problem mit eigenem Textadventure in Delphi
Der Code compiliert nicht: Die Deklaration von TRaum innerhalb von TForm2 ist nicht korrekt!
Ups! Roter Kasten? |
AW: Problem mit eigenem Textadventure in Delphi
Delphi-Quellcode:
Das Semikolon nach
type
TRucksack = Class; Item : Array [1..5] of String; procedure hinzufuegen (S:String); function ausgeben : String; Function voll: boolean; end;
Delphi-Quellcode:
gehört da nicht hin. Außerdem kann ich nicht erkennen, wozu das
Class
Delphi-Quellcode:
vor
end;
Delphi-Quellcode:
gehören soll.
implementation
Wie bereits gesagt wurde: Code unbedingt einrücken! |
AW: Problem mit eigenem Textadventure in Delphi
Und noch was:
Delphi-Quellcode:
Flur3.setAusgaenge := (Badezimmer2, Bartszimmer, nil, Fluroben, nil, nil);
Das da compiliert auch nie im Leben. Methoden-Aufrufe sind was anderes als Zuweisungen (:arrow: := ) Die Zeile müsste so aussehen:
Delphi-Quellcode:
Flur3.setAusgaenge(Badezimmer2, Bartszimmer, nil, Fluroben, nil, nil);
Ich glaube du solltest dich nochmal mit ein paar Grundlagen beschäftigen. Der Fehler ist das reinste Chaos und mich wunderts, dass du so viel Code geschrieben hast, ohne ihn scheinbar bis jetzt mal getestet bzw. compiliert hast. |
AW: Problem mit eigenem Textadventure in Delphi
In wie vielen Foren diskutieren wir denn das Problem zur Zeit?
|
AW: Problem mit eigenem Textadventure in Delphi
Ach hier auch. Er sollte erst mal die genannten fehler beheben!
CrossPost ![]() Gruss alfold |
AW: Problem mit eigenem Textadventure in Delphi
Im Moment in 2 oder darf man das nicht?
Ich brauche einfach nur Hilfe dabei, das ist alles. Da wird es doch sicher nicht verkehrt sein, so viele Meinungen dazu zu bekommen, wie möglich ist. Aber das Programm läuft mittlerweile immer noch nicht :( |
AW: Problem mit eigenem Textadventure in Delphi
Wenn man meint, dass 1 Forum nicht reicht, sollte man die Crossposts zumindest verlinken, was auch in allen gängigen Forenregeln steht, die ich so kenne. Und was genau funktioniert jetzt noch nicht? Welche Änderungen hast Du gemacht? :glaskugel:
|
AW: Problem mit eigenem Textadventure in Delphi
Die Frage ist, ob er die ganzen kleinen Bugs, die ihm im DF genannt wurden, schon beseitigt wurden?:wink:
Gruss alfold |
AW: Problem mit eigenem Textadventure in Delphi
Wenn der Code ein Staatsgeheimnis ist, wie sollen wir dann helfen?
|
AW: Problem mit eigenem Textadventure in Delphi
Bis jetzt habe ich alle Änderungen, die mir gesagt worden sind, auch geändert (:
Aber trotzdem geht es nicht :( |
AW: Problem mit eigenem Textadventure in Delphi
Herrgott nochmal, stell doch den aktuellen Source ein, wie sollen wir denn wissen, was nicht stimmt?
|
AW: Problem mit eigenem Textadventure in Delphi
der code steht doch oben.
|
AW: Problem mit eigenem Textadventure in Delphi
Zitat:
Die Fehlermeldung "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt" kann natürlich auch noch aus der IDE kommen. Welche Delphi-Version hast du denn? |
AW: Problem mit eigenem Textadventure in Delphi
nein tut er nicht, genau das ist ja mein Problem :(
Aber ich weiß nicht, wie ich ihn so umschrieben soll, dass er funktioniert. Ich benutze dafür im moment die Trialversion von Delphi XE. |
AW: Problem mit eigenem Textadventure in Delphi
Tips hast Du doch bis zum Abwinken, fang doch mal mit dem Umbau an, als erstes
den Deklarationsblock z.B. so umbauen
Delphi-Quellcode:
type
TRaum = class Beschreibung : string; FotoReferenz : String; Gegenstand : String; Norden, Sueden, Westen, Osten : TRaum; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure setAusgaenge (norden, sueden, westen, osten, hoch, runter : TRaum); end; TRucksack = Class Item : Array [1..5] of String; procedure hinzufuegen (S:String); function ausgeben : String; Function voll: boolean; end; TForm2 = class(TForm) Edit1: TEdit; Button1: TButton; Memo1: TMemo; Image1: TImage; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; |
AW: Problem mit eigenem Textadventure in Delphi
so, habe nun nochmal alles ein wenig ordentlicher angeordnet und versucht endlich alle unwichtigen ends etc wegzulassen.
Aber es klappt immer noch nicht. |
AW: Problem mit eigenem Textadventure in Delphi
Pack das ganze doch mal in ein Zip und lad es hoch...
|
AW: Problem mit eigenem Textadventure in Delphi
Irgendwie macht das echt keinen Spaß. Wie soll man denn helfen, wenn man den aktuellen Stand nicht kennt? Ich rufe ja auch nicht in der Werkstatt an und sage, dass mein Auto nicht läuft und mache dann aber keinerlei Angaben zu Marke/Modell/Baujahr.
|
AW: Problem mit eigenem Textadventure in Delphi
Sry wenn das jetzt fies klingt, aber ich denke, dass es sinnlos ist zu versuchen den Code zu retten.
Man sollte das Projekt komplett neu anfangen. Und diesmal dann Stück für Stück und nicht erst 1000 Fehler in 100 Zeilen Code machen und dann versuchen sie zu beheben :stupid: Außerdem würde es sicher nicht schaden, wenn du dir ein paar Tutorials durchliest. |
AW: Problem mit eigenem Textadventure in Delphi
Das Problem ist ja, dass ich schon mehrmals neu angefangen habe und das Ergebnis immer das selbe war und ich jetzt aber nur noch heute und morgen habe bis ich das ganze abgeben muss ... -.-
|
AW: Problem mit eigenem Textadventure in Delphi
Erst krabbeln, dann laufen lernen :roll:
Tja, das sieht dann nicht so rosig aus, was dein Ultimatum betrifft. Es ist also ein Schulprojekt? Sry, aber sollte man nicht vorher in der Schule etwas lernen, bevor man solche Projekte aufgebrummt bekommt? (Oder handelt euer Lehrer nach meinem Motto? (siehe Signatur)) Du musst eben erst einmal ein paar Grundlagen beherrschen, bevor du dich an so ein Projekt wagst ... |
AW: Problem mit eigenem Textadventure in Delphi
Im
![]() |
AW: Problem mit eigenem Textadventure in Delphi
Also gibt es noch 2 Nächte, die man durcharbeiten kann!
Da dann ran!:thumb: |
AW: Problem mit eigenem Textadventure in Delphi
delphi10 vom DF:
Zitat:
Aber ob es so lehrreich ist, ihm einfach eine fehlerbereinigte Unit hinzuwerfen, ohne das er versteht, was und wieso alles falsch und schlecht war/ist? :? |
AW: Problem mit eigenem Textadventure in Delphi
Ich habe es schon mehrmals geschrieben, aber leider wird meine Antwort nie angenommen .
Der Text funktioniert bei mir nämlich immer noch nicht, obwohl ich mittlerweile sowohl einen fertigen Lösungsweg und auch eine Lösung meines Lehrers bekommen habe. Beide laufen bei mir nicht. Die Fehlermeldung ist und bleibt die selbe. Woran liegt das nur? |
AW: Problem mit eigenem Textadventure in Delphi
Delphi-Quellcode:
Da er sich aus welchem Grund auch immer nicht mehr in meiner Einleitung ändern lässt, hier der momentane Delphicode.
unit Schulprojektbearbeitet;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg; type TRaum = class Beschreibung : string; FotoReferenz : String; Gegenstand : String; Norden, Sueden, Westen, Osten : TRaum; procedure setAusgaenge (norden, sueden, westen, osten, hoch, runter : TRaum); end; TRucksack = Class Item : Array [1..5] of String; procedure hinzufuegen (S:String); function ausgeben : String; Function voll: boolean; end; TForm1= class(TForm1) Edit1: TEdit; Button1: TButton; Memo1: TMemo; Image1: TImage; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Raumwechsel (Eingabe:String); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; aktuellerRaum: TRaum; Garten, Flur, Fluroben, Flur2, Flur3, Maggiesraum,Maggieszimmer,Lisaszimmer, Lisasraum, Bartszimmer, Elternschlafzimmer, Badezimmer, Badezimmer2, Kueche, TVRoom, Esszimmer, Wohnzimmer, Eingang : TRaum; Norden, Sueden, Westen, Osten: TRaum; Rucksack: TRucksack; implementation {$R *.dfm} procedure TRucksack.hinzufuegen ( S:String); var i : integer ; begin i := 1; while (i <= 5) do begin if (self.item[i]=S) then break else if self.item[i]= '' then begin self.item[i] := s; break end; inc(i); end; end; function TRucksack.ausgeben : string; var i: integer; begin result := '' ; i:=1; while (i <=5) do begin if(self.item[i] = '') then break else result := result + self.item[i] + ','; inc(i); end; end; function TRucksack.voll : boolean; var i, j : integer ; begin result := false; j:= 0; for i := 1 to 5 do if (self.item[i]<> '') then inc(j); if(j=5) then result := true; end; procedure TForm1.Button2Click(Sender: TObject); begin Form2.Raumwechsel('Norden'); end; procedure TForm1.FormCreate(Sender: TObject); begin Rucksack:=TRucksack.create; memo1.lines.add('Herzlich Willkommen in der Welt der Simpsons'); Garten := TRaum.Create; Eingang := TRaum.Create; Flur := TRaum.Create; Fluroben := TRaum.Create; Kueche := TRaum.Create; TVRoom := TRaum.Create; Wohnzimmer := TRaum.Create; Esszimmer := TRaum.Create; Flur2 := TRaum.create; Flur3 := TRaum.Create; Maggiesraum := TRaum.Create; Lisasraum := TRaum.Create; Bartszimmer :=TRaum.Create; Lisaszimmer :=TRaum.Create; Badezimmer := TRaum.Create; Badezimmer2 := TRaum.create; Elternschlafzimmer :=TRaum.Create; Garten.Beschreibung :=('Nun stehen Sie vor dem Haus der Simpsons.Treten Sie doch ein'); Eingang.Beschreibung :=('Wie Sie sehen werden Sie bereits erwartet'); Flur.Beschreibung :=('Sie stehen nun im Flur.Wohin wollen Sie als nächstes?'); Fluroben.Beschreibung :=('Sie haben den ersten Stock des Hauses betreten'); Kueche.Beschreibung :=('Haben Sie Hunger? Dann sind Sie hier genau richtig, denn Sie sind in der Küche gelandet'); Esszimmer.Beschreibung :=('Sie haben das Esszimmer betreten'); Wohnzimmer.Beschreibung := ('Sie befinden sich nun im gemütlichstem Zimmer des Hauses , dem Wohnzimmer'); TVRoom.Beschreibung :=('Erkennen Sie dieses Zimmer vielleicht wieder? Es ist wohl das bekannteste der Simpsonsfamilie'); Fluroben.Beschreibung :=('Nun stehen Sie im ersten Stock. Wohin soll es nun gehen?'); Flur2.Beschreibung :=('Nun stehen sie weiter Rechts im Flur und haben die Wahl zwischen dem Badezimmer und dem Elternschlafzimmer'); Flur3.Beschreibung :=('Sie haben sich dazu entschieden, weiter links in den Flur hinein zu gehen und haben nun die Wahl zwischen Barts Zimmer und dem zweiten Badezimmer'); Bartszimmer.Beschreibung := ('Hier herrscht das Chaos.Sind Sie sicher ,dass sie hier hin wollten?'); Lisaszimmer.Beschreibung :=('Lust auf eine Runde Saxophon? Lisas Zimmer ist perfekt dafür!'); Elternschlafzimmer.Beschreibung := ('Hier im Elternschlafzimmer haben Sie ja eigentlich nichts zu suchen , aber wir drücken mal ein Auge zu'); Badezimmer.Beschreibung := ('Nach langem Suchen haben sie endlich das erste der zwei Badezimmer gefunden'); Badezimmer2.Beschreibung := ('Toilette frei, hier kommt das zweite Badezimmer'); Maggieszimmer.Beschreibung := ('Achtung, ein freilaufendes Baby, herumliegende Schnuller und Legowurfattacken gehören hier zur Standarteinrichtung'); Garten.setAusgaenge(Eingang, nil, nil, nil, nil, nil); Eingang.setAusgaenge(Flur, Garten, nil, nil, nil, nil); Flur.setAusgaenge(Kueche, Eingang, Wohnzimmer, Esszimmer ,Fluroben ,nil); Wohnzimmer.setAusgaenge(TVRoom, nil, nil, Flur, nil, nil); TVRoom.setAusgaenge(nil, Wohnzimmer, nil, Kueche, nil, nil); Kueche.setAusgaenge (nil, Esszimmer, TVRoom, nil, nil, nil); Esszimmer.setAusgaenge(Kueche, nil, Flur, nil, nil, nil); Fluroben.setAusgaenge( Maggiesraum, Lisasraum, Flur2, Flur3, nil, Flur); Flur2.setAusgaenge(Badezimmer, Elternschlafzimmer, Fluroben, nil, nil, nil); Flur3.setAusgaenge(Badezimmer2, Bartszimmer, nil, Fluroben, nil, nil); Flur.Gegenstand:= ' '; Fluroben.Gegenstand:= ' '; Flur2.Gegenstand:= ' '; Flur3.Gegenstand:= ' '; Maggiesraum.Gegenstand:= 'blauer Schnuller'; Lisasraum.Gegenstand:= 'Saxophon'; Bartszimmer.Gegenstand:= 'Krusty-der-Clown-Aufziehpuppe'; Elternschlafzimmer.Gegenstand:= ' '; Badezimmer.Gegenstand := ' '; Badezimmer2.Gegenstand := ' '; Garten.Gegenstand := ' '; Eingang.Gegenstand := ' '; Kueche.Gegenstand := ' Mit rosa Glassur überzogener Donut'; TVRoom.Gegenstand := 'Duffbierdose'; Esszimmer.Gegenstand := ' '; Kueche.Gegenstand := ' '; Wohnzimmer. Gegenstand := ' '; aktuellerRaum := Garten ; Garten.Fotoreferenz := 'Bilder/Klassenraum.jpg'; Eingang.Fotoreferenz := 'Bilder/Eingang.jpg'; Flur.Fotoreferenz := 'Bilder/Flur.jpg'; Kueche.Fotoreferenz := 'Bilder/Kueche.jpg'; Esszimmer.Fotoreferenz := 'Bilder/Esszimmer.jpg'; TVRoom.Fotoreferenz := 'Bilder/TVRoom.jpg'; Wohnzimmer.Fotoreferenz := 'Bilder/Wohnzimmer.jpg'; Maggiesraum.Fotoreferenz := 'Bilder/Maggiesraum.jpg'; Lisasraum.Fotoreferenz := 'Bilder/Lisasraum.jpg'; Elternschlafzimmer.Fotoreferenz := 'Bilder/Elternschlafzimmer.jpg'; Badezimmer.Fotoreferenz := 'Bilder/Badezimmer1.jpg'; Bartszimmer.Fotoreferenz := 'Bilder/Bartszimmer.jpg'; Badezimmer2.Fotoreferenz :='Bilder/Badezimmer2.jpg'; Image1.Picture.LoadFromFile(aktueller.Raum.Fotorefetenz); end; procedure TRaum.setAusgaenge (norden, sueden, westen, osten, hoch, runter : TRaum); begin self.Norden := norden; self.Sueden := sueden; self.westen := westen; self.osten := osten; end; procedure TForm1.Raumwechsel (Eingabe:String); begin Memo1.clear; Rucksack.hinzufuegen(aktuellerRaum.Gegenstand); Eingabe := Edit1.text; if (Eingabe = 'Norden') and (aktuellerRaum.Norden <> nil) then aktuellerRaum := aktuellerRaum.Norden; if (Eingabe = 'Sueden') and (aktuellerRaum.Sueden <> nil) then aktuellerRaum := aktuellerRaum.Sueden; if (Eingabe = 'Westen') and (aktuellerRaum.Westen <> nil) then aktuellerRaum := aktuellerRaum.Westen; if (Eingabe = 'Osten') and (aktuellerRaum.Osten <> nil) then aktuellerRaum := aktuellerRaum.Osten; Memo1.Lines.add(aktuellerRaum.Beschreibung); Memo1.Lines.add(' '); Memo1.lines.add('Im Rucksack enthalten:' + Rucksack.ausgeben); if Rucksack.voll then Memo1.lines.add('Glückwunsch, Sie haben alle Gegenstände gefunden'); Memo1.lines.add(' '); Memo1.Lines.add('Wählen Sie die gewünchte Richtung in die Sie gehen möchten'); if aktuellerRaum.Norden <> nil then memo1.lines.add('--> Norden'); if aktuellerRaum.Sueden <> nil then memo1.Lines.add('--> Sueden'); if aktuellerRaum.Westen <> nil then memo1.Lines.add('--> Westen'); if aktuellerRaum.Osten <> nil then memo1.lines.add ('--> Osten'); end; procedure TForm1.Button3Click(Sender: TObject); begin Raumwechsel('Osten'); end; procedure TForm1.Button4Click(Sender: TObject); begin Raumwechsel('Westen'); end; procedure TForm1.Button5Click(Sender: TObject); begin Raumwechsel('Sueden'); end; procedure TForm1.Button1Click(Sender: TObject); var Eingabe : String; begin aktuellerRaum := Garten; memo1.clear; Eingabe := Edit1.text; if (Eingabe = 'Norden') and (aktuellerRaum.Norden <> nil) then aktuellerRaum := aktuellerRaum.Norden; if (Eingabe = 'Sueden') and (aktuellerRaum.Sueden <> nil) then aktuellerRaum := aktuellerRaum.Sueden; if (Eingabe = 'Westen') and (aktuellerRaum.Westen <> nil) then aktuellerRaum := aktuellerRaum.Westen; if (Eingabe = 'Osten') and (aktuellerRaum.Osten <> nil) then aktuellerRaum := aktuellerRaum.Osten; Memo1.Lines.add(aktuellerRaum.Beschreibung); if aktuellerRaum.Norden <> nil then memo1.lines.add('--> Norden'); if aktuellerRaum.Sueden <> nil then memo1.Lines.add('--> Sueden'); if aktuellerRaum.Westen <> nil then memo1.Lines.add('--> Westen'); if aktuellerRaum.Osten <> nil then memo1.lines.add ('--> Osten'); Memo1.Lines.add(aktuellerRaum.Beschreibung); end; end. |
AW: Problem mit eigenem Textadventure in Delphi
*Seufz*
An welcher Stelle (Zeilennummer) tritt denn welcher Fehler auf? PS: Wo ist denn Form2 deklariert, welche du in Button2Click nutzt? |
AW: Problem mit eigenem Textadventure in Delphi
form2 muss eigentl alles form2 sein.
ich kann es nur leider nichtmehr ändern. mir wird an keiner speziellen stelle ein fehler angezeigt sondern direkt zu beginn, wenn ich das projekt starten will. |
AW: Problem mit eigenem Textadventure in Delphi
Wenn Du Form2.Raumwechsel aufrufst, muss es auch irgendwo eine Form2 geben. Also eigentlich eine 2. Unit als Formular, wo diese Form2 zu finden ist. Oder meinst Du Dein Raumwechsel, welchen Du in der Form1 hast, dann heißt das Form1.Raumwechsel. Da Du aus einer Methode aus Form1 den Raumwechsel aufrufst, reicht auch der Aufruf Raumwechsel ohne Form1, natürlich nur, wenn Du den Raumwechsel aus Form1 meinst.
Wünsch Dir noch eine schöne Nacht. |
AW: Problem mit eigenem Textadventure in Delphi
mit dem code so wie er dort steht wirst du beim programmstart eine access violation bekommen, weil du "Maggieszimmer" nicht erstellt hast aber versuchst ihm eine beschreibung zuzuweisen.
Delphi-Quellcode:
fehlt in deinem code.
Maggieszimmer := TRaum.create;
es muss
Delphi-Quellcode:
heissen und nicht
TForm1 = class(TForm)
Delphi-Quellcode:
.
TForm1 = class(TForm1)
tipp: gib deinen controls eindeutige namen, wie z.b. btnNorden, btnSueden usw. macht die ganze sache sehr viel übersichtlicher. |
AW: Problem mit eigenem Textadventure in Delphi
Zitat:
Wenn du den Namen von Form1 ändern möchtest, markiere im Formulardesigner das Formular und trag den neuen Namen im Objektinspektor ein. Tritt schon beim Compilieren ein Fehler auf, also die Anwendung noch garnicht erstellt werden kann, steht der Cursor im Quelltext normalerweise auf der fehlerhaften Stelle und unten erscheint ein Fenster mit der Fehlerbeschreibung. Vieleicht solltest du uns mitteilen in welcher Zeile der Cursor steht und welcher Fehler gemeldet wird? Aber bitte korrigiere erst mal alle schon genannten Fehler. Und formatiere den Quelltext ordentlich, wenn ein Abschnitt beginnt rückt man nachfolgenden Code bis zum ende des Abschnitts ein (insbesondere zwischen "begin" und "end"). "Self" bitte nur verwenden, wenn es wirklich notwendig ist. So kann man auf einn Blick erkennen, was die Funktion eigentlich macht, z.B:
Delphi-Quellcode:
function TRucksack.voll : boolean;
var i, j: integer; begin j := 0; for i := 1 to 5 do if item[i] <> '' then inc(j); result := (j=5); end; |
AW: Problem mit eigenem Textadventure in Delphi
Zitat:
sein program startet erst garnicht, er bekommt ne av. der text der fehlermeldung wäre nicht schlecht. ;) @ gragas: wenn du die delphi xe demo hast, drück mal strg+d zum formatieren. |
AW: Problem mit eigenem Textadventure in Delphi
Mit dem Quältext kommt er noch nicht mal bis zur AV, weil der Compiler meckert.
|
AW: Problem mit eigenem Textadventure in Delphi
Der Fehler "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt" ist eigentlich typisch für .NET-Anwendungen. Ich vermute hier mal stark, daß hier die IDE mit CodeInsight verrückt spielt. Vielleicht hilft es, die entsprechenden Programmierhilfen abzuschalten, damit man überhaupt zum compilieren kommt.
Und: Delphi XE hat einen Code-Formatter! Drück doch mal Ctrl-D... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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 by Thomas Breitkreuz