Types wieder einmal

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Jamagin

Betreff: Types wieder einmal

BeitragDo, Dez 24, 2009 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, nun bin ich selbst bei den Fragenden dabei! *schäm*
Habe ein dickes Brett vor dem Kopf und schnall es einfach nicht obwohl ich es therotisch korrekt aufzeichne!! *gg*

Ich arbeite gerade an einer 9-Ball Billardversion, die 8-Ball hab ich schon geschafft. Das Problem was ich jetzt habe, ist eigentlich ganz klein aber es ist leider so. Es geht mir nur um ein Type Feld.

Sobald ich eine Kugel einloche, als Beispiel die 2, befindet sich die 1 noch in der Typeliste. Da ich aber bei der BallInHole-Collision prüfen muß, ob noch niedere Kugeln am Tisch liegen (in diesem Fall die 1) kann der Spieler das Spiel nicht beenden und der andere kommt dran. Mir geht es nur darum, wie kann ich das nun in meiner Typeliste bewerkstelligen, das ich die gesamte Liste abfrage ob noch niedere Types als der eingelochte da sind!
Ist sicher nur ein Denkfehler von mir, da ich aber schon in der Typeliste drin bin wenn die Collisionsroutine aufgerufen wird, kann ich da nicht mehr mit 2 For next Schleifen arbeiten, denn dann erhalte ich eine MAV.

Das ist mein einziges Problem, irgendwie ein blödes, aber es ist da und haltet mich enorm auf! Ich würde mich echt freuen, wenn mir jemand einen Denkanstoß oder Lösungsansatz geben kann. Da ich den Kugeln in der Typeliste eine Nummer zuordne ist es ja schon mal vordefeiniert und ich brauch ja nur mehr auf die Nummern vergleichen. Aber ich komm einfach nicht dahinter wie ich das jetzt machen muß! Oje oje...

Hoffe, es weiß jemand Rat! Danke im voraus

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte
 

da_poller

BeitragDo, Dez 24, 2009 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ohne code kann wohl keiner helfen....

Alfadur

BeitragDo, Dez 24, 2009 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, du weißt welche Kugel du eingelocht hast, nämlich die zweite ... oder xte...
Dann mußt du doch nur deine Kugelliste durchgehen und schauen obs ne Kugel mit ner ID gibt die kleiner ist als die ID der eingelochten Kugel ... oder nicht?

Wenn du zwei for next Schleifen verwendest und in einer davon den Type Eintrag einer Kugel löscht und dieser Eintrag in der anderen for Schleife noch verwendet wird, kommt ein MAV. Ist klar, weil die Kugel ist ja gelöscht. Also mußt du beim Zugriff in der zweiten for Schleife einfach erstmal testen ob der Type Eintrag noch existiert (<>null ist) bevor du irgendwas vergleichst...

Oder ists wirklich soviel komplizierter?
A Cray is the only computer that runs an endless loop in less than four hours.
 

da_poller

BeitragDo, Dez 24, 2009 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
btw: wenn die 1 am tisch liegt kann man sehrwohl das spiel beenden(ohne die 1 selbst zu lochen): stichwort kombination. du musst ja nur die niedrigste anspielen. fallen kann irgendeine.

Jamagin

BeitragDo, Dez 24, 2009 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@da_poller

Da hast du schon recht, das sagt die Regel ja aus. Aber wenn die 1 noch am Tisch liegt und der Spieler eine höhere als die 1 anspielt bzw. einlocht, ist es ja ein Foul. Ich versuch grad noch was um das zu überprüfen. Theoretisch hab ich ja die Lösung. Aber ich hab nicht den Durchblick im Moment. Beim 8-Ball war es einfacher, da mußte ich ja nur auf die 8 prüfen und welche Kugel welcher Spieler hat.

Werde nochmals mit einer Vergleichsschleife probieren, vielleicht geht es ja!

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte
 

da_poller

BeitragDo, Dez 24, 2009 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
die weiße darf alle kugeln auf dem tisch berühren, unter der voraussetzung, dass die niedrigste kugel am tisch zuvor berührt wurde.

wieso das nciht einfach abfragen?(und alles was danach passiert ist egal(bis auf das eine bande berührt werden muss oder ne kugel fällt))

btw: bin billardfan. hast du die 8ball version zum ansehen?(exe per oder icq...?)

PSY

BeitragDo, Dez 24, 2009 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

dein kugeltype sieht wohl mehr oder weniger so aus:

Code: [AUSKLAPPEN]
type Tball
  field x,y
  field speedx, speedy
  field wert
  field eingelocht
end type


da types werden ja der reihe nach erstellt, also ist beim 1. type das feld wert =0 (weisse), beim nächsten 1 usw.

bevor ein spieler an der reihe ist, gehst du einfach jede kugel durch und suchst die niedrigste auf dem tisch:

Code: [AUSKLAPPEN]
for b.Tball = each Tball
  if b\eingelocht = false and b\wert>0 then niedrigsterBall = b\wert : exit
next


wenn du jetzt in deiner hauptschleife alle bälle auf kollision überprüfst, sieht das folgendermassen aus:
(wert = 0 ist die weisse, immer der allererste kugeltype)

Code: [AUSKLAPPEN]
For b.Tball = Each Tball
   b2.Tball = After b
   While b2 <> Null
      
         if b\wert=0 and b2\wert <> niedrigsterBall then FOUL()
      
      b2 = After b2
   Wend
Next


sollte funzen wenn ich nicht grad nen denkfehler drinhab.

l8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

Jamagin

BeitragDo, Dez 24, 2009 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
@PSY

Ah, danke! Ich schau es mir grad an! Hoffe es geht so! Sieht sehr vernünftig aus!!

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Jamagin

BeitragFr, Dez 25, 2009 9:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Dieser Thread kann geschlossen werden. PSY hat mich wieder auf den richtigen Weg gebracht!

Auch Dank an alle anderen für die rasche Hilfestellung!

lg. Jamagin Cool
Bevor du etwas neues beginnst, erledige das alte

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group