Aua, den Code solltest du zuerst mal ordentlich formatieren, dann würde man vielleicht auch etwas erkennen.
Jedenfalls sind da z.B. in mStein.pas ein paar dicke Fehler:
6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| { ... } type TStein= class(Tobject) private Stein: Ticon; Leinwand: TImage; public constructor create(pLeinwand: Timage ; PPosX, PPosY: Integer); procedure zeichnen(PPosX, PPosY: Integer); function gibX: Integer; function gibY: Integer; end; var PosX, PosY, PPosX, PPosY: Integer;
implementation constructor TStein.create(pLeinwand: TImage; PPosX, PPosY: Integer); begin Leinwand:= pLeinwand; Stein:= Ticon.Create; Stein.LoadFromFile('Spiel\res\stone_green.ico'); end; procedure TStein.zeichnen(PPosX, PPosY: Integer); begin Leinwand.Canvas.Draw(PPosX, PPosY, Stein); end; function TStein.gibX: Integer; begin PosX:= PPosX; result:= PosX; end; function TStein.gibY: Integer; begin PosY:= PPosY; result:= PosY; end; |
Dann fangen wir mal an:
Delphi-Quelltext
1: 2:
| var PosX, PosY, PPosX, PPosY: Integer; |
Wozu PPosX und PPosY?
Zudem hast du
zwei Steine, aber nur
einmal PosX und PosY. Wie willst du in den selben Variablen die Werte beider Steine unterbringen...
Deshalb: globale Variablen sind Pfui. Die gehören wie auch Stein und Leinwand unter private.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| constructor TStein.create(pLeinwand: TImage; PPosX, PPosY: Integer); begin Leinwand:= pLeinwand; Stein:= Ticon.Create; Stein.LoadFromFile('Spiel\res\stone_green.ico'); end; |
Und warum ignorierst du PPosX und PPosY? Wenn du die Werte nicht speicherst (wie pLeinwand), sind die eben weg.
Delphi-Quelltext
1:
| Stein.LoadFromFile('Spiel\res\stone_green.ico'); |
Relative Pfade gehen sehr leicht ins Auge. Wenn du Windows nicht sagst wo der Pfad liegt, dann muss Windows raten. Und das ist keine gute Idee.
www.delphi-library.d...ewtopic.php?p=499701
Delphi-Quelltext
1: 2: 3: 4: 5:
| function TStein.gibX: Integer; begin PosX:= PPosX; result:= PosX; end; |
Hmm, du liest hier aus PPosX. Aber du setzt das vorher nirgends. Also ist der Wert 0.
Wie wäre es so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| unit mStein;
interface
uses ExtCtrls, Graphics, SysUtils;
type TStein = class(Tobject) private Stein: Ticon; Leinwand: TImage; PosX, PosY: Integer; public constructor Create(pLeinwand: Timage ; PPosX, PPosY: Integer); procedure zeichnen(PPosX, PPosY: Integer); function gibX: Integer; function gibY: Integer; end;
implementation
constructor TStein.Create(pLeinwand: TImage; PPosX, PPosY: Integer); begin Leinwand := pLeinwand; Stein := TIcon.Create; Stein.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Spiel\res\stone_green.ico'); PosX := PPosX; PosY := PPosY; end;
procedure TStein.zeichnen(PPosX, PPosY: Integer); begin Leinwand.Canvas.Draw(PPosX, PPosY, Stein); end;
function TStein.gibX: Integer; begin Result := PosX; end;
function TStein.gibY: Integer; begin Result := PosY; end;
end. |
Und jetzt bist du wieder dran.
Alles mache ich nicht, aber hoffentlich zeigt dir das zumindest einmal wo die Probleme lagen und wie der Code ordentlich formatiert aussieht.
