AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mal wieder Pong...

Ein Thema von n1ghtSurfer · begonnen am 5. Dez 2008 · letzter Beitrag vom 6. Dez 2008
 
n1ghtSurfer

Registriert seit: 2. Mai 2008
14 Beiträge
 
Delphi 7 Enterprise
 
#1

Mal wieder Pong...

  Alt 5. Dez 2008, 17:34
Hey,
habe mal eine Frage zu dem Spiel Pong.
Habe nichts mit der Sufu gefunden wenn es die Frage doch schon gibt sry.

Also hier erstmal der Code(is nochlange nit fertig, soll nur ein grundgerüst sein):

Delphi-Quellcode:
unit Tennis;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TField = class(TForm)
    Decke: TShape;
    shLinks: TShape;
    ShSchlaeger: TShape;
    shRechts: TShape;
    Ball: TShape;
    Timer1: TTimer;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Field: TField;
  x, y : Integer;
  Lives : Byte;
  oben, rechts, links, unten : Integer;

implementation

{$R *.dfm}

procedure TField.FormCreate(Sender: TObject);
begin
  Field.DoubleBuffered := True;
  x := 3;
  y := -4;
  Lives := 3;

  oben := Decke.Top + Decke.Height;
  links := shLinks.Left + ShLinks.Height;
  rechts := shRechts.Left;
  unten := shSchlaeger.Top;
end;

procedure TField.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of

    VK_Left: Begin
              if ShSchlaeger.Left >= 30 then
                   ShSchlaeger.Left := ShSchlaeger.Left - 10;
             End;

    VK_Right: Begin
               if (ShSchlaeger.Left + ShSchlaeger.Width) <= 660 then
                    ShSchlaeger.Left := ShSchlaeger.Left + 10;
              End;
  end;
end;

function BallOben : Boolean;
 Begin
   Result := Field.Ball.Top <= oben;
 End;

function BallUnten : Boolean;
 Begin
   Result := Field.Ball.Top + Field.Ball.Height >= unten;
 End;

function BallLinks : Boolean;
 Begin
   Result := Field.Ball.Left <= Links;
 End;

function BallRechts : Boolean;
 Begin
   Result := Field.Ball.Left + Field.Ball.Width >= Rechts;
 End;

procedure TField.Timer1Timer(Sender: TObject);
begin
    Ball.Left := Ball.Left + x;
    Ball.Top := Ball.Top + y;

  if BallOben then
    y := -y;


  if BallLinks then
    x := -x;


  if BallRechts then
    x := -x;

  if BallUnten AND (Ball.Left >= shSchlaeger.Left)
      AND (Ball.Left <= (shSchlaeger.Left + shSchlaeger.Width)) then
    y:= -y;
end;

end.
So also, mein Problem ist das sich der Ball auf der x achse immer nur etwa auf 2 pixeln hin und her bewegt. Es funktioniert nur wenn ich eine der beiden Seiten Rechts oder Links wegnehme, aber dann funkt. ja nur eine Seite, dass wäre ja Sinnlos.
Weiß einer vllt. wo der Fehler liegt?
MfG
N1GhtSurfer
Was soll ich denn mit einer Signatur?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz