Rätsel mit LED's

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Rätsel mit LED's

Post: # 80090Post vanlangen
27 Jan 2013, 16:13

Hallo PaC-DK Gemeinde,

ich hatte die letzten Wochen mal wieder etwas Zeit mich mit einem kleinen Spiel zu beschäftigen.
Um wieder etwas rein zu kommen hab ich quasi das basic tut mit eigenen Grafiken und etwas modifiziert
nachgebaut.

Jetzt stehe ich kurz vor der vollendung, aber habe auch noch ein kleines Problem.

Image

Bei dieser Maschine soll der Spieler über die LED's 0-15 einen bestimmten Code eingeben,
den er erhält, wenn er eine bereits funktionierende Karte darauf legt. Das schwierige dabei
soll sein, wenn er den Zustand (ein<->aus) von einer LED ändert, sollen auch die umliegenden
ihren Zustand ändern. Damit es etwas kniffeliger ist den richtigen Code einzustellen.

Jetzt habe ich folgendes Problem. Unverfangen wie ich ran gegangen bin hab ich mit soetwas angefangen:

Image

Schon bevor ich es ausprobieren wollte fiel mir auf, dass ich so den Zustand wohl nicht ändern kann,
da mein erste Befehl den Zustand wechselt, aber damit die bedingung für die zweite If-Abfragen automatisch
wahr macht und der zustand somit sofort zurück gesetzt wird. Hab jetzt schon ein wenig mit if-not rumgedaddelt.
Und bin natürlich weiter am Überlegen ob man evtl. was mit bool's und im Loop vom Raum was machen könnte,
wäre aber für Ratschläge und Tips von etwas erfahrerneren Leuten dankbar :lol:

Danke schon mal für alle die sich die Mühe machen mit zu denken.

Beste Grüße
Micha :pcprob:
Das ist ein Feature kein Bug!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80091Post japanhonk
27 Jan 2013, 16:29

Das scheint mir eine kleine programmiertechnische Herausforderung zu sein.

Bevor ich mir da aber einen Kopp drum mache, verweise ich immer wieder
mal auf den Einsatz von break (), um vorzeitiges Setzen von Bedingungen zu verhindern.

Also :
if_obj (LED_1;1)
{
setobj (LED_1;2)
break()
}
if_obj (LED_1;2)
{
setobj (LED_1;1)
break()
}

usw


Wie sollen sich die LEDs denn genau ändern ? Ich nehme an, die, die nicht zum
entsprechenden Code gehören, sollen beim Drücken aus gehen, oder wie soll das werden ?



:comp:
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Re: Rätsel mit LED's

Post: # 80093Post vanlangen
27 Jan 2013, 18:11

Danke schon mal Japanhonk

Ja mit break hatte ich auch schon überlegt, aber dann springt er mir ja nur
aus der If-Abfrage raus, wenn ich das richtig verstanden habe.

Nochmal zum allgemeinen Verständniss:

Im Bild oben sind ALLE LED's auf an -> es gibt einen zweiten Zustand, da werden sie grau (aus)

Spieler legt blaue ID-Karte auf das Gerät -> Es leuchten nur die LED's, die für die Richtige Beschriftung der Karte an sein müssen

Spieler legt eine von ihm selbstgemachte rote ID-Karte aufs Gerät und die LED's sind erstmal zufällig an und aus
=> die Karte ist ja noch nicht richtig beschriftet. Das soll mit diesem Gerät jetzt geschehen.

Also beginnt der Spieler die LED's anzuklicken um die Richtige Kombination einzustellen und dann auf beschriften zu klicken (Button der ncoh eingebaut wird.)

Schwierigkeit:
Drückt der Spieler z.B. auf die LED 5, die vor dem Klick eingeschaltet war, so wird diese Ausgeschaltet.
Aber beim gleichen Klick werden alle direkt angrenzenden LED's auch auf den jweils anderen Zustand geschaltet.

Also z.B. Klick auf LED 5

LED 5 jetzt (aus) -> LED 5 neu (an)
LED 1 jetzt (aus) -> LED 1 neu (an)
LED 4 jetzt (an) -> LED 4 neu (aus)
LED 6 jetzt (aus) -> LED 6 neu (an)
LED 9 jetzt (an) -> LED 9 neu (aus)

Diese Änderungen passieren also bei einem Klick auf die LED 5
Ähnlich wie bei Mystelinchen auf der Komode im Haus, wo man alle LED'S anschalten muss.
Oder bei Gatio, wo man die Holzstäbchen alle eindrücken muss.

Hoffe es ist etwas klarer geworden was am Ende passieren soll.
Wenn nicht mach ich nochmal 2-3 beispiel bilder oder gif's
Das ist ein Feature kein Bug!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80094Post japanhonk
27 Jan 2013, 18:16

Ja, ich denk da mal in Ruhe drüber nach. Kann doch nicht so schwer sein.

Ist doch eigentlich nur eine UND Verknüpfung, die den Endzustand wahr werden lässt.

Bis dahin

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80095Post japanhonk
27 Jan 2013, 19:10

Obwohl ich den Umstand, dass ich eine eingeschaltete LED ausschalten soll,
komisch finde, kann man dir da helfen.
Bei 15 LEDs dürfte das reichlich Arbeit sein, da jeder Zustand abefragt und invertiert werden muss.

( Ich hätte alle LEDs ausgeschaltet und dann nur die benötigten abgefragt )

Du brauchst eine Bedingung, die erkennen lässt, dass der Spieler die richtige Taste gedrückt hat. ( eigentlich 15 Bedingungen )

Die Abfrage, die Du als Beispiel gebracht hast, müsste dann für jede Taste
entsprechend durchgeführt werden.

Versuchen wir es mal mit einer Stringvariable und einer Funktion :


Normal : Zustand 1 = ON
Zustand 2 = OFF

on (click)
{
if_obj (obj1;1)
setstring (obj1;off) -->String invertieren
if_obj (obj1;2)
setstring (obj1;on) -->String invertieren

if_obj (obj2;1)
setstring (obj2;off) -->String invertieren
if_obj (obj2;2)
setstring (obj2;on) -->String invertieren

if_obj (obj3;1)
setstring (obj3;off) -->String invertieren
if_obj (obj3;2)
setstring (obj3;on) -->String invertieren

function (setobs)
}

function (setobs) :

if_string (obj1;off) -->Objekt anpassen
setobj (obj1;2)
if_string (obj1;on)
setobj (obj1;1)

if_string (obj2;off)
setobj (obj2;2)
if_string (obj2;on)
setobj (obj2;1)

if_string (obj3;off)
setobj (obj3;2)
if_string (obj3;on)
setobj (obj3;1)


Beim Anklicken des Objektes wird der String ( On / Off ) sofort auf das
Gegenteil des aktuellen Objektzustandes gesetzt. Diese Abfrage geschieht
für jede Taste und befindet sich im Skript der jeweils gedrückten Taste.

Dadurch, dass aber erstmal nur der String geändert wird, zur Abfrage aber
der Objektzustand benutzt wird, geschieht erstmal weiter Nichts. Die Tasten ändern sich erstmal nicht sichtbar.

Wenn jetzt aber die Funktion setobs aufgerufen wird, werden die Objektzustände an die jetzt aktualisierten Strings angepasst. Und zwar für
alle Tasten auf einmal.

Durch die Trennung aus String und Objektabfrage besteht das Problem, für
das wir eigentlich break() brauchten, so nicht mehr.
Beim Tastenklick wird der jeweils andere Zustand der Tasten erstmal nur "vorgemerkt" und später erst ausgeführt.
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Re: Rätsel mit LED's

Post: # 80096Post vanlangen
27 Jan 2013, 22:03

Jup an sowas habe ich auch schon gedacht.
Dass man die änderung des zustands in ne Funktion auslagert.
Ich werds die Woche mal durchprobieren, wenn ich die Zeit finde.

Mit Else wäre es super einfach.
if_obj(LED;1)
setobj(LED;2)
else
setobj(LED;1)

Naja es is wie immer.
Irgendwann steh ich NACHTS um 3 Uhr auf wie ein Bekloppter und
schmeis den Rechner an und tipp hecktisch auf der Tastatur rum
aus lauter Angst die soeben im Traum gesponnene Lösung könnte mir
entfleuchen.
Ging mir vorallem mit Mathe schon oft so :)
Danke nochmal Manni.
Wünsch dir nen guten Start in die neue Woche morgen
Das ist ein Feature kein Bug!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80097Post japanhonk
27 Jan 2013, 22:10

Ich bastel mal eben noch eine demo, will jetzt auch wissen, ob das so geht.

Übrigens : ELSE gibt es, man braucht es nur nicht zu schreiben.


If_obj (objekt;1)
setobj (objekt;2)
setobj (objekt;1)

ist dasselbe, wie :

If_obj (objekt;1)
setobj (objekt;2)

<else>

setobj (objekt;1)

Allerdings würde setobj (objekt;1)
in jedem Falle ausgeführt..

Bis bald

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80098Post japanhonk
27 Jan 2013, 22:44

Habs getestet, funktioniert.

Die Demo gibts hier :

http://fynegames.homepage.t-online.de// ... l_test.adz

Ich beginne mit 2 Ojekten AN und 2 Objekten AUS.

Die ist beliebig erweiterbar. Hab es mit 2, 3 und 4 Objekten probiert.
Durch Anklicken irgendeines Objektes kannst Du vorhersagen, welcher
Button AN und welcher AUS sein wird.
Jeder Button ändert seinen Zustand, wenn auch nur einer angeklickt wird.

Die Objektskripte sind in allen 4 Objekten identisch.

Bei weiteren Objekten müssen alle Skripte nur passend ergänzt werden.
Waren 10 min Arbeit...

Frohes Schaffen
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Re: Rätsel mit LED's

Post: # 80099Post vanlangen
27 Jan 2013, 22:50

Schon mal 1000 dank
Das ist ein Feature kein Bug!

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Re: Rätsel mit LED's

Post: # 80100Post parkiii
28 Jan 2013, 14:51

japanhonk wrote: If_obj (objekt;1)
setobj (objekt;2)
setobj (objekt;1)

ist dasselbe, wie :

If_obj (objekt;1)
setobj (objekt;2)

<else>

setobj (objekt;1)
???
Das ist doch keinesfalls dasselbe..
else wird nur ausgeführt, wenn das dazugehörige if false ergibt.


Zum Thema:
Eine besonders einfache Lösung wäre einfach ein boolean-Wert, der eine Änderung überprüft.

Code: Select all

if(...)
   if (!aenderung){
      set(obj, 1)
      set(aenderung, true)
}
if(...)
   if(!aenderung) {
      set(obj, 2)
      set(aenderung, true)
}
...
set(aenderung, false)

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80101Post japanhonk
28 Jan 2013, 16:42

Deine Lösung benutzt Bools, ich habe Strings benutzt, ist im Prinzip das Gleiche. Wichtig ist, dass Objekte und Änderungsvorhaben getrennt werden.


Abseits des Themas :

If_obj (objekt;1)
setobj (objekt;2)
setobj (objekt;1)

Ergebnis :
Wäre die Bedingung nicht erfüllt ( also else Teil ) , wird nicht der Befehl direkt hinter der Abfrage ausgeführt, sondern der Übernächste.
Bei unwahrer Bedingung stünde das Objekt auf 1.


If_obj (objekt;1)
setobj (objekt;2)
<else>
setobj (objekt;1)

Ergebnis : Das Objekt steht gleich auf 1, wenn die Bedingung nicht erfüllt wurde. Es würde also direkt zum 3. Befehl gesprungen werden.

Ergebnis also : siehe oben : Objekt steht in beiden Fällen auf 1 am Ende der
3 Zeilen, wenn die Bedingung nicht erfüllt wurde.

-Was zu Beweisen war- :mrgreen:

Natürlich ist das das Selbe, nur ist es mit dieser Schreibweise in der Praxis wenig sinnvoll. Aber es ist hier ja nur ein theoretisches Beispiel.
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Re: Rätsel mit LED's

Post: # 80102Post vanlangen
28 Jan 2013, 19:23

If_obj (objekt;1)
setobj (objekt;2)
setobj (objekt;1)

If_obj (objekt;1)
setobj (objekt;2)
<else>
setobj (objekt;1)

sind nicht ganz gleich, weil er beim oberen Beispiel auch wenn die If-Abfrage erfüllt ist am Ende das Objekt wieder auf Zustand 1
setzt. Mit Else überspringt er den unteren Befehl wenn das If true ergibt.

Werd mich jetzt mal an nem 3x3 Feld versuchen, wenns a bissl klappt, dann wird sicher auch klarer was es am Ende werden soll.
Das ist ein Feature kein Bug!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80103Post japanhonk
28 Jan 2013, 19:26

Ist die Bedingung aber nicht erfüllt, ist es immer das Selbe.
Ich sag ja - in der Praxis ist das sinnlos. Theoretisch kommt immer daselbe raus.

Da Else hier aber nix zu suchen hat - :banana: - alles Banane !

Bisher haben wir stets einen Weg gefunden, das zu Kriegen, was wir wollten...
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Re: Rätsel mit LED's

Post: # 80106Post parkiii
28 Jan 2013, 19:54

Habs übrigens grad getestet, weil mir so eine Syntax ohne "else" sehr suspekt vorkam.

Code: Select all

on (click) {
  if_bool(test;true)
    textout (1; true; 100; 100)
  textout (2; false; 100; 150)
}
Ergebnis:
test == false: Ausgabe false
test == true: Ausgabe true und false

Somit hat der if-Befehl keine eingebaute else-Funktion (wie du behauptest). Es wird immer die Zeile nach dem if-Block mit ausgeführt.

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80108Post japanhonk
28 Jan 2013, 20:09

parkii wrote: Es wird immer die Zeile nach dem if-Block mit ausgeführt.
Sagte ich doch:
japanhonk wrote:Ist die Bedingung aber nicht erfüllt, ist es immer das Selbe.
Theoretisch müssten wir uns da einig sein...
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Re: Rätsel mit LED's

Post: # 80110Post vanlangen
28 Jan 2013, 20:23

Nicht streiten Jungs :P

Ihr habt mir nämlich schon geholfen. Der Ansatz mit Objektzustand und dessen
Änderung zu trennen ist super. Es sollte eignetlich funktionieren. Hab jetzt mal
ein kleines Beispiel gemacht und es funktioniert auch.

Ich glaube mir fällt grad noch ein kleiner Bug auf. Aber vom Prinzip her
läuft das nach meinem Test eigentlich schon ganz gut.

An dieser Stelle nochmal ein DICKES DANKE an euch zwei.
Und dicken Respekt für deine Grafiken bei Star Trek FYNE ;-)
Das sieht immer hammer aus, wie du die nach und nach aufbaust.

Bis denn
Micha

PS:
hier der link für mein kleines Beispiel Spielchen
http://dl.dropbox.com/u/77300807/kleine ... ispiel.adz
Das ist ein Feature kein Bug!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80111Post japanhonk
28 Jan 2013, 20:27

Streiten ??? Wir ??? Nöööööö - freundschaftlich anbuffen..Höchstens...

Wir meinen das Selbe, wir artikulieren es nur unterschiedlich...egal, was wir sagen !

Wie ham uns alle lieb :mrgreen: :mrgreen: :mrgreen:

Ich guck mir deine Demo gleich mal an.

Vor lauter Grafiken komm ich kaum noch zum Skripten - da muss man in Übung bleiben...
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Re: Rätsel mit LED's

Post: # 80112Post parkiii
28 Jan 2013, 20:40

das ist doch kein streitgrund :D
freut mich, dass es endlich funktioniert ;)

aber ich dachte, du meinst, dass die zeile nach dem if-block automatisch der else-teil ist.

also so:

Code: Select all

if (...)
   befehl1   //wird ausgeführt wenn if = true
befehl 2     //wird NUR ausgeführt wenn if = false
aber richtig ist es so:

Code: Select all

//es wird entweder befehl1 oder befehl 2 ausgeführt
if (...)
   befehl1
else
   befehl2

//befehl1 wird ausgeführt, wenn if = true
//befehl2 wird IMMER ausgeführt
if (...)
   befehl1
befehl2

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80114Post japanhonk
28 Jan 2013, 20:48

Der 2. Teil ist das, was ich damit ausdrücken wollte.

( Befehl 2 wird IMMER ausgeführt )

Darum hab ich ja auch gesagt : In der Praxis ziemlich unsinnig.

Also entweder ist der Download fehlerhaft oder mein Editor will den nicht.

Da kommt immer I/O Fehler 6.

Ich versuch das nochmal neu runterzuladen.
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Re: Rätsel mit LED's

Post: # 80115Post vanlangen
28 Jan 2013, 20:49

So jetzt müsste es so passen wie ich es meine.
Musste bei jeder LED noch die Zustände der nicht benötigten übergeben,
damit die sich nicht versehentlich ändern, sondern ihren zustand halten.

Diese Demo jetzt müsste soweit passen. Jetzt sollten wirklich nur noch der
Zustand der angeklickten LED und aller direkt angrenzenden wechseln.

Ich kann mich nur nochmal bedanken und finde es übrigens super hier im Forum.
Hab bislang noch nich so viel geäußert, aber die aktiven Leute machen alle nen netten
Eindruck.

Hier natürlich der Link zur verbesserten Demo
http://dl.dropbox.com/u/77300807/kleine ... h_LEDS.adz

[EDIT]:
Ja hab die alte Datei aus der Dropbox raus ;-) deswegen gehts vermutlich nich mehr
Das ist ein Feature kein Bug!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80119Post japanhonk
28 Jan 2013, 21:33

Na, da bin ich ja mal neugierig... :D

Hoffe, dass Du letzte nacht um drei am Pennen warst, anstatt schweissgebadet vorm PC zu brüten... :wink:
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

vanlangen
PaC-DK Newby
Posts: 38
Joined: 12 Sep 2012, 19:44
Location: Coburg

Re: Rätsel mit LED's

Post: # 80121Post vanlangen
28 Jan 2013, 21:36

Bedingt durch die scheis Kälte und die scheis Erkältung .... ja .... ich schlaf momentan gut :-)
Das ist ein Feature kein Bug!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80122Post japanhonk
28 Jan 2013, 21:39

In dem Fall mal gute Besserung.

Ich habs gerade hinter mir. Und ich kriege nur sehr selten was.... Aber wenn, dann volle Packung.

Kamillentee Ole.... :drink:
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Rätsel mit LED's

Post: # 80123Post japanhonk
28 Jan 2013, 21:46

Jap, jetzt funzt es. Jetzt kapier ich auch, was das soll.

Dass nur die jeweils benachbarten LEDs sich ändern sollen, hatte ich so nicht
auf dem Schirm.

Nette Sache. Gefällt mir.
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Post Reply