:: DreamCreators' LBP Bastelwerkstatt :: Tutorials Teilen |
Bauanleitung für eine Memory-Spiel-Steuerung
Thema: Bauanleitung für eine Memory-Spiel-Steuerung Do Jan 29, 2015 3:42 am
Hi DreamCreators,
nach einiger Tüftelei hab ich nun die Bauanleitung für die Logic zu einem Memory-Spiel in LBP fertig.
Ein paar Vorüberlegungen, was soll die Logic leisten???
-Sie soll das Auf und Zudecken von Bildkarten leisten
-Sie soll verhindern, dass mehr als zwei Karten gleichzeitig aufgedeckt werden
-Sie soll erkennen, ob die beiden Karten identisch sind oder unterschiedlich
-wenn die Kärtchen unterschiedlich sind, sollen sich beide Karten gleichzeitig wieder Zudecken
-wenn die Kärtchen identisch sind, dann sollen beide Kärtchen vom Feld verschwinden
-wenn alle Kärtchen umgedreht wurden, dann soll die Logic das Spielende einläuten
Was benötige ich dazu?
-für jede Karte einen Microchip mit der Steuerungs-Logic
-einen Cursor, mit dem ich ein Kärtchen auswählen kann
-einen Kontrollinator (Sender)
-einen Kontrollinator (Empfänger) mit Steuerungs-Logic
Der Cursor
Mit einem Cursor sollen die verdeckten Karten angesteuert werden, so dass man diese damit auswählen kann.
Der Cursor wurde von mir einfach mit Sticker-Panel-Material gebastelt, ein farbiger Ring und danach in der Mitte ein transparentes Sticker-Material, um einen Marker mittig plazieren zu können.
Der Kontrollinator (Empfänger) wird unmittelbar auf dem Cursor plaziert. der erweiterte Beweger wird zugegeben und mit dem linken Stick verkabelt (der Ausgang am L-Stick für horizontale Bewegung wird mit dem entsprechenden Eingang auf dem erweiterten Beweger verbunden, der Ausgang für die vertikale Bewegungsrichtung ebenfalls mit dem entsprechenden Bewegereingang. Als Einstellungswerte hab ich die Geschwindigkeit auf 4,0 und den Wert für Beschleunigung auf 100% (das Benutzen des Sticks soll eine sofortige Bewegung des Cursors mit voller Geschwindigkeit bewirken) eingestellt.
Durch Ausprobieren hab ich die Erfahrung gemacht, dass die bisherige Anordnung alleine noch nicht funktioniert, das ändert sich jedoch, wenn ich den zweiten (einfachen) Beweger ins Spiel bringe. Mit diesem Beweger, bei dem die Geschwindigkeiten für beide Richtungen auf 0 gestellt sind und die Werte für Beschleunigung und Bremswirkung auf jeweils 100%, wird die Bewegung des Cursors abgebremst, immer dann wenn der L-Stick in Ruheposition ist.
Um diesen Beweger zu installieren, wurden beide Ausgänge des linken Sticks mit einem ODER-Baustein verbunden und dann mit einem NICHT-Baustein mit dem Beweger verbunden. In Ruheposition des L-Sticks ist dieser Beweger aktiviert, und der Cursor ist gebremst.
Gesteuert wird der Cursor dann mit einem zweiten Kontrollinator (Sender)
Der Karten-Microchip
(>1)
Hier ist eine Anordnung von 2 Sensoren (Cursor und X-Button) zu sehen. Der Cursor-Sensor hat eine Reichweite von etwa 3,0, der X-Button-Sensor steht auf unendlich. Durch die beiden UND-Bausteine werden die Sensoren miteinander verdrahtet, so dass jeder Sensor mit jedem der beiden UND-Bausteine verbunden wird. Die Ausgänge der beiden UND-Bausteine führen zu einem Timer (abwärts zählend, Laufzeit 4,0 sec) und zwar einer zum Timer-Eingang, der andere zum Reset-Eingang. Der Timer-Ausgang führt zu zwei Markern (>4), einer davon heißt bei mir "common signal", der zweite heißt "individual signal" und zu dem ODER-Baustein in der Grafik-Mitte. Desweiteren geht vom Cursor-Sensor linksoben im Bild noch eine Verbindung ab zu einem weiteren Marker (>2), den ich "Cursor-Response" getauft habe.
Was bewirkt die bisherige Anordnung?
Wird der Cursor, auf dem sich ein Marker mit Namen "Cursor" befindet, über einem Memory-Kärtchen plaziert, dann aktiviert dieser den Cursor-Sensor (>1) auf dem Microchip, das Kärtchen ist dadurch bereit, aktiviert zu werden (oder anders: die Bombe ist scharfgemacht! ) Der Cursor-Response-Marker (>2) stellt sicher, dass später der Counter nicht aktiviert werden kann, wenn der Cursor über keinem Kärtchen plaziert ist, d.h. steht der Cursor über keinem Kärtchen, dann kann ich den X-Button drücken soviel ich will, aber der Counter bleibt davon unberührt. Das ist wiederum wichtig, weil der Counter später steuert, dass nur jeweils maximal 2 Kärtchen gleichzeitig aktiviert werden können. Ist der Cursor-Sensor aktiviert und wird nun gleichzeitig der X-Button gedrückt, was den X-Button Sensor auslöst, dann wird durch die beiden UND-Ausgänge der Timer (>3) aktiviert. Fragt mich bitte nicht mehr, warum ein UND-Baustein auch noch zum Timer-Reset führt, aber beim Tüfteln hats einfach so geklappt. Muss man denn Logic immer unbedingt verstehn??? :p
Während der Timer läuft findet folgendes statt: die Marker-Sensoren (>4) "Common Signal" und "Individual Signal" senden ihr Signal aus und geben den anderen Kärtchen sozusagen zu verstehen, dass "allgemein" ein Kärtchen aktiviert ist, und dass ein "bestimmtes", "individuelles" Kärtchen aktiviert ist. Dieses "individuelle Signal" entsteht dadurch, dass dieses Signal für jedes Kartenpaar durch fortlaufende Nummerierung individuell festgelegt wird. Der Marker heißt also beim ersten Kartenpaar "Individual Signal 01", beim zweiten Kartenpaar "Indiviual Signal 02" und so fort.
Folgender Vergleich, wenn Du Dich beim PSN anmeldest während Du LBP spielst, dann zeigt Dir das Menü es ist 1 Freund online (common signal) und wenn Du's dann genauer wissen willst, dann sagt es Dir: avundcv ist online (individual signal). Schließlich führt der Timer über den ODER-Baustein in der Mitte der Grafik zur eigentlichen Auf-/ Zudeck-Steuerung der Kärtchen (>5)
Diese Steuerung besteht aus einem Selector mit zwei Ausgängen, wobei der zweite Ausgang mit dem ersten Eingang verbunden wird.
Liegt am zweiten Eingang kein Signal an, dann ist der erste Ausgang aktiviert und das Kärtchen bleibt zugedeckt. liegt allerdings ein Signal am zweiten Eingang an, dann schaltet der Selector auf den zweiten Ausgang um, und das Kärtchen wird aufgedeckt (soo lange wie das Signal dort anliegt). Ist der Timer aktiviert, dann ist das Kärtchen somit sichtbar, weil der ODER-Baustein mit dem zweiten Eingang des Selectors verbunden ist. Ist die Zeit abgelaufen, dann deckt sich das Kärtchen wieder zu.
Nun kommen wir zum Abschnitt (>7)
Hier seht ihr zwei Sensoren einer mit Namen "Common Signal" und einer mit Namen "Individual Signal" (mit fortlaufender Nummerierung)
Sind zwei Kärtchen gleichzeitig aufgedeckt, dann sagt der "Common Signal"-Marker des einen Kärtchens dem "Common Sensor" des
zweiten Kärtchens, dass ein weiteres Kärtchen aktiviert ist. Ist also das erste Kärtchen aktiviert (Selector-Ausgang 2 ist aktiv) und der Common Sensor ist ebenfalls aktiviert, weil auch ein zweites Kärtchen aufgedeckt wurde, dann werden beide Signale in dem
UND-Baustein (> (rechts unterhalb des ODER-Bausteins in der Grafik) miteinander verknüpft und erneut mit dem ODER-Baustein verbunden. Dies bewirkt, dass die Stopzeit der Kärtchen synchronisiert wird, das heißt, das von den beiden Kärtchen zuerst aufgedeckte Kärtchen, deckt sich nicht früher wieder zu als das später aufgedeckte zweite Kärtchen, sondern das Zudecken findet zeitgleich statt.
Wird nun aber das zweite Kärtchen mit gleichlautender fortlaufender Nummer hinsichtlich des "Individual Signals" aufgedeckt, dann und nur dann wird der "Individual Signal" Sensor aktiviert. Ich hab das hier mal so verknüpft, dass alle drei Signale gleichzeitig in das bei (>7) auf die Sensoren folgende UND-Gatter einfließen, also Timer (>3) aktiviert und "Common Signal" Sensor aktiviert
und "Individual Signal" Sensor gleichzeitig aktiviert, ergeben ein Ausgangssignal beim UND-Baustein und aktivieren damit einen
Einmal-Schalter (Zähler Wert1), der dann dauerhaft aktiviert bleibt und damit einen weiteren Selector, wie den vorher bereits
beschriebenen, aktiviert, der einen Timer (>10, unterer Rand der Grafik Mitte) (diesmal hochzählend) auslöst. Dieser Timer
steuert, dass beide Kärtchen die Zeit des Hochzählens sichtbar bleiben, und wenn dann hochgezählt ist, dann werden über das
NICHT-Element beide Ausgänge deaktiviert, so dass beide Kärtchen verschwinden.
Letztes Element auf dem Microchip is ein weiterer Marker namens "Counter Reset" (>6), welcher dasZurücksetzen des Counters
auf dem Controllinator steuert.
Die Logic auf dem Kontrollinator (Empfänger)
Der Kontrollinator (Empfänger) wurde von mir auf dem Cursor plaziert und enthält folgende Logic-Anordnung:
Der linke Teil (>7) bezieht sich auf die Cursor-Bewegung, die hab ich bereits ausführlich beschrieben.
Wenden wir uns mal zuerst dem Abschnitt (>4) zu. Der X-Button wird zusammen mit dem Sensor "Cursor Response" über
einen UND-Baustein miteinander verbunden, was bewirkt, dass das AusgangsSignal des UND-Bausteins, und damit der X-Button nur
aktiviert werden kann, wenn auch der "Cursor Response"-Marker auf dem Kärtchen-Chip aktiviert ist, d.h., nur dann, wenn der Cursor über einem Kärtchen plaziert ist. Dieses AusgangsSignal führt zu einem weiteren UND-Gatter, welches den Marker "X-Button" (>6) aktiviert, und damit den dementsprechenden Sensor auf den Kärtchen-Chips, und zu einem Counter (Wert 3) (>3).
Drück ich also den X-Button und der Cursor liegt über einem Kärtchen, dann löst das die Aufdeck-Steuerung aus, allerdings nur,
solange der Counter nicht bis 3 hochgezählt hat. Der Counter steuert einen Selector (>5) (Verdrahtung genau wie bei den
vorhergehenden) Ist der Counter-Wert kleiner als drei, dann bleibt der SelectorAusgang 1 aktiviert, welcher in den zweiten
UND-Baustein einmündet, welcher dann zum X-Button Marker führt. Also solange der Counter nicht 3 erreicht, ist der X-Button in der Lage, den X-Button Marker zu aktivieren. Ist allerdings der Counter-Wert 3 erreicht, dann schaltet der Selector auf den zweiten Ausgang um, welcher nicht belegt ist, allerdings kann dadurch der X-Button nicht erneut aktiviert werden bis der Counter zurückgesetzt wird. Es können also maximal 2 Kärtchen gleichzeitig aktiviert werden.
Nun nur noch die Steuerung, welche den Counter zurücksetzt. Zuerst hab ich einen Notfall-Reset-Knopf eingefügt (für den Fall der
Fälle, vergleichbar mit der Handkurbel beim elektrischen Garagentor :p) Dieser (bei mir R2) ist mit einem Timer (>2) verbunden
(Rauf und Runterzählen, Wert 1,5 sec, Ausgang zusätzlich mit dem eigenen ResetEingang verbunden). Wird der R2-Knopf gedrückt
gehalten, dann entsteht nach 1,5 sec am Timer ein AusgangsSignal, welches den Reset-Eingang am Counter aktivieren soll. Dieser
ResetEingang soll aber auch aktiviert werden, wenn der "Reset Counter" Sensor (>1) aktiviert wird, bzw. die Kärtchen wieder
zugedeckt worden sind, egal ob nur ein Kärtchen aufgedeckt wurde oder zwei. Durch Rumgetüftle ist dabei diese Verdrahtung entstanden.
Der "Resetcounter" Sensor (>1) führt zu einem NICHT-Baustein, und dann weiter in einen XOR-Baustein, wo auch der
Notfall-Schalter-Timer-Ausgang hineinführt. Der XOR-Ausgang mündet in einen Ein-Impuls-Schalter (Zähler mit Wert1, Ausgang mit eigenem Reset verbunden) und dann schließlich in den Reset-Eingang des Counters.
Was passiert dabei?
Werden 1 oder 2 Kärtchen aufgedeckt, dann wird der "Reset Counter"-Marker auf dem Karten-Chip aktiviert und darüber auch der
"Reset Counter" Sensor auf dem Kontrollinator, was dazu führt, dass das AusgangsSignal am NICHT-Gatter erlischt, wodurch am
XOR-Gatter zwei Eingänge nicht aktiviert sind und dadurch das Ausgangs-Signal 0 wird. Decken sich die Karten wieder zu, wird der "Reset Counter" Sensor wieder deaktiviert, der NICHT-Ausgang ist also wieder aktiviert, und ein Input-Signal liegt am XOR-Gatter an.
Dadurch wird der Ein-Impuls-Schalter aktiviert, dieser feuert 1x und der Counter wird zurückgesetzt. Also immer wenn die Kärtchen sich wieder zudecken (egal ob nur eines oder zwei gleichzeitig aufgedeckt waren, der Counter wird zurückgesetzt. Betätige ich den Notfall-Schalter, dann kommt am XOR-Gatter ein zweites Signal an, was dazu führt, dass der Ausgang wieder deaktiviert wird. Dadurch, dass sich der Timer allerdings, wenn er voll ist, sofort wieder selbst zurücksetzt (Ausgang mit eigenem Reset-Eingang verbunden), wird der XOR-Ausgang auch gleich wieder aktiviert, wodurch erneut ein einzelner Rücksetz-Impuls am Reset-Eingang des Counters entsteht! Genau der gewünschte Effekt
So, das ist meine Lösung zu einer Spiel-Logic zu einem Memory-Spiel in LBP. Ich kanns selbst kam glauben, dass isch das alles selbst rausgefunden hab, aber mit Lust am Knobeln und Rumtüfteln geht so einiges!
Ich werde diese, oder eine elegantere Lösung, je nach Reaktion aus der Community in meiner nächsten Musik-Gallerie verwenden und hoffe noch zwei weitere Mini-Gedächtnis-Spiele mit unterzubringen.
Thema: Re: Bauanleitung für eine Memory-Spiel-Steuerung Do Jan 29, 2015 8:44 pm
Oh sehr schön
Ich gebe zu, den Beitrag bisher nur überflogen zu haben, daber ich werde mir den in einem ruhigen Moment mal ganz genau zu Gemüte führen. Ich musste etwas grinsen, weil ich auf der PS3 sowas auch mal in dieser Form gemacht habe, aber das ist gefühlt Jahrzehnte her und ich weiß garnichts mehr darüber ^^
Hahaha, Du siehst, irgendwie hinke ich der Zeit hinterher, aber ich muss sagen, es ist ein geniales Gefühl, wenn man sowas wirklich zum Laufen gebracht hat. Der nächste Schritt ist bei mir, das ganze jetzt in ein zeitgemäßes Design zu bringen, da kommen dann die neuen LBP3-Möglichkeiten ins Spiel.
Ich wünsch Euch ein schönes Wochenende, liebe Grüße, Jürgen^^
Thema: Re: Bauanleitung für eine Memory-Spiel-Steuerung
:: DreamCreators' LBP Bastelwerkstatt :: Tutorials
Liste der Forumieren-Funktionen | © phpBB | Kostenloses Hilfe-Forum | Kontakt | Einen Missbrauch melden | Einen Blog erstellen