AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi DELPHI - Arkanoid - Vom Anfänger für Anfänger
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von psd-sign · begonnen am 6. Dez 2008 · letzter Beitrag vom 14. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
psd-sign

Registriert seit: 3. Nov 2008
31 Beiträge
 
#1

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

  Alt 6. Dez 2008, 19:09
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.

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 )
##Ü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 !
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 6. Dez 2008, 19:31
Du solltst davon absehen, das ganze mit Timern und Images zu realisieren

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 )

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
  Mit Zitat antworten Zitat
psd-sign

Registriert seit: 3. Nov 2008
31 Beiträge
 
#3

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 6. Dez 2008, 20:03
Er hat das böse Wort gesagt ... Vektorenrechnung

... 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.
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 7. Dez 2008, 14:20
Also anstatt Timer empfehle ich Application.OnIdle !!

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


MFG
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat
psd-sign

Registriert seit: 3. Nov 2008
31 Beiträge
 
#5

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 10. Dez 2008, 12:42
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!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 10. Dez 2008, 17:34
So würde ich das machen ... (Enthält aber jetzt Vektoren )

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
  Mit Zitat antworten Zitat
psd-sign

Registriert seit: 3. Nov 2008
31 Beiträge
 
#7

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 14. Dez 2008, 02:53
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 15. Dez 2008, 13:23
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??
  Mit Zitat antworten Zitat
psd-sign

Registriert seit: 3. Nov 2008
31 Beiträge
 
#9

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 15. Dez 2008, 16:47
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
Angehängte Dateien
Dateityp: rar powerball_191.rar (262,0 KB, 51x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#10

Re: DELPHI - Arkanoid - Vom Anfänger für Anfänger

  Alt 15. Dez 2008, 19:23
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
  Mit Zitat antworten Zitat
Alt 3. Jan 2009, 10:39     Erstellt von Borlander
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort
Seite 1 von 2  1 2      


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 12:16 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