AGB  ·  Datenschutz  ·  Impressum  







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

Hilfe mit Textadventure

Ein Thema von MW28 · begonnen am 8. Jan 2015 · letzter Beitrag vom 9. Jan 2015
Antwort Antwort
Seite 1 von 2  1 2      
MW28

Registriert seit: 8. Jan 2015
5 Beiträge
 
#1

Hilfe mit Textadventure

  Alt 8. Jan 2015, 17:15
Hallo ,

ich muss für die Schule als Projekt ein Textadventure mit Delphi 7 erstellen(nichts allzu kompliziertes). Ich habe nun schon ein wenig angefangen soweit ich konnte, jetzt komm ich aber bei den Attributen(?) für die Klassen nicht so recht weiter. Das ganze compiled zwar, nimmt aber die Attribute nicht so recht an (bleiben auf nil). Falls ich irgendeinen offensichlichen Fahler gemacht hab tut es mir leid aber wir haben erst ca. 15 Doppelstunden Informatik gehabt und unser Lehrer ist nicht grade gut im Erklären bzw. erklärt garnichts sondern gibt einfach nur Arbeitsblätter.

Hier der Quellcode von Form1 :
Delphi-Quellcode:
unit DelphiSpiel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, URaum, ExtCtrls, StdCtrls, JPEG ;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Button1: TButton;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    
  public

  end;

var
  Form1: TForm1;
  info_aktuellerRaum : string ;
  info_startRaum : string ;
  info_raum1 : string ;
  info_raum2 : string ;
  info_raum3 : string ;
  aktuellerRaum , startRaum , raum1 , raum2 , raum3 : TRaum ;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
image1.canvas.create ;

startRaum := TRaum.Create;
startRaum.setAusgang(raum1,nil,nil,nil);
info_startRaum := 'Dies ist der Start. Hier geht es nur in eine Richtung' ;

raum1 := TRaum.Create ;
raum1.setAusgang(raum2,nil,raum3,nil,);
info_raum1 := 'dies ist raum1' ;

raum2 := TRaum.Create ;
raum2.setAusgang(nil,raum1,nil,nil);
info_raum2 := 'dies ist raum2' ;

raum3 := TRaum.Create ;
raum3.setAusgang(nil,nil,nil,raum1);
info_raum3 := 'dies ist raum3' ;

aktuellerRaum := TRaum.Create ;
aktuellerRaum.setAusgang(nil,nil,nil,nil);
info_aktuellerRaum := 'fehler'  ;

aktuellerRaum := startRaum ;
info_aktuellerRaum := info_startRaum ;

Memo1.Clear ;
Memo1.Lines.add(info_aktuellerRaum) ;
if aktuellerRaum.Fnorth <> nil then Memo1.Lines.add('---->Norden') ;
if aktuellerRaum.Fsouth <> nil then Memo1.Lines.add('---->Süden') ;
if aktuellerRaum.Feast <> nil then Memo1.Lines.add('---->Osten') ;
if aktuellerRaum.Fwest <> nil then Memo1.Lines.add('---->Westen') ;
if startRaum.Fnorth = nil then Memo1.Lines.add('attribute wurden nicht richtig festgelegt');


end;

procedure TForm1.Button1Click(Sender: TObject);
var eingabe : string;
begin
eingabe := edit1.Text ;
if (eingabe = 'Norden')and (aktuellerRaum.Fnorth = nil) then aktuellerRaum := aktuellerRaum.Fnorth ;
if (eingabe = 'Süden')and (aktuellerRaum.Fsouth <> nil) then aktuellerRaum := aktuellerRaum.Fsouth ;
if (eingabe = 'Osten')and (aktuellerRaum.Feast <> nil) then aktuellerRaum := aktuellerRaum.Feast ;
if (eingabe = 'Westen')and (aktuellerRaum.Fwest <> nil) then aktuellerRaum := aktuellerRaum.Fwest ;

Memo1.clear ;
Memo1.Lines.add(info_aktuellerRaum);

if aktuellerRaum.Fnorth <> nil then Memo1.Lines.add('---->Norden') ;
if aktuellerRaum.Fsouth <> nil then Memo1.Lines.add('---->Süden') ;
if aktuellerRaum.Feast <> nil then Memo1.Lines.add('---->Osten') ;
if aktuellerRaum.Fwest <> nil then Memo1.Lines.add('---->Westen') ;

end;

end.
Und hier der von URaum:
Delphi-Quellcode:
unit URaum;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, JPEG;

type
  TRaum = class
   Fnorth,Fsouth,Feast,Fwest : TRaum;
   procedure setAusgang(n,s,e,w : TRaum);
   Constructor Create;

   private

   public

end;

implementation
Constructor TRaum.Create;
begin
self.Fnorth := Fnorth;
self.Fsouth := Fsouth;
self.Feast := Feast;
self.Fwest := Fwest;
end;

procedure TRaum.setAusgang(n,s,e,w : TRaum) ;
begin
self.Fnorth := Fnorth;
self.Fsouth := Fsouth;
self.Feast := Feast;
self.Fwest := Fwest;
end;
end.
Soweit ich inzwischen weiß müsste man das garnicht in verschieden Dateien machen, aber unser Leherer hat uns das so gezeigt.

Schon mal vielen Dank im Vorraus.
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#2

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 17:25
Ich drück mal beide Augen fest zu und antworte möglichst produktiv.
Schau mal hier:
Delphi-Quellcode:
procedure TRaum.setAusgang(n,s,e,w : TRaum) ;
begin
 self.Fnorth := Fnorth;
 self.Fsouth := Fsouth;
 self.Feast := Feast;
 self.Fwest := Fwest;
end;
Untersuche genau, was du hier zuweist.
gruß j
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!

Geändert von Jonas Shinaniganz ( 8. Jan 2015 um 17:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 17:31
Und den Sinn von
Zitat:
image1.canvas.create ;
solltest Du uns vielleicht auch einmal erklären.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 17:50
Also den Raum selber würde ich schon anders aufbauen. Warum merkt sich der Raum nicht die Beschreibung selber?

Und wenn ich mich von einem Raum in eine Richtung x bewege, dann kann diese Methode doch einfach eine Raum-Instanz zurückliefern. Gibt es keinen Raum in Richtung x, dann liefert der Raum einfach die eigene Instanz zurück.

Delphi-Quellcode:
Procedure TForm.Move ( ADirection : TDirection );
begin
  FCurrentRoom := FCurrentRoom.MoveTo ( ADirection );
end;
Sieht viel einfacher aus und ist auch leichter zu verstehen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
MW28

Registriert seit: 8. Jan 2015
5 Beiträge
 
#5

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 18:16
Untersuche genau, was du hier zuweist.
gruß j
Ich vermute mal das ist total unnötig? Zu meiner Verteidigung muss ich sagen das das nach den etwas dürftigen AB's meines Lehrers entstanden ist.

Zitat von DeddyH:
Und den Sinn von
Zitat:
image1.canvas.create ;
solltest Du uns vielleicht auch einmal erklären.
Das ist lediglich zum Testen bzw. als Platzhalter drin. Wir sollen zu jedem Raum ein Bild anzeigen lassen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 18:39
Untersuche genau, was du hier zuweist.
gruß j
Ich vermute mal das ist total unnötig? Zu meiner Verteidigung muss ich sagen das das nach den etwas dürftigen AB's meines Lehrers entstanden ist.

Zitat von DeddyH:
Und den Sinn von
Zitat:
image1.canvas.create ;
solltest Du uns vielleicht auch einmal erklären.
Das ist lediglich zum Testen bzw. als Platzhalter drin. Wir sollen zu jedem Raum ein Bild anzeigen lassen.
Das ist nicht unnötig, sondern du weist dem Wert den gleichen Wert zu. Du legst also die 5€ in deine Geldbörse, die da schon drin waren und denkst, jetzt habe ich 10€.
Delphi-Quellcode:
var
  a : Integer;
begin
  a := a; // toll ... aber wozu, in a steht eh schon der Wert von a drin, weil ist ja auch a
end;
Delphi-Quellcode:
procedure TRaum.setAusgang(n,s,e,w : TRaum) ;
begin
 self.Fnorth := n;
 self.Fsouth := s;
 self.Feast := e;
 self.Fwest := w;
end;
Somit ist das nicht der Fehler auf dem AB deines Lehrers, sondern DU hast das nicht verstanden.

image.canvas.create; ruft den constructor der bereits erzeugten Instanz auf. Es wird dadurch keine neue Instanz erzeugt. Ist in diesem Zusammenhang also sinnlos.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
MW28

Registriert seit: 8. Jan 2015
5 Beiträge
 
#7

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 19:47
[QUOTE=Sir Rufo;1285957][QUOTE=MW28;1285948]

Somit ist das nicht der Fehler auf dem AB deines Lehrers, sondern DU hast das nicht verstanden.
Delphi-Quellcode:
constructor TFruit.Create(name: string);
begin
  // And save the fruit name
  self.name := name;
end;
Auszug aus dem PDF Arbeitsblatt zum Constructor. Wir haben allerdings auch ein Blatt bekommen wo das so wie du das gemacht hast(also mit n,s,e,w) angedeutet wird.Die Möglichkeit die du nennst hatte ich schon einmal ausprobiert, macht aber auch keinen Unterschied. Das Problem bleibt bestehen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 20:03
Also schauen wir uns mal das vom Arbeitsblatt an
Delphi-Quellcode:
constructor TFruit.Create(name: string);
begin
  // And save the fruit name
  self.name := name;
end;
und das was du daraus gemacht hast
Delphi-Quellcode:
constructor TFruit.Create(name: string);
begin
  // And save the fruit name
  self.Fname := Fname;
end;
Was fällt uns auf? Eben, denn richtig wäre
Delphi-Quellcode:
constructor TFruit.Create(name: string);
begin
  // And save the fruit name
  self.Fname := name;
end;
denn
Delphi-Quellcode:
constructor TFruit.Create( {Argument} name: string);
begin
  // And save the fruit name
  self.name := {Argument} name;
end;
Es hat einfach damit zu tun, dass der Compiler sich hier entscheiden muss, worauf sich name denn nun bezieht. Auf ein Element der Klasse oder eben das Argument. Da das Argument der Methode in der Methode aber näher ist als die Klasse, bezieht sich name auf das Argument. Um auf die Klassen-Variable zuzugreifen muss man den Scope mit angeben durch self.name .
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 21:11
Es hat schon seinen Grund, warum Borland mal empfohlen hat, Parameter mit einem "A" als Prefix zu versehen, sowie Felder mit einem "F"-Prefix:
Delphi-Quellcode:

constructor TFruit.Create(AName: string);
begin
  // And save the fruit name
  self.FName := AName;
end;
Nochmal hervorgehoben: self.FName := AName;
So gibts auch keine babylonische Sprachverwirrung mit "name" als Parameter und "name" als Feld. Ich glaube, das der TE nämlich diesen Zusammenhang gar nicht erkannt hat. Und Asche auf das Haupt des Lehrers, der das selbst nicht gerafft hat.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Hilfe mit Textadventure

  Alt 8. Jan 2015, 21:25
Woraus schliesst du, dass der Lehrer da was nicht gerafft hat? Das kann ich daraus nicht ableiten.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:44 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