Autor Beitrag
Huntergamer
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 25.06.10 20:18 
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 user profile iconNarses: Binaries aus dem Projektarchiv entfernt.
Einloggen, um Attachments anzusehen!
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 25.06.10 23:33 
Vielleicht solltest du dich auf den relevanten Code beschränken. Kaum einer wird Lust haben, sich den ganzen Quellcode herunterzuladen und sich da durchzuwühlen.

Prinzipiell läuft es so:

ausblenden Quelltext
1:
2:
3:
4:
für alle Blöcke
  wenn Ball kollidiert mit Block
    entferne Block
    lasse Ball abprallen
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Sa 26.06.10 08:37 
du könntest auch hier ein bischen spicken(aber NICHT kopieren, nur vom prinzip her...)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden volle Höhe 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:
ausblenden 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.

ausblenden 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.

ausblenden 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

ausblenden 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:
ausblenden volle Höhe 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. ;-)