![]() |
|
Habe auch mit Delphi schonmal nen Pong - Clone gebastelt... kannst dur dir ja mal ansehen, falls du etwas Inspiration benötigst:
![]() [edit=Admin]Link klickbar gemacht. Mfg. Daniel[/edit] |
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:
[edit=sakura]Delphi Tags eingefügt[/edit]
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. |
Am schnellsten können wir Dir helfen, wenn Du das gesamte Programm als ZIP Datei als Anhang zum Download bereitstellst.
Danke, |
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; |
OK , also hier ist mein "nicht funktionierendes Proggie" zum download :
![]() falls Nr. 1 nicht geht: ![]() 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] |
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:
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
[b]var[/b]
pos: TPoint = (x: 0; y: 0);
Code:
vor dem Zeichnen einbauen, damit ist der Fehler behoben.
PaintBox1.Repaint;
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:
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.
[b]var[/b]
vx: Integer = 1; vy: Integer = 1; Die gesamte Funktion könnte jetzt so aussehen:
Code:
Ich habe die beiden FloatToStr-Anweisungen in die BitBtn1Click-Prozedur verschoben, da r und winkel nur einmal eingelesen werden müssen.
[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]; 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] |
:shock: :shock:
WAHNSINN , cool .... danke :D 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz