![]() |
Pong-Klon
Hi,
ich hab Pong programmiert. Irgendwie prallt der Ball am Balken vom Spieler1 nicht ab, sondern der Computergegner gewinnt Danke im vorraus
Delphi-Quellcode:
unit b;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, LMDCustomControl, LMDCustomPanel, LMDCustomBevelPanel, LMDBaseEdit, LMDCustomEdit, LMDEdit, LMDCustomComponent, lmdcont, LMDCustomMemo, LMDMemo, MPlayer; type TForm1 = class(TForm) Panel1: TPanel; t: TTimer; enemy: TPanel; gol: TLabel; start: TImage; startl: TLabel; ball: TShape; credits: TImage; Label1: TLabel; Image1: TImage; ende: TLabel; Label2: TLabel; p1: TLMDMemo; Label3: TLabel; p2: TLMDMemo; mp: TMediaPlayer; player1: TPanel; procedure ki; procedure Visible_false; procedure go_p1; procedure go_p2; procedure mp1; procedure tTimer(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure startClick(Sender: TObject); procedure startlClick(Sender: TObject); procedure Label1Click(Sender: TObject); procedure creditsClick(Sender: TObject); procedure Image1Click(Sender: TObject); procedure endeClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; xspeed: Integer=2; yspeed: Integer=2; bdirection: byte; implementation uses c; {$R *.DFM} procedure TForm1.ki; var schritt: integer; begin schritt := 2; if ball.Top > enemy.Top then enemy.Top := enemy.Top+schritt; if ball.Top < enemy.Top then enemy.Top := enemy.Top-schritt; end; procedure TForm1.Visible_false; begin t.Enabled:= true; p1.Visible:= false; p2.Visible:= false; Label3.Visible:= false; start.Visible:= false; startl.Visible:= false; ball.Visible:= true; player1.visible:= true; enemy.Visible:= true; label1.Visible:= false; credits.Visible:= false; ende.Visible:= false; Image1.Visible:= false; Label2.Visible:= false; end; procedure TForm1.go_p1; begin showmessage(p1.text+' '+'gewinnt'); end; procedure TForm1.go_p2; begin showmessage(p2.text+' '+'gewinnt'); end; procedure TForm1.mp1; begin mp.play; end; procedure TForm1.tTimer(Sender: TObject); var toleranz : integer; // umgebung um den balken herum in pixeln begin toleranz := ball.Width div 2; //KI-Aktivierung ki; //Vereinbarungen ball.left := ball.Left + xspeed; ball.Top := ball.Top + yspeed; //Ballkollision if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then xspeed:= -xspeed; if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then xspeed := -xspeed; //Ballkollisions Ton if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then mp1; if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then mp1; //Kollisionserkennung if ball.Left<0 then begin t.Enabled:= false; ball.Visible:= false; go_p2; end; if ball.Left>445 then begin t.Enabled:= false; ball.Visible:= false; go_p1; end; if ball.Left<0 then xspeed := -xspeed; if ball.Top<0 then yspeed := -yspeed; if ball.Left>445 then xspeed := -xspeed; if ball.Top>445 then yspeed := -yspeed; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var s: integer; begin s := 3; if key=VK_UP then Player1.top:=player1.top-s; if key=VK_DOWN then Player1.top:=player1.top+s; if key=ord('S') then enemy.top:=enemy.top+s; if key=ord('W') then enemy.top:=enemy.top-s; end; procedure TForm1.startClick(Sender: TObject); begin Visible_false; end; procedure TForm1.startlClick(Sender: TObject); begin Visible_false; end; procedure TForm1.Label1Click(Sender: TObject); begin form1.hide; form2.show; form2.c.scroll:= true; form2.ef.Enabled:= true; end; procedure TForm1.creditsClick(Sender: TObject); begin form1.hide; form2.show; form2.c.scroll:= true; form2.ef.Enabled:= true; end; procedure TForm1.Image1Click(Sender: TObject); begin form1.close; end; procedure TForm1.endeClick(Sender: TObject); begin form1.close; end; end. |
Re: Pong-Klon
Hi,
erstmal, wo ist das Problem? Zweitens, du brauchst deinen Thread nicht nochmal erstellen. Die Mods können den alten verschieben Drittens @Mods: Bitte closen und den anderen verschieben. |
Re: Pong-Klon
Hi Spider!
Ich hol mir grade ICQ... [edit=Christian Seehase]Beiträge zusammengefasst. Mfg, Christian Seehase[/edit] |
Re: Pong-Klon
Lieber Nils!
Probier doch mal, alles wichtige sofort hinzuschreiben und nicht alle paar Minuten einen weitern Satz hinzuzufügen. Dann schilder noch genau dein Problem sowie deine bisherigen Untersuchungsergebnisse und dir wird sicherlich umgehend geholfen. Michael |
Re: Pong-Klon
Könnt ihr mir helfen, dass der Ball auch beim Spieler1 abprallt, das ist alles :wink:
Nächstes mal mach ich's besser :-D [edit=Christian Seehase]Beiträge zusammengefasst. Mfg, Christian Seehase[/edit] |
Re: Pong-Klon
Es gibt auch ne Editier-Funktion in diesem Forum.
|
Re: Pong-Klon
ich weiß
|
Re: Pong-Klon
Zitat:
Durch deine Posts werden die Topics sehr unleserlich, danke. |
Re: Pong-Klon
Hi,
ich will dir jetzt nicht zunahe tretten, aber dieses Forum ist kein Chat. Dafür hat das Forum einen Chat. Bitte editiere deine Beiträge und überlege bevor du postet. Ein Post mit "Hi Spider" und der nächste "Ich hol mir grad ICQ" gehören entweder in einen Post, aber eigentlich gar nicht ins Forum und wenn dann schreib ins kleiner Schrift. So und nun Back to Topic *MFG* Manu :hi: [edit] An dieser Stelle möchte ich noch an den ![]() ![]() |
Re: Pong-Klon
Könntest Du mal das Projekt zippen und hier anhängen vielleicht workle ich naher an dem rum ...
|
Re: Pong-Klon
:-D
Hier war mal ein download kommt wieder wenn's ferrtig ist. |
Re: Pong-Klon
Zitat:
|
Re: Pong-Klon
Ich brauche noch Hilfe:
Ich hab dir ne pn geschickt, wo alles drin ist! Soll ich ihn noch mal zurrechtstellen? |
Re: Pong-Klon
ne habs geradew gesehen .... bei mir kam kein Popup darum nicht bemerkt ...
Ich gucks mal an was überhaupt drin ist ... |
Re: Pong-Klon
alles Quellcode+res dateien+exe!
Bei mir kommt meistens auch kein Popup, unter Menüleiste steht in rot z.B. 2 Nachrichten. Auf Popups würde ich mich nie verlassen. :hi: [edit=Christian Seehase]Beiträge zusammengefasst. Bitte die Edit Funktion benutzen Mfg, Christian Seehase[/edit] |
Re: Pong-Klon
Zitat:
UND !!! TUE MIR DEN GEFALLEN UND VERWENDE DEN EDIT FUNKTION !!! DU POSTEST WIRKLICH ZU VIELE BEITRÄGE HINTEREINANDER INNERHALB WENIGE MINUTEN IN EINEN THREAD EDIT: Sorry ich müsste erst mal die LMD Kompo saugen, aber ich darf sowas nicht in der Firma machen. |
Re: Pong-Klon
Zitat:
Jetzt meine Fragen die Du hoffentlich auch beantworten kannst bzw solltest. :roll: 1. Prallt der Ball beim Computergegner ab ? 2. In welche Zeilen steht die Erkennung von Ball mit Spieler1-Schläger Kollision ? 3. In welcher Zeilen steht die Erkennung von Ball mit Gegner-Schläger Kollision ? 4. Versuche die Frage 2 und 3 etwas näher zu erklären was da passiert. 5. Wenn Frage 1 - 4 beantwortet werden kann, dann könnte eventuell die Antwort von alleine da stehen :) |
Re: Pong-Klon
Wie findet man in Delphi die Zeilen Zahl raus? Soll ich sie zählen :mrgreen: ?
|
Re: Pong-Klon
Zitat:
|
Re: Pong-Klon
:shock:
Ja, zähle sie bitte. . . . Oder sehe in der Statusleiste Deines Editor-Fensters nach. Nils - diese Frage kann unmöglich ernst gemeint gewesen sein. |
Re: Pong-Klon
Zitat:
|
Re: Pong-Klon
War sie auch nicht :mrgreen:
@darty 1. Ja 2. 123-128 3. 130-135 4. Bei dem Gegner prallt der Ball einfach ab (mit Physik) und beim Spieler1 prallt er komischer Weise nicht ab.
Delphi-Quellcode:
//Kollisionserkennung
if ball.Left<0 then begin t.Enabled:= false; ball.Visible:= false; go_p2; end;
Delphi-Quellcode:
if ball.Left>445 then
begin t.Enabled:= false; ball.Visible:= false; go_p1; end; |
Re: Pong-Klon
Zitat:
Zitat:
Zitat:
Mal ehrlich Du hast doch den Code selber geschrieben oder ? Dann erklär es mir doch weil ich das nicht verstehe wo da die Kollisionfragen sein soll in den Zeilen ?? Zitat:
|
Re: Pong-Klon
Zitat:
Ich denke mal das sind die Zeilen der Kollisionsabfrage:
Delphi-Quellcode:
und
if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then xspeed:= -xspeed;
if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then xspeed := -xspeed;
Delphi-Quellcode:
if ball.Left<0 then xspeed := -xspeed;
if ball.Top<0 then yspeed := -yspeed; if ball.Left>445 then xspeed := -xspeed; if ball.Top>445 then yspeed := -yspeed; |
Re: Pong-Klon
Zitat:
Nun hast Du es verraten aber er kommt jetzt auch nicht weiter :roll: |
Re: Pong-Klon
Physik ist vieleicht das Falsche Wort, ich meine die toleranz.
|
Re: Pong-Klon
Was ist mit Toleranz ? erklär es doch mal näher ..
|
Re: Pong-Klon
Ich hab doch im Quellcode, dass der Ball auch beim Spieler1 abprallen soll ... nur irgendwie funktioniert es nicht (wegen diesem Problem hab' ich das Thema aufgemacht) :gruebel:
Die Toleranz ist die Physik... ok... [edit=Christian Seehase]Beiträge zusammengefasst. Wäre schön, wenn Du die Edit Funktion auch mal benutzen würdest ;-). Danke. Mfg, Christian Seehase[/edit] |
Re: Pong-Klon
Wie war das noch mit der Edit Funktion :mrgreen:
|
Re: Pong-Klon
Ich denke mal, dass das Problem folgendes ist: Du fragst bei der Kollisionskontrolle des Balls einen genauen Pixelwert der "Left"-Eigenschaft ab, welcher aber nie erreicht wird, da du den Ball immer um zwei Pixel bewegst. Ändere daher folgenden Code:
Delphi-Quellcode:
in diesem um:
//Ballkollision
if (Abs(ball.Left - enemy.left) <= 5) and (Abs(ball.Top - enemy.Top) <= 5) then xspeed:= -xspeed; if (ball.top > player1.top -1-toleranz) and (ball.top < player1.top + player1.height +1+toleranz) and (ball.left = player1.left+player1.width) then xspeed := -xspeed;
Delphi-Quellcode:
Die 1 in der Abfrage solltest du vielleicht noch bei Tollerarenz mit unterbringen.
//Ballkollision
if ((ball.Top > enemy.Top - 1 - toleranz) and (ball.Top < enemy.Top + enemy.Height + 1 + toleranz) and (ball.Left <= enemy.Left + enemy.width)) or ((ball.Top > player1.Top - 1 - toleranz) and (ball.Top < player1.Top + player1.Height + 1 + toleranz) and (ball.Left + ball.Width >= player1.Left)) then xspeed := -xspeed; |
Re: Pong-Klon
[OT]so nen doppelposter hab ich noch nie gesehen(so bin nicht mal ich @stan @luckie @alleanderen ;) )
[/OT] Die edit funktion - ein kleiner Überblick(l komtm das ja in das tut für die ganz langsamen ^^ ) --> es gibt recht ober den von dir gestellten Post einen button "edit" ^^ das wars auc hschon der rest ist selbsterklärend würdest du mal draufklicken :zwinker: |
Re: Pong-Klon
Zitat:
Du wurdest nun mind. 5x drauf hingewisen die Edit-FUnktion zu nutzen.. also TU ES AUCH air |
Re: Pong-Klon
@Prog schick mir mal den veränderten Code plz
:hi: Oder wollt ihr das ich für diese Fälle die Edit-funktion verwende :freak: @all danke es läuft endlich!!! :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 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