Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prinzip funktioniert anscheinend nicht... (https://www.delphipraxis.net/140905-prinzip-funktioniert-anscheinend-nicht.html)

Teekeks 28. Sep 2009 17:36


Prinzip funktioniert anscheinend nicht...
 
Hallo!
Das wird jetzt etwas länger,aber ich bin total am verzweifeln...

Also erstmal was ich machen will.
Ich habe ein Array of record welches u.a. eine Boolsche Variable, eine ID und ein array[1..4] of integer in das ID's von anderen
Records aus dem selben Array gespeichert werden.
Nun möchte ich auf ein Record, dessen ID in dem Array eines vorhandenen records steht, zugreifen und dort besagte Boolsche variable ändern.

Zugreifen tu ich so:
Delphi-Quellcode:
function TCaveControl.GetCaveByID(ID: integer): TCave;
var x:integer;
begin
  for x:=0 to High(_Caves) do
    if _Caves[x].ID=ID then
    begin
      result:=_Caves[x];
      exit;
    end;
end;
{_Caves=array of TCave}
Soweit so gut.
Ändern tu ich so:
Delphi-Quellcode:
procedure TCaveControl.ChangeCave(ID: integer; Cave: TCave);
var t:integer;
begin
  for t:=0 to High(_Caves) do
    if _caves[t].ID=ID then
    begin
      _caves[t]:=cave;
      exit;
    end;
end;
und die eine Variable ändern tu ich so:
Delphi-Quellcode:
procedure TGameControl.UseEdE;
var i:integer;
    cavece:TCave;
begin
  Dec(EdE);
  for i:=1 to 4 do
  if GetCaveByID(GetPlayerPos).nextCaves[i]>0 then
    begin
      cavece:=GetCaveByID(GetCaveByID(GetPlayerPos).nextCaves[i]);
      cavece.isVisible:=true;
      ChangeCave(getPlayerPos,cavece);
    end;
  paintmap;
end;
GetPlayerPos sagt mir die ID des aktuellen records, bei dessen Nachbarn (deren ID's in nextcaves stehen) ich die variable ändern möchte.

Nun zu meinem Problem:
Wenn ich das so mache, tut er alles, nur nicht das was er soll...
also ein konkretes Beispiel:
aktuelles record:
nextcaves=25 19 7 0
ID=14

25 ist nicht sichtbar
19 ist nicht sichtbar
7 ist sichtbar
0 wird ausgefiltert.

nun ändert der aber so:
aktuelles (14) ist nichtmehr sichtbar
25 ist sichtbar, nun aber mit 4 verbunden, welches vorher nicht war
19 nicht sichtbar
7 ist sichtbar (war es aber schon vorher)

Hat einer von euch eine Ahnung wieso das so ist?

Gruß Teekeks

Uwe Raabe 28. Sep 2009 17:51

Re: Prinzip funktioniert anscheinend nicht...
 
Du musst den Record auch wieder an die Stelle schreiben, von dem du ihn geholt hast:

Delphi-Quellcode:
procedure TGameControl.UseEdE;
var i:integer;
    n: integer;
    cavece:TCave;
begin
  Dec(EdE);
  for i:=1 to 4 do
  begin
    n := GetCaveByID(GetPlayerPos).nextCaves[i];
    if n>0 then
      begin
        cavece:=GetCaveByID(n);
        cavece.isVisible:=true;
        ChangeCave(n,cavece);
      end;
  end;
  paintmap;
end;

Teekeks 28. Sep 2009 17:59

Re: Prinzip funktioniert anscheinend nicht...
 
cool, danke.
Hatte anscheinend gerade ein Knoten im Hirn, ich hab das an ähnlichen Stellen schon mehrmals gemacht...

DANKE!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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