|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 08.03.2005, 12:09 Titel: freeBASIC: Billard |
|
|
Hi Leute!
Bin grade dabei ein kleines Billardspiel für FB zu schreiben. Die eigentliche Game-Engine ist schon so ziemlich fertig, es sind nur noch ein paar kleine Fehler auszubessern bei der Kollision der Kugeln.
Danach muss ich mich ans Menü-Modul machen.
Hat eigentlich schon jemand erfahrungen mit so was?
Es ist ja schon mal ein erster (winziger ) Schritt in richtung physiks, oder
Im Programm benutze ich folgenden Code:
Code: |
TYPE Kugel
x AS USHORT
y AS USHORT
ag AS SINGLE
xm AS SINGLE
ym AS SINGLE
pw AS BYTE
Farbe AS BYTE
In AS BYTE
END TYPE
DIM Kugeln(15) AS Kugel
|
x und y sind die Koordinaten, is klar
ag ist der Winkel in dem sich die Kugel bewegt.
xm = COS(ag)
ym = SIN(ag)
Die beiden werden einmalig berechnet und gespeichert, weil die Winkelfunktionen recht langsam sind. So muss es pro Schuss nur einmal berechnet werden, und das ganze läuft flüssiger.
PW ist die Schusskraft in Prozent (also zw. 0 und 100)
x = x + (pw / 5) * xm
y = y + (pw / 5) * ym
Farbe dürfte klar sein.
Und In gibt an, ob sie schon versenkt wurde.
Hat wer verbesserungsvorschläge?
Wenn interesse besteht, werd ich nen Screenshot bereitstellen.
Also, danke fürs lesen *g*
Ich denke, dass ich in der Woche mit dem hauptspiel fertig werden sollte.
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
Xolios aka Ray
Anmeldungsdatum: 07.12.2004 Beiträge: 589 Wohnort: Wildeshausen
|
Verfasst am: 08.03.2005, 12:18 Titel: ... |
|
|
Hallo.
Verbessern kann ich es nicht aber ein
Screenshot wäre nicht schlecht.
Gruß
Ray _________________ www.ray-earth.de
Anm.: Neue ICQ |
|
Nach oben |
|
|
Marky
Anmeldungsdatum: 02.09.2004 Beiträge: 1173
|
Verfasst am: 08.03.2005, 12:41 Titel: |
|
|
Screenshots bitte! |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 08.03.2005, 13:51 Titel: |
|
|
Hallo
Der Ansatz, die Bewegung der Kugel in x- und y-Komponente zu zerlegen ist schon sehr gut. Ein Stoss an die Bande ändert ja nur das Vorzeichen einer Komponente. Stösst eine Kugel z.B. an die Seite, wird die x-Geschwindigkeit umgekehrt während das y-Tempo gleich bleibt.
Etwas schwieriger wird es, wenn zwei Kugeln zusammenstossen. Da muss man erst den Winkel berechnen, den eine gedachte Verbindungslinie zwischen den Mittelpunkten beider Kugeln einnimmt. Danach werden die x- und y-Geschwindigkeitskomponenten der Kugeln auf diesen Winkel "genormt", also ein neues Bezugssystem geschaffen, in der die Verbindungslinie waagerecht liegt. So bekommt man dann immer einen schönen senkrechten und zentralen Stoss. Unter diesen Bedingungen tauschen die beiden Kugeln nämlich eifach ihre Geschwindigkeiten. Wie wenn du zb. die weisse senkrecht auf eine andere schiesst. Im Idealfall fliegt die zweite mit der Geschwindigkeit der ersten weiter und die erste bleibt liegen. Auf diesen Fall kannst du jede Kollision umrechnen, die Geschwindigkeiten tauschen und dann wieder zurückrechnen. Zumindest habe ich mit dieser Methode ganz gute Ergebnisse bekommen.
Eine weitere Schwirigkeit ist, dass eine Simulation immer mit einer endlichen zeitlichen Auflösung läuft. Dadurch kann es vorkommen, dass Kugeln ineinanderrollen. Also in einem Rechenschritt berühren sie sich noch nicht, im nächsten überschneiden sie sich schon. Ein Fall der in der Realität natürlich nicht auftritt. Das herauszurechnen ist sehr aufwändig. Am besten versuchst du einen Kompromiss zu finden. Um so kleiner die Schritte, um so weniger fällt dieser Fehler ins Gewicht, dafür vergrössert sich die Laufzeit.
Ganz besonders kompliziert wird es, wenn mehr als zwei Kugeln an einem Stoss beteiligt sind. Die ankommend Kugel darf nicht an beide ihre volle Energie weitergeben, sondern muss sie richtig aufteilen. Da bin ich mir jetzt selbst nicht mehr ganz sicher, aber das sollte so zu lösen sein, dass man zuerst die Kollision mit der Kugel berchnet, deren Mittelpunkt näher liegt (wegen der endlichen zeitlichen Auflösung bedeutet ein Berühren im gleichen Rechenschritt ja nicht unbedingt echte Gleichzeitigkeit) und dann mit den Werten diser Berchnung die zweite Kollision rechnen lässt. Wenn allerdings die Abstände wirklich volkommen gleich sind wie z.B. beim Anstoss, dann müsste man fast die Summe aller Beteiligten Kugeln zählen und dann eine "Spezialfallbehandlung" dafür schreiben. Oder man baut - wie in der Realität - ganz kleine, zufällige Ungenauigkeiten bei der Position ein. Haben sich die Kugeln erst einmal bewegt, wird dieser super-sonder-Spezialfall, dass zwei Abstände auf mehrere Nachkommastellen genau gleich sind nicht mehr auftreten.
Um festzustellen, ob alles einigermassen richtig berechnet wird, kannst du den Energieerhaltungssatz anwenden. Unter der Annahme, dass alle Kugeln die selbe Masse haben, muss die Summe aller einzelnen Absolutgeschwindigkeiten nach dem Stoss konstant bleiben, da ausser der Energie die aus dem Stoss kommt, dem System ja sonst keine zugeführt wird.
Wenn das klappt, kannst du noch die Reibung einbauen. Am einfachsten, indem du bei jeder Berchnung alle Geschwindigkeiten mit einem Bremsfaktor multiplizierst, der natürlich kleiner ist als 1. Wenn du möchtest, kannst du auch bei Berührungen mit der Bande oder anderen Kugeln einen solchen Bremsfaktor benutzen.
Gruss
Skilltronic
EDIT: Zusatz zur Reibung. Damit die Kugeln irgendwann ganz liegen bleiben, muss die Geschwindigkeit ab einem bestimmten Wert auf Null gesetzt werden. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
MrBobble
Anmeldungsdatum: 12.10.2004 Beiträge: 26 Wohnort: Straubing
|
Verfasst am: 08.03.2005, 16:00 Titel: |
|
|
wenn du nen screenshot hättest wär nicht schlecht....
wär ja mal a idee so was in Physics einzubauen *gg*
www.physics.de.tc
Aber den Themenschwerpunkt legen wir eher Richtung Lernhilfe...
Grüßle MrBobble |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 08.03.2005, 19:33 Titel: |
|
|
Also, hier der Scr, ich hoffe, er funktioniert *g*
Anmerkung:
Ich musste den Shot im Fenstermodus machen, aus geschwindigkeitsgründen ist das Programm aber auf dem Vollbildmodus ausgelegt.
@ Skilltronik:
So in etwa habe ich das auch gelöst.
Ein winkel wird errechnet. Benutzt wird dazu der Kosinus-Satz:
Die Punkte (x|y), (y+5|y) und (xt|yt) bilden ein Dreieck. (xt und yt sind die KO, an denen die Kugel getroffen wurde).
Code: |
(x|y) (x+5|y)
+--------------------+
\ a |
\_/
\
+ (xt|yt)
|
Bei der Kolision wollte ich die Kräfte aber aufteilen, etwa im Verhältnis 9:1. Denn nur die besten Spieler schießen die Weiße Kugel so, dass sie danach stehenbleibt.
Wenn zwei Kugeln getroffen werden, wird's tatsächlich etwas komplizert; jede Kollision wird einzeln berechnet:
Code: |
FOR i = 0 TO 14
FOR j = i + 1 TO 15
'Errechnen der Entfernungen bzw d. Punktes (xt|yt)
'berechnung des winkels a
'Neuverteilung von Kräften und Winkel
NEXT
NEXT
|
i und j sind dabei jeweils der Index der treffenden und der getroffenen Kugel.
So wird jede Kugel genau einmal abgearbeitet; ein Doppeltreffer wird aber leider nicht berücksichtigt.
Stattdessen wird einmal die erste Kugel angestoßen, dann die zweite.
Genug geredet, jetzt endlich der Screenshot:
(Url: http://mitglied.lycos.de/siteofkaos/myfiles/Bilder/ScrShot/Scr_Billard_1.jpg _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 08.03.2005, 19:42 Titel: |
|
|
Was ich noch vergessen habe:
Die Statusleiste oben:
Unter Spieler steht der Name des Spielers, der grade dran ist. Dieses Feature kommt erst, wenn erst mal das Menü funktioniert (kann also noch dauern *g*), aber der "Rohbau" ist schon fertig.
Winkel ist der Winkel, mit dem auf die Weiße Kugel gezielt wird. (wieder zu einer Gedachten Senkrechten, wie im oberen Beispiel. die berechnung des Winkels funktioniert nach den selben Prinzip).
Score dürfte auch klar sein.
Sobald man klickt, beginnt sich der Kraftbalken aufzufüllen. Wenn er sein Maximum (100) errecht hat, sinkt er wieder. Das geht so lange hin und her, bis man loslässt. So kann man ungefähr die Kraft bestimmen, jedoch nicht auf Newton und Prozent genau, so wie auch im echten Spiel.
Die Statusbar rechts unten wird noch nicht verwendet, ich weiß auch noch nicht, was ich da mal reinschreiben will.. mal sehn *g*
vllt ist euch auch der violette streifen unten links aufgefallen.
Bewegt man den Mauscursor darauf, wird er zu einer Art Poupup-Menü, in dem Der aktuelle Punktestand steht....
IDEE:
Der Punktestand wird nach rechts unten verfrachtet.
In das Poupup-Fenster kommt ein kleines Menü!
So was wie Speichern, laden, ende,....
Übrigens:
Die Schrift mit transparenten Hintergrund kommt aus einer selbstgeschriebenen Schriftroutine; die Zeichenmuster sind mit POINT eingelesen. Den meisten dürfte klar sein, wie so was geht *g*
Für den Hintergrund hab ich mir noch nichts überlegt, wahrscheinlich bleibt er auch schwarz.
OK, das wärs dann fürs erste.
Danke für eure Tipps!
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
|
Xolios aka Ray
Anmeldungsdatum: 07.12.2004 Beiträge: 589 Wohnort: Wildeshausen
|
Verfasst am: 09.03.2005, 09:13 Titel: Gut! |
|
|
Hallo.
Sieht wirklich gut aus.
Weiter so!
Gruß
Ray _________________ www.ray-earth.de
Anm.: Neue ICQ |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 09.03.2005, 20:32 Titel: |
|
|
Sieht klasse aus!!
Poste doch mal den Download-Link, wenn das Spiel fertig ist.
jb |
|
Nach oben |
|
|
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 23.03.2005, 12:36 Titel: |
|
|
Sehr sogar...
Musste meine Festplatte formatieren, das ganze Projekt is weg...
Und dabei war ich doch schon soooo weit!!
...
und jetz hab ich erst mal damit zu tun, dass ich win am laufen halte.
in nem monat spätestens muss ein serial her, und ich hab die produkt-id nimmer....
(glaub ich...)
is das vllt ein grund, auf linux umzusteigen?
naja, auf jeden fall kanns schon dauern, bis ich wieder damit anfange....
bis es fertig is sowiso.
also sorry...
ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 23.03.2005, 13:34 Titel: |
|
|
Dusky_Joe hat Folgendes geschrieben: |
also sorry...
|
Musst dich doch nicht entschuldigen...
Du kannst doch nichts dafür, wenn deine Festplatte den Geist aufgibt..
jb |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 23.03.2005, 14:56 Titel: |
|
|
Dusky_Joe hat Folgendes geschrieben: | Sehr sogar...
Musste meine Festplatte formatieren, das ganze Projekt is weg... |
Hätte ich jetzt auch gesagt...
Gruss
Skilltronic
Ups - jetzt hab' ich ja selbst so einen einzeiligen Kommentar abgegeben... _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Marky
Anmeldungsdatum: 02.09.2004 Beiträge: 1173
|
Verfasst am: 23.03.2005, 16:43 Titel: |
|
|
Dusky_Joe hat Folgendes geschrieben: | is das vllt ein grund, auf linux umzusteigen? |
Bloß nicht! |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 23.03.2005, 17:54 Titel: |
|
|
Gegen Datenverlust gibt es zum Glück geeignete Lösungen: Backup. Im einfachsten Fall ist es ein Satz CD-RWs, wo man in einem regelmässigen Turnus die eigenen Dateien, auch BASIC-Projekte, draufbrennt und diese CD-RWs in einem Tresor oder Bankschliessfach einlagert. Die Luxus-Variante ist ein SCSI-Tape, welches jede Nacht per cron- bzw- AT-Job die Daten sichert.
Und mit IDE-RAID (Mirroring) sichert man sich wirkungsvoll gegen Diskausfälle ab - ein Promise-Controller zusammen mit zwei identischen IDE-Festplatten kostet nur wenige Euro.
All diese Lösungen haben übrigens nichts mit Linux oder Windows zu tun, sondern lassen sich mit jedem Betriebssystem realisieren. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 23.03.2005, 23:28 Titel: |
|
|
@ Marky:
Wieso?
Ich kenn zurzeit a paar Linux-User, und von denen kommt eigentlich recht gutes Feedback. Ich bin zwar gewarnt worden, dass es paar Probleme mit den Treibern geben kann, aber dafür hab ich dann keine Probleme mit Serials, Produkt-IDs und Viren für Linux gibts auch weniger.
Aber alles kann man ja nicht wissen *g*
Also, was hast du denn über Linux gehört, was mich davon abhalten sollte?
@ dreael:
Ja, sicher, wenn man denn nen Brenner hätte!
Meine Kiste is jetz... über 8 Jahre alt, damals waren Brenner eben noch nicht standard...
Und deswegen lohnen sich eigentlich sonstige aufrüstungen auch nicht mehr...
Dass es mit dem OS nix zu tun hat, is mir klar. Umsteigen will ich, weil mein Win ned aktivierbar is, sich also in nem Monat verabschiedet.... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
Marky
Anmeldungsdatum: 02.09.2004 Beiträge: 1173
|
Verfasst am: 24.03.2005, 01:16 Titel: |
|
|
Dusky_Joe hat Folgendes geschrieben: | @ Marky:
Wieso?
Ich kenn zurzeit a paar Linux-User, und von denen kommt eigentlich recht gutes Feedback. Ich bin zwar gewarnt worden, dass es paar Probleme mit den Treibern geben kann, aber dafür hab ich dann keine Probleme mit Serials, Produkt-IDs und Viren für Linux gibts auch weniger.
Aber alles kann man ja nicht wissen *g*
Also, was hast du denn über Linux gehört, was mich davon abhalten sollte? |
Linux kommt für mich aus verschiedenen Gründen nicht in Frage. Außerdem mag ich Linux vom Grund her einfach nicht. Es mir nicht sympathisch. Man hat immer so einen Frickler-Nachgeschmack im Mund, nee, das schmeckt einfach nicht.
Aber ich muss zugeben das Knoppix mir auch schon mal "das Leben gerettet hat".
Aber wems gefällt, der solls ruhig benutzen. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|