Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DELPHI - Arkanoid - Vom Anfänger für Anfänger (https://www.delphipraxis.net/125467-delphi-arkanoid-vom-anfaenger-fuer-anfaenger.html)

psd-sign 6. Dez 2008 18:09


DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
DELPHI - ARKANOID SAMMELTHREAD

Im Zustand geistiger Umnachtung hab ich mich mit viel Einsatz bei meinem Prof in Programmierung positiv hervorgetan und alle Praktikas des laufenden Semesters mit sehr guten Bewertungen abgschlossen (natürlich seid ihr da nicht ganz unbeteiligt dran gewesen). Da dachte sich nun nein Prof, der gute Student scheint arg unterfordert, also lassen wir ihn doch mal auf Animation in Delphi los und lassen den Burschen ein kleines Spiel programmieren. Es handelt sich um einen Arkanoid Clone, den es zu erstellen gilt. Ich habe bis jetzt nicht die Erfahrungen mit Animationen in Delphi und werde deswegen hier nun meine Fortschritte posten, sowie das Projekt, sobald es bewertet wurde. Sozusagen ein Thread für Delphi-Anfänger von einem Delphi-Anfänger. :)

1. Vorüberlegungen
Ich habe einfach mal wieder das gute alte Arkanoid gegooglet und es ne Runde im Browser gezockt. Das Ding hat immer noch Suchtpotenzial und genau das soll meine kleine Anwendung auch bekommen. Natürlich mit meinem persönlichen Touch. Wenn Clonen, dann richtig. :-D

2. Brainstorming
##Kollisionsabfrage
-Wie kann ich eine echte Kollision herbeiführen?
##Keine Rechtecke sondern Kugel (Runde Ecken)?
-Alle 'schönen' Objekte werden als Image mit Runden Ecken eingefügt. Aber ein Image und seine Koordinaten bilden ein Rechteck (TOP, LEFT, HEIGHT & WIDTH)!
##Sound
-Wie binde ich Sounds bei den Kollisionsereignissen ein?
##Verhältnis : Aufschlagswinkel zu Reflektionswinkel
-COS, SIN, ABS, Winkel, PI ... alle linaeren Operationen aus der einfachen Geometrie von den 2-Dimensionalen Raum werde ich brauchen
-Der bewegbare 'Schläger' hat nicht immer Eingangswinkel = Reflektionswinkel im Verhältnis 1:-1 ...
##Spielspass
-Mehrschichtige Ereignisse der Steuerlemente
--> Explodieren,
--> Zerstörung nach dem x-ten Anschlagen
--> Bonusobjekte
-Hindernis-Objekte
-Messbarer Erfolg mit Vergleichsmöglichkeit
-->Highscore - Scoreboard
-Endlichkeit
-->Gameover
-Lifetime
-->Mehrere Bälle
-Schwierigkeitsgrad
-->mehrere Spiellevel mit verschiedenen Spielfeldern. steigender Hindernisszahl und Steigerung der Geschwindigkeit des Balles. das garantiert, dass das Spiel nicht unendlich viele Level haben muss (wer will schon soviele Level designen ):roll:
##Übersicht und Benutzerfreundlichkeit
-Optionsnmenu für Einstellungen
--> Eingabegeräte Konfigurieren (Tastaturkürzel festlegen)

So, nun habe ich schon mal eine grobe Richtung, wie das Endprodukt aussehen wird. Aber was mache ich zuerst? Das naheliegendste scheint dem Anfänger, der ich nun mal bin, eine paar Tests mit Kollisionen und Winkel- sowie Geschwindikeitsänderungen durchzuführen.


3. TESTAKTIONEN

3.1. Timer, Bewegung eines Balls

Ball in einem Grafikprogramm erstellen
Selbst der völlig grafikscheue Programmierer bekommt es mit ein wenig Geschick hin, einen Kreis mit Paint zu malen und den dann als BMP (Bitmap) zu speichern. Gesagt, getan.

Die ersten Schritte
Ich erstelle erstmal in Delphi ein Formular, füge ein TImage und ein TTimer Objekt dem Formular hinzu. Nun fange ich an mit den Eigenschaften und Ereignissen zu spielen. Zweck der Übung ist es, bei Formular Erstellung den Ball in Bewegung zu setzen und ihn dann an den Kanten des Formulars abprallen zu lassen.

- Fortsetzung folgt - WIP -

PS: Wenn ihr Ideen habt, was ich mir unbedingt anschaun sollte, bevor ich loslege, postet munter los ! :thumb:

jfheins 6. Dez 2008 18:31

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
Du solltst davon absehen, das ganze mit Timern und Images zu realisieren :mrgreen:

Dieser Ansatz ist schön und einfach, und wird deshalb auch oft für das erste Spiel verwendet. Aber sobald alles ein wenig komplizierter wird, isses nicht nur ein Durcheinander sondern auch inperformant.

Du könntest die Berechnung in einen Thread auslagern, wenn du nicht möchtest, dass das Fenster nicht mehr reagiert (zeichnen natürlich weiterhin im Mainthread)

Dann solltest du dich mit Vektorrechnung vertraut machen, die ist da sehr praktisch (dann mus man viel weniger mit sinüssen und cosinen herumhantieren :stupid: )

Ich habe auch mal einen Ansatz gepostet, wie man das mit dem Thread machen kann: http://www.delphipraxis.net/internal...=937096#937096 ;)

Oder du nimmt direkt Andorra 2D, das nimmt dir etwas mehr Arbeit ab ;)

psd-sign 6. Dez 2008 19:03

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
Er hat das böse Wort gesagt ... Vektorenrechnung :wall: :zwinker:

... Spass beiseite:

Ich wusste nicht, dass ich mit Vektorrechnung in Delphi weiterkomme. Nach den einzelnen Kollisionstests mit dem Image & Timer Nummer, werde ich mich in die Vektoren Geschichte reinlesen und ein wenig basteln.

olee 7. Dez 2008 13:20

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
Also anstatt Timer empfehle ich Application.OnIdle !!

DGL-Artikel
(Am ende der Seite ist ein Beispiel !!)


MFG

psd-sign 10. Dez 2008 11:42

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
Nach einigen Tests mit Timer, Koordinatenverschiebung ersten Kollisionen an den Enden des Spielfeldes komme ich nun an meine ersten Grenzen.

Folgendes Problem:
Ich habe ein feststehendes Hindernis auf dem Spielfeld, vom dem der Ball abprallen soll. Ein Abprall von einem rechteckigen Objekt ist mir bereits gelungen. Nun will ich das mal auf den nächten Level bringen und den Ball von einem Kreis abprallen lassen. Und da ergeben sich für mich Verständnisprobleme.

Also folgendes Szenario:
Der Ball fliegt aus irgendeiner Richtung auf das KREIS-Objekt zu und soll korrekt abprallen (Einfallswinkel = Reflektionswinkel).

Was weiss ich bzw. was ist als Umgebungsvariablen bekannt:
- Das Verhältnis mit dem der Ball sich bewegt (x-y-Verhältnis pro Timerintervall)
- Die Koordinaten des Balls (top, left, width, height)
- Die Koordniaten des Abrall-Kreises (ein Shape z.B.)

Mein Ansatz (codefrei und nur so in Gedanken):
- Den Aufprallpunkt berechnen
- Tangente anlegen (Aus Aufprallpunkt und Mittelpunkt des Abprall-Kreises)
- Koordinatensystem bzw. Achsen drehen
- Aus dem vorigen Punkt im Raum und dem Aufprallpunkt des Balles Einfallswinkel auf der Tangente berechnen
- Reflektionswinkel berechnen
- Reflektionswinkel aufgrund der vorigen Drehung nach Faktor der selbigen ändern
- neue x-y-Verhätlnis daraus ermitteln
- Ball auf die Reise schicken

Ich weiss, sehr theoretisch und es wird wohl deutlich, dass erst das mathematische Problem gelöst werden muss, bevor ich verstehen kann, was da im Code passieren muss.

Hat jemand ne tolle Idee? Besonders das Tangente anlegen usw. sorgt in meinem Kopf zu einer Mathereizüberflutung! :wall:

jfheins 10. Dez 2008 16:34

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
So würde ich das machen ... (Enthält aber jetzt Vektoren :stupid: )

Du hast einen Positionsvektor s_b mit X und Y Komponente (Positions-Koordinaten des Mittelpunkts) und
einen Geschwindigkeitsvektor v_b (Geschwindigkeit in X und Y Richtung) und den Radius r_b

Außderdem einen Positionsvektor s_h des Hindernisses und dessen Radius r_h

Dann nehmen wir erstmal die Differenz: a = s_h - s_b;

Wenn |a| <= r_b + r_h dann kollidieren sie.

Dann teilen wir die Geschwindigkeit auf:

Normalenvektor: b = a / |a|

Normalgeschw.: v_n = (v_b * b) * b

Und Tangentialgeschw.: v_t = v_b - v_n

Da sich die Normalgeschw. im Vorzeichen umkehrt, ergibt sich die neue Geschw. zu:

V_neu = v_t - v_n

Und das, ohne eine einzige Winkelfunktion :P

psd-sign 14. Dez 2008 01:53

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
Dank Dir ... hat geklappt!

Und gleich zum nächsten Problem in folgenden Szenario:
1. Mitten auf dem Spielfeld steht ein rechteckiges Objekt, das als Kollisionshindernis dient.
2. Der Ball ist in Bewegung
3. Er trifft auf das Rechteck (den Kollisionspunkt kann ich gerade noch rausbekommen)^^

Wie finde ich raus, an welcher Aussengerade der Ball einschlägt? Davon hängt ja ab, wohin der Reflektionswinkel gespiegelt wird ...
ne zündende Idee? Is schon spät ... vielleicht hab ich morgen ne Erleuchtung ... :gruebel:

jfheins 15. Dez 2008 12:23

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
http://www.gamedev.net/community/for...topic_id=91617 ;)

Du solltest dir nach Möglichkeit auch überlegen, was passiert wenn der Kreis auf die Ecke des Rechtecks prallt ...

Da du von Reflektionswinkel sprichst - machst du bis jetzt alles mit Winkelfunktionen??

psd-sign 15. Dez 2008 15:47

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich taste mich langsam vor. Ja, ich arbeite mit Winkeln. Wenn Geometrie und nie zuvor verstandenes Mathe, dann jezt. Horizonterweiterung oder Selbstgeisselung? Ein wenig von beidem ^^ Back to Topic.

Danke Julius & an alle anderen. Tolle Beiträge !

Der erste Rohentwurf eines nahezu funktionierenden Spiels steht (Siehe Anhang). Nun geht es an die Feinarbeit! Wie versprochen: Sobald die Aufgabe bewertet wurde, werde ich auch gerne die Source posten. Ich bitte um Geduld und verspreche auch weiterhin rege Updates und noch mehr Fragen zu posten :zwinker:

jfheins 15. Dez 2008 18:23

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger
 
Die Kollisionserkennung ist irgendwie noch nicht perfekt ... wenn man mit dem Ball von der Seite an einen Dings kommt, prallt der Ball nicht richtig ab (wie von einer waagerechten Fläche statt einer senkrechten Fläche)

Ansonsten siehts gut aus ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Seite 1 von 2  1 2      

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