Huntergamer - Fr 25.06.10 20:18
Titel: Breakout Problem
Hallo!
Bei uns im Info Kurs sollen wir ein Spiel programmieren, als Projekt. Viele kennen dies als Breakout. Jetzt habe ich ein Problem mit den Blöcken, der Ball fliegt da einfach durch. Nur das dumme ist, ich hab nen Schläger da klappt auch alles und hab dann einfach das alles rauskopiert, nur es klappt net. Könnt ihr mal mein Programm angucken bzw. den Fehler lösen? Muss am Mittwoch fertig sein, nur irgendwie verstehe ich nicht wieso das einfach nicht klappen will ^^
thx im vorraus ^^
Moderiert von
Narses: Binaries aus dem Projektarchiv entfernt.
jaenicke - So 27.06.10 13:20
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:
mStein.pas
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.
http://www.delphi-library.de/viewtopic.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:
Delphi-Quelltext
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. ;-)