Lan Amk
Lan Amk

Reputation: 1

Violation Acess when I try to Acess the Attribut Norden

I am programming on Lazarus and this happens:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
  TRaum = class
    Beschreibung: String;
    Norden, Sueden, Westen, Osten: TRaum;
    procedure setAusgaenge(nord, ost, sued, west: TRaum);
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    Computerraum, Flur, Lehrerzimmer, Abstellkammer: TRaum;
    aktuellerRaum: TRaum;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TRaum }

procedure TRaum.setAusgaenge(nord, ost, sued, west: TRaum);
begin
  Norden := nord;
  Osten := ost;
  Sueden := sued;
  Westen := west;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  Computerraum := TRaum.Create;
  Flur := TRaum.Create;
  Lehrerzimmer := TRaum.Create;
  Abstellkammer := TRaum.Create;
  Computerraum.Beschreibung := 'Sie stehen im Computerraum.';
  Flur.Beschreibung := 'Sie betreten einen Flur mit drei Türen.';
  Lehrerzimmer.Beschreibung := 'Das ist das Lehrerzimmer.';
  Abstellkammer.Beschreibung := 'Das ist eine Abstellkammer, sie ist leer.';
  Flur.setAusgaenge(Lehrerzimmer, Abstellkammer, Computerraum, nil);
  Computerraum.setAusgaenge(Flur, nil, nil, nil);
  Abstellkammer.setAusgaenge(nil, nil, nil, Flur);
  Lehrerzimmer.setAusgaenge(nil, nil, Flur, nil);
  aktuellerRaum := Flur;
  Memo1.Lines.Add(aktuellerRaum.Beschreibung);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Eingabe: string;
begin
  Eingabe := Edit1.Text;
  if Eingabe = 'Norden' then
  begin
    if aktuellerRaum.Norden <> nil then
    begin
      aktuellerRaum := aktuellerRaum.Norden;
      Memo1.Lines.Add(aktuellerRaum.Beschreibung);
    end
    else
    begin
      Memo1.Lines.Add('Es gibt keinen Ausgang nach Norden.');
    end;
  end
  else if Eingabe = 'Osten' then
  begin
    if aktuellerRaum.Osten <> nil then
    begin
      aktuellerRaum := aktuellerRaum.Osten;
      Memo1.Lines.Add(aktuellerRaum.Beschreibung);
    end
    else
    begin
      Memo1.Lines.Add('Es gibt keinen Ausgang nach Osten.');
    end;
  end
  else if Eingabe = 'Sueden' then
  begin
    if aktuellerRaum.Sueden <> nil then
    begin
      aktuellerRaum := aktuellerRaum.Sueden;
      Memo1.Lines.Add(aktuellerRaum.Beschreibung);
    end
    else
    begin
      Memo1.Lines.Add('Es gibt keinen Ausgang nach Süden.');
    end;
  end
  else if Eingabe = 'Westen' then
  begin5
    if aktuellerRaum.Westen <> nil then
    begin
      aktuellerRaum := aktuellerRaum.Westen;
      Memo1.Lines.Add(aktuellerRaum.Beschreibung);
    end
    else
    begin
      Memo1.Lines.Add('Es gibt keinen Ausgang nach Westen.');
    end;
  end
  else
  begin
    Memo1.Lines.Add('Ungültige Eingabe.');
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Text := 'Hallo, willkommen im Textadventure';
end;

end.

When I try to put in Edit1 the attribute "Norden" and click then on button 1, it shows a violation error. It says that something is wrong with line 79.

Upvotes: 0

Views: 35

Answers (0)

Related Questions