AGB  ·  Datenschutz  ·  Impressum  







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

Zugriffsverletzung nach Modulus

Ein Thema von RebellX · begonnen am 20. Apr 2010 · letzter Beitrag vom 22. Apr 2010
 
RebellX

Registriert seit: 21. Feb 2009
8 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Zugriffsverletzung nach Modulus

  Alt 20. Apr 2010, 23:47
Zitat:
Mal ne doofe Idee: kann es sein das du Player irgendwo freigegeben hast (ist das ein Objekt oder ein Record?) Was sagt die Glaskugel?
Kann eigentlich nicht sein, da
A: player ist in der procedure mit var übergeben worden, sonst aber ein array [1..8] of tplayer (record)
B: Ich davor und danach darauf zugreifen kann, wenn ich die o.g. Zeilen auskommentiere
C: Ich recht wenig freigebe, da das meiste statisch ist und ich mich so nicht drum kümmern muss

Das ganze Projekt ist eine Art Brettspiel. Bis zu 8 Spieler können durch 5 Aktionen pro Zug über ein Spielfeld sich bewegen und müssen Punkte erreichen. Dabei werden sie zusätzlich von den verschiedenen Feldern des Spielfeldes bewegt.
Heißt also in der Berechnung hat jeder Spieler eine X und Y Koordinate sowie eine Orientierung (halt die Eigenschaft angle, also 0, 90, 180, 270° als 0-3 dargestellt).
Zur Anzeige der Bewegung wird dafür wieder rückwärts eine "Animation" erstellt, sprich es wird gespeichert, wie der Spieler bewegt wurde und er wird fürs Anzeigen zurückbewegt. Diese "Animation" wird dann immer weiter verringert, bis der Spieler da angezeigt wird, wo er tatsächlich steht. Das funktionioniert auch ohne die drei Zeilen ohne Probs. Nur sind die unumgänglich um die Spieler zu drehen (oder wie könnte man das einfacher machen?)

Ein paar Definitionen von TPlayer etc. :

Delphi-Quellcode:
type
  TPlayer = record
    X, Y, angle: byte;
    //Animation
    ani_x, ani_y, ani_z, ani_angle, ani_wait: array of smallint;
    ani_count: byte;
    //... unwichtige booleanwerte für Handkarten etc, noch nicht implementiert...
  end;

const
  Move_1 = $01;
  Move_2 = $02;
  Move_3 = $03;
  Turn_Left = $04;
  Turn_Right = $05;
  U_Turn = $06;
  Back_Up = $07;
Die Methode mit der Berechnung:

Delphi-Quellcode:
procedure execute(befehl: byte; var Aplayer: tplayer);
var i: byte;
begin
  if (befehl = 0) or (befehl > 7) then exit;
  if befehl <= move_3 then
    for i := 1 to befehl do
    begin
      moveplayer(aplayer, aplayer.angle);
    end
  else
  if befehl = Turn_left then
  begin
    aplayer.angle := (aplayer.angle - 1 + 4) mod 4;
    addanimate(aplayer, AT_Angle, +30);
  end
  else
  if befehl = Turn_Right then
  begin
    aplayer.angle := (aplayer.angle + 1 + 4) mod 4;
    addanimate(aplayer, AT_Angle, -30);
  end
  else
  if befehl = U_Turn then
  begin
    aplayer.angle := (aplayer.angle + 2 + 4) mod 4;
    if random(2) = 1 then addanimate(aplayer, AT_Angle, -60)
    else
    addanimate(aplayer, AT_Angle, +60);
  end
  else
  if befehl = Back_Up then
  begin
    moveplayer(aplayer, (aplayer.angle + 2 + 4) mod 4);
  end;
end;
Moveplayer und addanimate arbeiten ohne Probleme und auch das Auskommentiere schafft keine Besserung.

P.S.: Player heißt da Aplayer, da Player im Hauptprogramm eben ein Array ist
  Mit Zitat antworten Zitat
 


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 03:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz