Einzelnen Beitrag anzeigen

Travis

Registriert seit: 16. Mai 2006
11 Beiträge
 
#1

Delphi PingPong spiel schulprojekt help

  Alt 18. Mai 2006, 01:21
hallo
hab ein problem mit meinen delphi projekt was ein schulprojekt ist und wichtig für meine zensur ist =)
also ich hab shape komponente genommen für die balken von den der ball abprallen soll jedoch prallt der ball vom einen garnicht ab und vom anderen erst wenn er von links kommt da ich nur noch knapp 2 wochen zeit hab wollt ich fragen ob ihr vielleicht eine lösung wisst wer sehr nett schonma danke im vorraus ich poste ma quellcode
vielleicht seht ihr ja noch etwas was ich verbessern könnt =)
Delphi-Quellcode:
unit USpiel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg, UPunkte , UDaten;

type
  TFSpiel = class(TForm)
    Spielfeld: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Spieler1: TShape;
    spieler2: TShape;
    Sh_ball: TShape;
    Timer_ball: TTimer;
    Label5: TLabel;
    procedure Label5Click(Sender: TObject);
    procedure Timer_ballTimer(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Shape2ContextPopup(Sender: TObject; MousePos: TPoint;
      var Key: Word; Shift: TShiftState);
    procedure Shape1ContextPopup(Sender: TObject; MousePos: TPoint;
      var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  const
   links = 2;
   rechts = 1;
var
    FSpiel: TFSpiel;
  Balltop, Ballleft, Richtung, LeftStep, TopStep :Integer;

implementation
{$R *.dfm}

procedure TFSpiel.Shape1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Key: Char);
begin
  case key of
     'w' : begin
             Spieler1.Top := Spieler1.Top-12;
           end;
     's' : begin
             Spieler1.Top := Spieler1.Top+12;
           end;
end;
end;

procedure TFSpiel.Shape2ContextPopup(Sender: TObject; MousePos: TPoint;
  var Key: Word; Shift: TShiftState);
begin
  case key of
    vk_up : begin
      Spieler2.Top := spieler2.Top-12;
    end;
    vk_down : begin
      Spieler2.Top := Spieler2.Top+12;
    end;
end;
end;

procedure TFSpiel.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case key of
    vk_up : begin
      if Spieler2.Top >=55 then begin
       spieler2.Top := spieler2.top-12;
            end;
                          end;
    vk_down : begin
      if Spieler2.Top <=348 then begin
       Spieler2.Top := spieler2.top+12;
            end;
                            end;
end;
end;

procedure TFSpiel.FormKeyPress(Sender: TObject; var Key: Char);
 begin
  case key of
    'w' : begin
             if spieler1.top>=55 then begin
               spieler1.Top := spieler1.Top-12;
             end;
           end;
     's' : begin
              if spieler1.Top<=348 then begin
                spieler1.Top := spieler1.Top+12;
          end;
          end;
 end;
end;

procedure TFSpiel.Timer_ballTimer(Sender: TObject);
begin
  Sh_Ball.Visible:=true;

  if TopStep<0 then {Ball bewegt sich nach oben}
  begin
    if sh_Ball.Top <=49 then TopStep:=TopStep*(-1); {Ball trifft oben, Richtung umdrehen}
  end
  else {TopStep>=0, Ball bewegt sich nach unten}
  begin
    if sh_Ball.Top >=390 then TopStep:=TopStep*(-1); {Ball trifft unten, Richtung umdrehen}
  end;
  sh_Ball.Top := sh_Ball.top+TopStep;
  if LeftStep<0 then {Richtung=links}
  begin
    if sh_Ball.Left <=44-(sh_ball.width) then begin
       Punkte_Zaehlen(SpRechts);
      LeftStep:=Leftstep*(-1);
    end;
  end
  else {Richtung=rechts}
  begin
    if sh_Ball.Left >=672-(sh_ball.width) then LeftStep:=Leftstep*(-1);
    //ab hier abprallen von balken
    if (sh_ball.left<spieler1.left+spieler1.width) and (sh_ball.top>spieler1.top) and
 (sh_ball.top+sh_ball.height<spieler1.top+spieler1.height) then
  LeftStep:=Leftstep*(-1);
if (sh_ball.left+sh_ball.width>spieler2.left) and (sh_ball.top>spieler2.top) and
(sh_ball.top+sh_ball.height<spieler2.top+spieler2.height) then
  TopStep:=TopStep*(-1);
  end;
  //ende abprallen von balken
  sh_Ball.Left := sh_Ball.left+LeftStep;
end;

procedure TFSpiel.Label5Click(Sender: TObject);
var i: Integer;
     Winkel : real;
     Richtung : extended;

begin

   Timer_Ball.Enabled := true;
   randomize;
   LeftStep :=5*(random(4)+1);
   Winkel :=random(360)+1;
   if Winkel>180 then LeftStep:=LeftStep*(-1);

   Winkel:=Winkel*Pi/180;
   TopStep:=trunc(10*cos(Winkel));
   Timer_Ball.Interval:=5*(random(10)+1);
   if timer_ball.Interval <60 then timer_ball.Interval:=40;
   Ballleft:= random(540)+40;
   Balltop:= random(150)+50;
      sh_Ball.Left := Ballleft;
       sh_Ball.Top := Balltop;

end;

end.
  Mit Zitat antworten Zitat