![]() |
Blöde Frage, aber kann mir einer PONG programmieren :) ????
:D
weil ich brauche das für die schule und habe sehr wenig ahnung von der materie , kann mir da vieleicht jemand helfen ?? , das programm muss nicht perfekt sein , hauptsache eine kugel , die in einem spielfeld hin und her fliegt und einem oder 2 paddles die man steuern kann.... ok mfg , Raiden [edit=Daniel B]Und ab nach Multimedia; hat ja doch was Spiele zutun.[/edit] |
Hallo Raiden und willkommen,
auch auf die Gefahr hin, das Du jetzt schon Böse auf mich wirst, ;). Hier wird keiner Deine HAusaufgaben machen. //Hoffentlich! Ein bisschen Einsatz von Deiner Seite wäre schon ganz Nett. Erstell doch mal ein Formular. Zeichne Dir mit Paint o.ä. mal die Pads. Lass die Pads mal auf Deinem Formular anzeigen. Versuch jetzt einfach nur mal sie mit Pfeil UP/Down zu bewegen, bzw. noch mit A und Q, o.s.ä.. Wenn Du das hast und nciht wieter kommst, kannst DU ja immernopch schreiben. Grüsse, Daniel :hi: |
Hallo Raiden,
erstmal willkommen in der Delphi-PRAXiS. Deine Anfrage nach einer fertigen Lösung geht jedoch am Sinn und Zweck dieses Forums vorbei: Wir können Dir gerne die Richtung weisen, in der Du eine brauchbare (und für Dich zu realisierende) Lösung finden wirst und wir werden Dir auf Deinem Weg dorthin auch gerne jegliche Fragen dazu beantworten. Aber solche "Auftragsarbeiten" im Stil von wirst Du hier nicht loswerden können. :roll: Davon einmal abgesehen: Selbst wenn Du eine fertige Lösung erhalten solltest, so würdest Du damit bei der Präsentation in Deiner Schule u.U. nicht viel anfangen können - spätestens in dem Moment, in dem Dich Dein Lehrer nach Details fragt, landest Du unsanft auf dem Bauch (wahlweise auch auf der Nase). |
:D okok , ich hab ja auch nur mal so aus spaß unter diesem thema gepostet ,... also ich hab folgendes problem....
ich hab ein formular gemacht mit 2 edit fenster. bei dem einen fenster gibt man winkel und bei dem anderen die schrittweite ein , dann hab ich noch einen timer eingebaut und einen start button , sowie ein bild (fürs spielfeld) und ein weiteres bild ( der ball der auf dem spielfeld hin und her fliegt ) . So . Ich versuche nun zu proggen , das der ball übers spielfeld fliegt und von den ränder unter dem richtigen Winkel nach dem reflexionsgesetz abprallt ... deshalb fing ich so an : Zunächst einmal steht der timer auf "false" und wenn man den startbutton klickt , dann geht timer auf true , und hier ist meine procedure : procedure TForm1.Timer1Timer(Sender: TObject); begin winkel := strtofloat (edit1.text); r := strtofloat (edit2.text); dx := round(cos(winkel*PI/180) *r) ; dy := round (sin(winkel*PI/180) *r) ; image2.Left := image2.left+dx ; image2.top := image2.Top+dy ; if image2.left = 300 THEN image2.left := image2.left-dx ; end; image2 soll der ball sein Das problem is jedoch , das der ball nicht abprallt , sondern immer weiter fliegt , meine frage ist nun wie ich das abprallen realisieren könnte , wäre für jede hilfe dankbar . |
Hallo Raiden,
oftmals kann man sich der Problemstellung auch nähern, indem man sich dazu etwas ![]() |
Hi,
![]() Schau Dir da mal mein Posting an, da geht es um das abprallen an den Rändern, egal ob hor. oder ver.. Grüsse, Daniel :hi: |
Hallo Daniel,
Zitat:
Dennoch, Google ist des Programmierers eines der besten Freunde. Grüsse, Daniel :hi: |
hmm,... danke für die vielen antworten , aber in google finde ich irgendwie nix brauchbares , könnt ihr mir nicht so vieleicht ein paar tips geben ? biddöö
|
Hallo Daniel,
Zitat:
|
Hallo Rainden,
ich finde das schon ein paar brauchbare Antworten erhalten hast! Also, ganz langsam. Manch Dir zwei Image. Oder nimm doch einfach Buttons. Setze sie aufs Formular und bewege sie nach oben und unten mit den Tasten deiner Wahl. Das sind bis hier etwa 4 Zeilen. Schau Dir nochmal den Thread an den ich Dir vorhin gezeigt habe. Mit den Sorucen, müsstest Du noch etwa 5-10 Zeilen ergänzen, dann wärst Du schon fertig. Die Abfrage, ob es jetzt nun links oder rechts anstösst, müsstest DU auf die Buttons umsetzen. Das musst DU schon alleine machen. Grüsse, DAniel :hi: |
|
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 07:13 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