AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Blöde Frage, aber kann mir einer PONG programmieren :) ????
Thema durchsuchen
Ansicht
Themen-Optionen

Blöde Frage, aber kann mir einer PONG programmieren :) ????

Ein Thema von Raiden · begonnen am 17. Nov 2002 · letzter Beitrag vom 21. Nov 2002
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11
  Alt 17. Nov 2002, 16:10
Goggle-Suchergebnis (pong, delphi)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#12
  Alt 18. Nov 2002, 14:36
Habe auch mit Delphi schonmal nen Pong - Clone gebastelt... kannst dur dir ja mal ansehen, falls du etwas Inspiration benötigst:
dgl.quellcodes.de


[edit=Admin]Link klickbar gemacht. Mfg. Daniel[/edit]
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat
Raiden

Registriert seit: 17. Nov 2002
6 Beiträge
 
#13
  Alt 21. Nov 2002, 12:42
bitte bitte bitte bitte bitte bitte kann mir denn niemand helfen ???? ich muss das prog morgen abgeben und komme hier VOLL NICH weiter
Hier ist ein versuch von mir , bitte guckt es euch mal an und sagt mir wo der fehler ist bitte bitte bitte bitte bitte . Das prog hier unten soll eigentlich nur erstmal machen , dass der ball in dem spielfeld rumfliegt und an einer wand abprallt . bitt ebitte bitte könnt ihr das noch ein bisschen aufbessern , damit es geht , weil ich kriege das voll nicht hin ..........

Delphi-Quellcode:
unit pongu;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    PaintBox1: TPaintBox;
    procedure BitBtn1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Var winkel,r :REAL ;
      dx,dy : INTEGER ;

implementation

{$R *.dfm}

procedure TForm1.Button1.Click(Sender: TObject);
begin
timer1.enabled:= true ;
end;
VAR a : Tbitmap;
procedure TForm1.FormCreate(Sender: TObject);
begin
a := Tbitmap.create;
a.loadfromfile ('H:\ball.bmp');
PaintBox1.canvas.draw (i+dx,i+dy,a);
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
a.free;
end;

VAR i : INTEGER ;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
i := 1 ;
winkel := strtofloat (edit1.text);
r := strtofloat (edit2.text);

dx := round(cos(winkel*PI/180) *r) ;
dy := round (sin(winkel*PI/180) *r) ;
Form1.Repaint:
i := i+1 ;
end;

end.
[edit=sakura]Delphi Tags eingefügt[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#14
  Alt 21. Nov 2002, 13:09
Am schnellsten können wir Dir helfen, wenn Du das gesamte Programm als ZIP Datei als Anhang zum Download bereitstellst.

Danke,
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15
  Alt 21. Nov 2002, 13:35
Dieser Code läßt dir einen roten Ball in einer Paintbox hin und her fliegen. Ist allerdings wohl etwas stümperhaft, aber Grafik- und Spieleprogrammierung ist nicht meine Stärke.

Delphi-Quellcode:
var
  Form1: TForm1;
  x, y: Integer;
  bleft: Boolean;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  Paintbox1.Canvas.Brush.Color := clRed;
  PaintBox1.Canvas.Ellipse(x+Paintbox1.Left,y+Paintbox1.Top,15+x,15);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (x < Paintbox1.Width-15) and (bleft = TRUE) then
    x := x+2
  else
  begin
    bleft := FALSE;
    x := x-2;
  end;
  if x <= 0 then
    bleft := TRUE;

  Caption := IntToStr(x);
  PaintBox1.Repaint;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  bleft := TRUE;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Raiden

Registriert seit: 17. Nov 2002
6 Beiträge
 
#16
  Alt 21. Nov 2002, 16:30
OK , also hier ist mein "nicht funktionierendes Proggie" zum download :

http://www.chrisparadise.de.vu/PONG.zip

falls Nr. 1 nicht geht: http://home.t-online.de/home/bodybuilder/PONG.zip


bittö helft mir , ich brauche das bis morgen und das ist extrem wichtig für mich , und ich denke mal für euch ist das nicht viel arbeit , da ihr ja alle profis seid im proggen .....

Also nochmal : ich brauche einfach nur ein prog , wo ein ball in einer paintbox oder in einem anderen spielfeld (image) hin und her fliegt und an den wänden im richtigen reflexionswinkel abprallt ... mehr eigentlich nicht , später muss ich noch die beiden paddle dareinmachen ,aber das werde ich hoffentlich alleine schaffen ...

ok , ich hoffe und warte auf schnell antworten , cu


[edit=sakura]Zweiter Link eingetragen - erster wollte bei mir nicht [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#17
  Alt 21. Nov 2002, 17:23
Hallo Raiden,

der Grund, warum sich der Ball nicht bewegt, ist, dass du die Variable i zwar global deklarierst, aber bei jedem Timerdurchlauf wieder auf 1 setzst. Eine Variable i ist aber ohnehin der falsche Weg, da die Position eines Balles nicht eindimensional, sondern zweidimensional ist. Du kannst also eine Variable pos vom Typ TPoint einführen (TPoint ist ein [packed] Record mit zwei Intergervariablen, x und y). Dieser speichert die Position des Balles.
Code:
[b]var[/b]
  pos: TPoint = (x: 0; y: 0);
Wenn du jetzt deine Funktion ausführst, wirst du erkennen, dass der Ball einen "Kondensstreifen" hinterlässt, da die alte Position des Balles nicht übermalt wird. Du musst also ein
Code:
PaintBox1.Repaint;
vor dem Zeichnen einbauen, damit ist der Fehler behoben.

Jetzt prallt der Ball leider noch nicht von den Seiten ab. Um das zu realisieren, führe zei neue Integervariablen vx und vy ein:
Code:
[b]var[/b]
  vx: Integer = 1;
  vy: Integer = 1;
Der Trick besteht darin, dass diese Variablen mit dx bzw. dy multipliziert werden. Hier passiert (weil vx und vy noch 1 sind) nichts. Nach dem Zeichnen wird dann aber überprüft, ob der Ball gerade an einer Wand ist. wenn an der linken oder rechten, wird vx mit -1 multipliziert, an der oberen und unteren vy mit -1. Jetzt passiert beim nächsten Zeichnen folgendes: Nehmen wir an dx beträgt 8, der Ball sollte also um 8 Pixel nach rechts verschoben werden. Jetzt wird dx mit -1 multipliziert und damit wird der Ball um -8 Pixel nach rechts, also 8 Pixel nach links verschoben - das Abprallen ist perfekt. Analog dazu verhält sich die Beziehung zwischen vy und dy.

Die gesamte Funktion könnte jetzt so aussehen:
Code:
[b]var[/b]
  pos: TPoint = (x: 0; y: 0);
  vx: Integer = 1;
  vy: Integer = 1;

[b]procedure[/b] TForm1.Timer1Timer(Sender: TObject);
[b]begin[/b]
  dx := vx * round(cos(winkel * Pi / 180) * r);
  dy := vy * round(sin(winkel * Pi / 180) * r);
  Inc(pos.x, dx);
  Inc(pos.y, dy);
  PaintBox1.Repaint;
  PaintBox1.Canvas.Draw(pos.x, pos.y, a);
  [b]if[/b] ((pos.x + a.Width >= PaintBox1.Width) [b]or[/b]
      (pos.x <= 0))
  [b]then[/b]
    vx := -vx;

  [b]if[/b] ((pos.y + a.Height >= PaintBox1.Height) [b]or[/b]
      (pos.y <= 0))
  [b]then[/b]
    vy := -vy;
[b]end[/b];
Ich habe die beiden FloatToStr-Anweisungen in die BitBtn1Click-Prozedur verschoben, da r und winkel nur einmal eingelesen werden müssen.

Ab hier darfst du selber weiterdenken, jetzt dürfte es nicht mehr so schwierig sein, zwei Paddles einzubauen.

MfG,
d3g

PS. Ich würde die Grafik niht von H:\ball.bmp laden, sondern in einem relativen Pfad, weil es bei anderen Rechnern, auf denen H:\ nicht existiert, Probleme gibt.

[edit]Tippfehler korrigiert.[/edit]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Raiden

Registriert seit: 17. Nov 2002
6 Beiträge
 
#18
  Alt 21. Nov 2002, 20:39

WAHNSINN , cool .... danke

du hast mich gerade gerettet , danke für deine mühen , ist echt verdammt nett von dir , na gut ich werde mich dann mal an die paddles machen und hoffe das ich die schaffe


cu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:19 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