Seite 1 von 1

Multi-Threading

BeitragVerfasst: Do 7. Nov 2013, 23:40
von mpmxxd
Hallo liebe Casio Basic Programmierer,

ich versuche seit längerem Spiele mit meinem GTR zu programmieren und stoße dabei immer wieder an die Grenze, dass ich nicht weiß, wie ich es realisieren kann, meinen "Spieler" (ein per Locate erzeugter Punkt) zu bewegen, gleichzeitig kleine Sternchen (*) zu "schießen" und eine Art automatisch generierte Gegner (ein paar Xe) auf meinen Spieler zuwandern zu lassen, ohne dass ich mich bei besagten Abläufen nicht bewegen kann, d.h. Es gibt ja nur eine spielkontrolliende und tastenüberwachende Spielschleife. Wie soll ich per Locate erzeugte Zeichen verzögert (!) bewegen, ohne dass die Spielerbewegung aufgrund dieser Verzögerung nicht möglich ist? Für mich ist es logisch, dass die Schleife die Verzögerung ja bei jedem Schleifendurchlauf "erleiden" muss - nur wie kann man das intelligent umgehen?

Vielen Dank schon einmal im Voraus und freundliche Grüße
mpmxxd

Re: Multi-Threading

BeitragVerfasst: Fr 8. Nov 2013, 03:14
von Pali64
Hallo mpmxxd
Alsooo.... da hast du gleich mehrrere Fragen verpackt :-)

Um nicht bei einer Schleife für Verzögerungen nix zu tuhn musst du darin GetKey anweisungen durchlaufen, dann kanst du Interaktionen ausführen....
ABER umm es sinfoll zu machen und nicht dauernde (Nichtsnutzschlaufen) zu durchlaufen musst du ein solches programm als Baumstrucktur aufbauen.
das heist du durchläufst immer das ganze programm, setzt matrixen mit buchstaben oder Zahlen und jedesmal beim durchlaufen zählst du die
variablen weiter. BEISPIEL:
2 Variablen kreieren "S10.10" und "G10.10" für ein 10x10 Spielfeld ...S= Spieler und G= Gegner.
wenn dan zum beispiel G1,1 (Für gegner an der Position 1.1)
den wert 32 (Verzögerung von 32 durchläufen gehe zum nächsten Feld)
erreicht hat setzt du diesen auf "0" und G2.1 auf 1
und somit ist dein Gegner ein Feld nach unten gewandert.....
Jetzt musst du nur die Variablen G und S als "Undmatrix" Verknüpfen und wenn das Resultat /= (für Ungleich) "0" ist hat eine Kollision statgefunden.
Also Gegner hat spieler erwischt.

Das waren einfach mal paar Tips ;-) aber es gibt mitlerweile ghute Tutors für CASIO's mit solchen Tipps ;-)

Falls es dir zu kompliziert wahr, wie ich das Oben beschrieben hab, melde dich einfach nochmals und ich werde es versuchen zu erklären....

Gruss Pali64

Re: Multi-Threading

BeitragVerfasst: Fr 8. Nov 2013, 16:17
von mpmxxd
Hallo Pali64,

erstmal vielen vielen Dank für die schnelle und sehr hilfreiche Antwort! Logisch, dass in der Verzögerungsschleife eine Tastenabfrage erfolgen muss, damit mein Spieler nicht laggt. Vielen Dank nochmal dafür!
Mein Problem ist, dass ich mich an Matrizen noch nicht herangewagt habe und alles mit einfachen Variablen und Schleifen versucht habe - war ja klar, dass irgendwo eine Grenze ist. Ich arbeite mich gerade ein, dennoch verstehe ich das genaue Vorgehen nicht ganz, so wie du es erläutert hast. Ich weiß vor allem nicht, wie ich die Spieler-/Gegnermatrix erzeugen soll, denn laut Definition ist diese ja:

[[1,2,3][4,5,6]] -> Mat S

Nur brauche ich doch theoretisch nur einen X- und einen Y-Wert für die zweidimensionale Positionierung auf dem GTR?

Und nochmal ganz was anderes: Wie ist es zu realisieren, wenn ich nicht unbedingt auf Textausgabe sondern Grafikausgabe aufbauen will? Ich möchte ja nicht unbedingt nur die im GTR vorhandenen Zeichen verwenden, sondern gewisse Figuren oder Spieler auch selbst zeichnen und bewegen lassen. Unmöglich scheint es ja auf jeden Fall nicht zu sein - aber möglich für normale Menschen? Die Grafikausgabe soll ja ziemlich langsam sein.


Vielen Dank für deine/eure Hilfe (schon im Voraus) und liebe Grüße
mpmxxd

Re: Multi-Threading

BeitragVerfasst: Mo 18. Nov 2013, 19:27
von Anderesio
DIe Graphikausgabe ist wirklich ziemlich langsam,
was du aber tun könntest, deine figur probe zu zeichnen, ggf in einem extra prog, welches du aufrufst.
Dabei bestimmst du für jeden Pxl oder Plot (je nachdem, welches Graphikelement du verwendest) mit einem Offset.

zB.: du möchtest eine Figur nutzen, die einfach ein 2x2 Pxl großes Feld ist, dann setzt du einfach:
Code: Alles auswählen
Plot x, y
Plot 1+x, y
Plot x, 1+y
Plot 1+x, 1+y


Bedenke jedoch, wenn du Graphikelemente benutzt, dann wechselt der GTR automatisch zum Graphikscreen.

Re: Multi-Threading

BeitragVerfasst: Sa 23. Nov 2013, 22:29
von elias.koegel
Kleiner InsiderTipp: Grafikausgabe lässt sich beschleunigen durch geschickte Nutzung von Bildschirmfotos/Bildern. Zum Beispiel Karten nicht zeichnen, sondern als Bild hinterlegen. Ebenso der Wechsel zwischen verschiedenen Modi kann so schnell gemacht werden.