Einzelnen Beitrag anzeigen

Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#1

Prinzip funktioniert anscheinend nicht...

  Alt 28. Sep 2009, 18:36
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
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat