Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pong Spiel - Ball bewegt sich nicht (https://www.delphipraxis.net/92018-pong-spiel-ball-bewegt-sich-nicht.html)

fransa 13. Mai 2007 13:49


Pong Spiel - Ball bewegt sich nicht
 
Hallo erst mal,
ich finde es richtig toll von euch, dass ihr euch um die Probleme von anderen kümmert und ihnen helft. Das ist wirklich nett von euch.
Ich selber habe da auch eine Frage an euch, und zwar wollte ich als Hausaufgabe das Pong Spiel programmieren, scheitere aber daran, dass der Ball sich nicht bewegt. Im Unterricht habe ich es hin bekommen, aber zu Hause wusste ich nicht mehr wie es ging. Muss man dann beim Timer im Objektinspektor noch was einstellen oder im Quelltext? Wie gesagt der Ball ist vorhanden nur bewegt er sich nicht.
Ich hoffe, dass mir vielleicht irgendwer helfen kann. Danke

Die Muhkuh 13. Mai 2007 14:06

Re: Pong Spiel - Ball bewegt sich nicht
 
Hi fransa,

erst einmal herzliche Willkommen in der Delphi-PRAXiS :dp:

Wenn Du uns Deinen Quellcode zeigst, können wir Dir sicher noch um einiges besser helfen.

Wenn Du den Quellcode einfügst, mache noch ein [delphi][ /delphi] (ohne das Leerzeichen) drum rum, damit das Forum den Code wie in Delphi hervorhebt.

fransa 13. Mai 2007 14:11

Re: Pong Spiel - Ball bewegt sich nicht
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Menu: TMenuItem;
    Start1: TMenuItem;
    Beenden1: TMenuItem;
    Image1: TImage;
    Image2: TImage;
    Timer1: TTimer;
    procedure Beenden1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
    procedure Start1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  d,f,g,x5,y5,x6,y6:integer;

implementation

{$R *.DFM}

procedure TForm1.Beenden1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 x5:=150;y5:=100;x6:=180;y6:=130;
 d:=5;
 image1.canvas.brush.color:=clwhite;
 image1.canvas.rectangle(0,0,600,400);
 image1.canvas.brush.color:=clmaroon;
 image1.canvas.ellipse(x5,y5,x6,y6);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  image2.canvas.brush.color:=clnavy;
  image2.canvas.rectangle(100,100,150,200);
  if (GetAsyncKeyState(vk_up)<>0) then image2.top:=image2.top-d;
  if (GetAsyncKeyState(vk_down)<>0) then image2.top:=image2.top+d;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 x5:=x5+f;y5:=y5+g;x6:=x6+f;y6:=y6+g;
 with image1.canvas do
   begin
    brush.color:=clwhite;
    rectangle(0,0,600,400);
    brush.color:=clmaroon;
    ellipse(x5,y5,x6,y6);
    if x5>=570 then f:=f*(-1);
    if y5>=370 then g:=g*(-1);
    if x6<=30 then f:=f*(-1);
    if y6<=30 then g:=g*(-1);

   end;
end;

procedure TForm1.Start1Click(Sender: TObject);
begin
 timer1.enabled:=true;
end;

end.

Die Muhkuh 13. Mai 2007 14:14

Re: Pong Spiel - Ball bewegt sich nicht
 
Hi,

es scheint so, als ob Du nirgendwo die Variablen f und g änderst, die für die Beschleunigung da sind.

fransa 13. Mai 2007 14:25

Re: Pong Spiel - Ball bewegt sich nicht
 
Aha das wusste ich nicht. Und wie könnte ich das machen mit f nd g?

Ändere ich hier nur de Richtung?
Delphi-Quellcode:
if x5>=570 then f:=f*(-1);
if y5>=370 then g:=g*(-1);
if x6<=30 then f:=f*(-1);
if y6<=30 then g:=g*(-1);

Neutral General 13. Mai 2007 15:02

Re: Pong Spiel - Ball bewegt sich nicht
 
ja da änderst du nur die Richtung.. Du hast den Quellcode doch selbst geschrieben oder nicht? Dann musst du doch wissen was du da schreibst ? :gruebel:

fransa 13. Mai 2007 15:07

Re: Pong Spiel - Ball bewegt sich nicht
 
Na das ich die Richtung ändere,dass weiß ich ja, aber ich weiß nicht wie ich die Variablen f und g verändern soll wie Die Muhkuh geschrieben hat? Das ist ja eigentlich meine Frage.

Neutral General 13. Mai 2007 15:25

Re: Pong Spiel - Ball bewegt sich nicht
 
Du musst eigentlich nur f und g irgendwann setzen. Im FormCreate z.B oder so.. Je nachdem halt...

f=1
g=1

würde dann bedeuten das der Ball jedes mal wenn der Timer ausgeführt wird ein Feld nach rechts und ein Feld nach unten verschoben wird...

Gruß
Neutral General

fransa 13. Mai 2007 15:58

Re: Pong Spiel - Ball bewegt sich nicht
 
Ich habe f und g =5 gesetzt, aber der ball ist immer noch standhaft.
Ich werde dann morgen in der Schule wohl nochmal gucken müssen, aber trotzdem vielen Dank!

Neutral General 13. Mai 2007 15:59

Re: Pong Spiel - Ball bewegt sich nicht
 
Und du hast den Start-Button auch betätigt? (man kann ja nie wissen^^)

fransa 13. Mai 2007 16:07

Re: Pong Spiel - Ball bewegt sich nicht
 
Ja hab ich :) Soviel weiß ich dann auch noch.

Nils_13 13. Mai 2007 16:49

Re: Pong Spiel - Ball bewegt sich nicht
 
Ich würde vorschlagen, dass du dich mal im Forum umhörst, so wird das nichts, vorallem, weil zumindest ich nicht ansatzweise ein Pong entdeckt.
Hier mal der verschönerte Code (ein Teil davon):
Delphi-Quellcode:
var
  frmMain : TfrmMain;
  d      : Integer = 5;
  f      : Integer;
  g      : Integer;
  x5      : Integer = 150;
  y5      : Integer = 100;
  x6      : Integer = 180;
  y6      : Integer = 130;

implementation

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  img.Canvas.Brush.color := clWhite;
  img.Canvas.Rectangle(0, 0, 600, 400);
  img.Canvas.Brush.Color :=clMaroon;
  img.Canvas.Ellipse(x5, y5, x6, y6);
end;

procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  img2.Canvas.Brush.Color := clNavy;
  img2.Canvas.Rectangle(100, 100, 150, 200);
  if (GetAsyncKeyState(VK_UP) <> 0) then
    img2.Top:=img2.top - d;
  if (GetAsyncKeyState(VK_DOWN) <> 0) then
    img2.Top:=img2.top + d;
end;

fransa 13. Mai 2007 17:04

Re: Pong Spiel - Ball bewegt sich nicht
 
Tut mir Leid, wenn ich das jetzt nicht verstehe, aber was ist daran anders?

Nils_13 13. Mai 2007 17:11

Re: Pong Spiel - Ball bewegt sich nicht
 
Ich will dir damit sagen, dass ich mich mit deinem Code auseinandergesetzt habe, ihn in meinen Codestil umgewandelt habe und nicht durchgestiegen bin. Außerdem ist das nur ein Vorschlag, wie du deine Codes übersichtlicher gestalten könntest. Später bleiben dir dadurch Fehler erspart.

fransa 13. Mai 2007 17:18

Re: Pong Spiel - Ball bewegt sich nicht
 
Okay danke.
Werde jetzt aber gehen und morgen in der Schule nochmal gucken.

fransa 15. Mai 2007 17:48

Re: Pong Spiel - Ball bewegt sich nicht
 
Also, dass der Ball sich bewegt, habe ich dann doch noch irgendwie hinbekommen, aber jetzt ist das Hauptproblem noch das Abprallen vom Schläger.
Der Schläger ist bei mir ein Image. Der Ball ist eine Ellipse. Muss ich dann die x/y Werte des Balles und den Schläger gleichsetzen oder müssen die sich überlappen oder wie macht man das?

fransa 15. Mai 2007 18:10

Re: Pong Spiel - Ball bewegt sich nicht
 
Dass der Ball sich bewegt, habe ich doch noch irgendwie hingekriegt, aber wie macht man das mit dem Abprallen vom Schläger?
Mein Schläger ist ein Image und mein Ball eine Ellipse.
Muss man die x/y- Werte mit dem Schläger gleich setzen oder wie macht man das?

.chicken 18. Mai 2007 14:27

Re: Pong Spiel - Ball bewegt sich nicht
 
Also, du musst nach jeder Bewegung des Balls prüfen ob er sich in dem Rechteck befindet.
Dazu prüfst du einfach ob er sich hinter der X-Linie des Rechtecks befindet. Wenn das der Fall ist prüfst du noch ob er sich zwischen Top und Bottom des Rechtecks befindet.
Ist das der Fall dann kehrst du einfach die X-Bewegung um.
Ist das nicht der Fall, dann hat der andere Spiele gepunktet ;-)

QuickAndDirty 18. Mai 2007 15:32

Re: Pong Spiel - Ball bewegt sich nicht
 
Wuste garnicht das das überhaupt mit image geht...hab immer Paintbox genutzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 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