Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

freeBASIC: Billard

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 08.03.2005, 11:09    Titel: freeBASIC: Billard Antworten mit Zitat

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 durchgeknallt ) Schritt in richtung physiks, oder Zunge rausstrecken

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 cool
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
Benutzer-Profile anzeigen Private Nachricht senden
Xolios
aka Ray


Anmeldungsdatum: 07.12.2004
Beiträge: 589
Wohnort: Wildeshausen

BeitragVerfasst am: 08.03.2005, 11:18    Titel: ... Antworten mit Zitat

Hallo.

Verbessern kann ich es nicht aber ein
Screenshot wäre nicht schlecht.

Gruß
Ray
_________________
www.ray-earth.de
Anm.: Neue ICQ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
Marky



Anmeldungsdatum: 02.09.2004
Beiträge: 1173

BeitragVerfasst am: 08.03.2005, 11:41    Titel: Antworten mit Zitat

Screenshots bitte! cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 08.03.2005, 12:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MrBobble



Anmeldungsdatum: 12.10.2004
Beiträge: 26
Wohnort: Straubing

BeitragVerfasst am: 08.03.2005, 15:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 08.03.2005, 18:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 08.03.2005, 18:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 08.03.2005, 21:44    Titel: Antworten mit Zitat

schaut sehr interessant aus das dingens. weiter so echt fein
_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 08.03.2005, 22:45    Titel: Antworten mit Zitat

Am besten schaust Du Dir noch

http://www.dreael.ch/Deutsch/Download/Billard-Simulation.html

kurz an - war von mir früher einmal ein kleines QB-Projekt in diese Richtung. Im Prinzip fehlt dort nur noch die Simulation der Reibungsverluste.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Xolios
aka Ray


Anmeldungsdatum: 07.12.2004
Beiträge: 589
Wohnort: Wildeshausen

BeitragVerfasst am: 09.03.2005, 08:13    Titel: Gut! Antworten mit Zitat

Hallo.

Sieht wirklich gut aus.
Weiter so!

Gruß
Ray
_________________
www.ray-earth.de
Anm.: Neue ICQ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 09.03.2005, 19:32    Titel: Antworten mit Zitat

Sieht klasse aus!! lächeln

Poste doch mal den Download-Link, wenn das Spiel fertig ist.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 23.03.2005, 01:09    Titel: Antworten mit Zitat

dauerts noch lang? lächeln
_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 23.03.2005, 11:36    Titel: Antworten mit Zitat

Sehr sogar...
Musste meine Festplatte formatieren, das ganze Projekt is weg... weinen

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 23.03.2005, 12:34    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:

also sorry...

Musst dich doch nicht entschuldigen...

Du kannst doch nichts dafür, wenn deine Festplatte den Geist aufgibt.. zwinkern

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 23.03.2005, 13:56    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:
Sehr sogar...
Musste meine Festplatte formatieren, das ganze Projekt is weg... weinen


Hätte ich jetzt auch gesagt...

zwinkern

Gruss
Skilltronic

Ups - jetzt hab' ich ja selbst so einen einzeiligen Kommentar abgegeben...
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Marky



Anmeldungsdatum: 02.09.2004
Beiträge: 1173

BeitragVerfasst am: 23.03.2005, 15:43    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:
is das vllt ein grund, auf linux umzusteigen?

Bloß nicht! grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 23.03.2005, 16:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 23.03.2005, 22:28    Titel: Antworten mit Zitat

@ 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
Benutzer-Profile anzeigen Private Nachricht senden
Marky



Anmeldungsdatum: 02.09.2004
Beiträge: 1173

BeitragVerfasst am: 24.03.2005, 00:16    Titel: Antworten mit Zitat

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. durchgeknallt

Aber ich muss zugeben das Knoppix mir auch schon mal "das Leben gerettet hat". grinsen

Aber wems gefällt, der solls ruhig benutzen. happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz