Einzelnen Beitrag anzeigen

leela
(Gast)

n/a Beiträge
 
#25

Re: Ping Pong Spiel vereinfacht.. Brauche aber trotzdem Hilf

  Alt 11. Jan 2005, 16:24
Also nun geht gar nichts mehr. Ich habs erstmal wieder so gemacht, dass er wenigstens startet und dann nicht der Debugger nervt. ._. Ich lad nochmal das Programm hoch... Die Sachen, die noch in den geschweiften Klammern sind, muss ich irgendwo mit reinbringen...

Delphi-Quellcode:
type
//anfang.. mit uses etc.

  TSpielfeld = class(TForm)
    .... unwichtig
//HIER tSpielerKlasse!!
    type
    tSpieler = class
    x1,x2,y1,y2:integer;
    procedure SpielerErstellen;
    end;
    type
    tBall = class
    x,y,vx,vy,r:Single;
    farbe:tColor;
    procedure init(fNeu:tColor;xNeu,yNeu,vxNeu,vyNeu,rNeu:Single);
    procedure ZeigeDich;
    procedure BewegeDich;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Spielfeld: TSpielfeld;
  ball:tBall;
  spieler:tSpieler;
  punkt:integer = 0;
  BallimSpiel:boolean = false;
  x1,y1,x2,y2:integer;

implementation

{$R *.dfm}

// Muss ich hier noch was verändern? Hier deklarier ich eben die Prozedur.. Nur.. wie ruf ich sie am besten auf und wann?
procedure tSpieler.SpielerErstellen;
begin
with Spielfeld.Bild.Canvas do
    begin
    brush.Color:= clBlue;
    rectangle(x1,y1,x2,y2);
    pen.width:=1;
    brush.style:=bsSolid;
    pen.Mode:= pmNOTXOR;
    end;
x1:=670;
y1:=100;
x2:=680;
y2:=210;
end;

procedure tBall.init(fNeu:tColor;xNeu,yNeu,vxNeu,vyNeu,rNeu:Single);
begin
farbe:= fNeu;
r:= rNeu;
x:= xNeu;
y:= yNeu;
vx:= vxNeu;
vy:=vyNeu;
end;

procedure tBall.ZeigeDich;
begin
with Spielfeld.Bild.Canvas do
    begin
    brush.color:= clRed;
    ellipse(Round (x-r),Round(y-r),Round(x+r),Round(y+r))
    end;
end;

procedure tBall.BewegeDich;
begin
  x:=x+vx;
  y:=y+vy;
  with Spielfeld.Bild do
  begin
    if (x>width+r-1) then
    begin
      inc(punkt);
      Spielfeld.Label3.Caption:=IntToStr(punkt);
      BallimSpiel:=false; // es kann ein neuer ball gestartet werden
         if punkt=10 then
         Showmessage ('Game Over');
    end;
    if x<r+1 then
    begin
      x:=r+1;
      vx:=-vx
    end;
    if (y>height-r-1) then
    begin
      y:= height-r-1;
      vy:=-vy
    end;
    if y< r+1 then
    begin
      y := r+1;
      vy:= -vy
    end
  end
end;

procedure TSpielfeld.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
    vk_space:
    begin
      if BallimSpiel then
        exit;
      with Bild.Canvas do
      begin
        brush.Color:= clWhite;
        rectangle(0,0,Bild.width,Bild.height);
        pen.width:=1;
        brush.style:=bsSolid;
        pen.Mode:= pmNOTXOR;
      end;
      BallimSpiel:=true;
      Ball.init(clWhite,100,200,5,5,15);
      Ball.ZeigeDich;
    end;

//hier soll der Spieler sich eben bewegen.. Nur meckert er da immer mit den Variablen rum, dass ich die nicht richtig deklariert hab.. Und wie sprech ich die Prozedur an? 'with procedure tSpieler do' ? das kann nicht richtig sein, weil das hab ich ja alles schon probiert.. Es nervt, wenn man immer alles ausprobieren muss =(

    vk_down: // "runtertaste gedrückt"
    begin
     {with tSpieler do // paddle bewegen
        begin
        y1:=y1-10;
        y2:=y2-10;
         end; }

    end;
    vk_up: // "hochtaste gedrückt"
    begin
      // paddle bewegen
    end;
  end;
end;

procedure TSpielfeld.Timer1Timer(Sender:TObject);
begin
  if BallimSpiel then
  begin
    {spieler.SpielerErstellen;}
    Ball.ZeigeDich;
    Ball.BewegeDich;
    Ball.ZeigeDich;
  end;
end;

//so hier eben der Schluss...
Ich häng nochmal das komplette Programm mit an. Bitte Leute, ich brauch eure Hilfe. =|

Achja, damits vielleicht schneller geht.. Meine ICQ : 103057471
Angehängte Dateien
Dateityp: rar spiel-v4_903.rar (170,9 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat