AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit eigenem Textadventure in Delphi

Ein Thema von Gragas · begonnen am 20. Dez 2010 · letzter Beitrag vom 22. Dez 2010
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Gragas

Registriert seit: 16. Dez 2010
15 Beiträge
 
#31

AW: Problem mit eigenem Textadventure in Delphi

  Alt 21. Dez 2010, 22:21
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?
  Mit Zitat antworten Zitat
Gragas

Registriert seit: 16. Dez 2010
15 Beiträge
 
#32

AW: Problem mit eigenem Textadventure in Delphi

  Alt 21. Dez 2010, 22:23
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;


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.
Da er sich aus welchem Grund auch immer nicht mehr in meiner Einleitung ändern lässt, hier der momentane Delphicode.

Geändert von Gragas (21. Dez 2010 um 22:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#33

AW: Problem mit eigenem Textadventure in Delphi

  Alt 21. Dez 2010, 22:28
*Seufz*
An welcher Stelle (Zeilennummer) tritt denn welcher Fehler auf?

PS: Wo ist denn Form2 deklariert, welche du in Button2Click nutzt?
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Gragas

Registriert seit: 16. Dez 2010
15 Beiträge
 
#34

AW: Problem mit eigenem Textadventure in Delphi

  Alt 21. Dez 2010, 23:49
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.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#35

AW: Problem mit eigenem Textadventure in Delphi

  Alt 22. Dez 2010, 00:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#36

AW: Problem mit eigenem Textadventure in Delphi

  Alt 22. Dez 2010, 04:04
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.

Maggieszimmer := TRaum.create; fehlt in deinem code.

es muss TForm1 = class(TForm) heissen und nicht TForm1 = class(TForm1) .

tipp: gib deinen controls eindeutige namen, wie z.b. btnNorden, btnSueden usw. macht die ganze sache sehr viel übersichtlicher.
Gruß
Cookie

Geändert von cookie22 (22. Dez 2010 um 04:13 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#37

AW: Problem mit eigenem Textadventure in Delphi

  Alt 22. Dez 2010, 07:50
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.
Also das Form2 and dieser Stelle entferne mal bitte, das ist irgend ein fehlerhaftes Rudiment.
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;
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#38

AW: Problem mit eigenem Textadventure in Delphi

  Alt 22. Dez 2010, 08:06
Zitat:
Vieleicht solltest du uns mitteilen in welcher Zeile der Cursor steht und welcher Fehler gemeldet wird?
hat er doch mehr oder weniger.

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.
Gruß
Cookie

Geändert von cookie22 (22. Dez 2010 um 08:15 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#39

AW: Problem mit eigenem Textadventure in Delphi

  Alt 22. Dez 2010, 08:16
Mit dem Quältext kommt er noch nicht mal bis zur AV, weil der Compiler meckert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#40

AW: Problem mit eigenem Textadventure in Delphi

  Alt 22. Dez 2010, 08:33
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...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 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