12 Constant Max# \ Maximalanzahl der Stühle : aus icon" LED_ge_aus.png" ; \ zur bequemeren Verwendung, drei Wörter, : ein icon" LED_ge_an.png" ; \ die die Adressen der jeweiligen Icons : weg icon" LED_ge_weg.png" ; \ aus dem Iconstack holen. Create Spielfelder \ Bitfelder, die die hübschen? Sitzanordnungen enthalten %100100100100 , \ 4-er %100100101010 , \ 5-er %101010101010 , \ 6-er %101110101010 , \ 7-er %101110101110 , \ 8-er %101110111011 , \ 9-er %111011111011 , \ 10-er %111111111011 , \ 11-er %111111111111 , \ 12-er Create Zustand Max# allot \ Speicher für an-aus, je ein Byte pro Stuhl : Zustand_schalten ( n -- flag ) \ ändert (je nachdem) den Zustand des Stuhles Nummer n, zeigt an, ob etwas geändert wurde Max# mod zustand + dup \ Nummer in Adresse umrechnen, Kopie anlegen c@ 0 <> tuck \ Zustand lesen, auf nicht-Null testen, Flag kopieren ( -- flag addr flag ) IF dup c@ 1 = IF 2 ELSE 1 THEN swap c! \ falls ja: Adr. kopieren, lesen auf 1 testen \ und entweder 1 oder 2 schreiben ( -- flag ) ELSE drop \ falls nicht: Adresse vernichten ( -- flag ) THEN ; : umschalten ( n -- ) \ LED-Nummer n und ihre Nachbarn ändern dup dup \ Nummer kopieren ( 3-fach) Zustand_schalten \ versuche Zustand zu ändern (evtll.) IF \ falls etwas geändert wurde, BEGIN 1+ dup Zustand_schalten UNTIL drop \ versuche Nachbar im Uhrzeigersinn umzuschalten, bis Erfolg! BEGIN 1- dup Zustand_schalten UNTIL drop \ versuche Nachbar im Gegenuhrzeigersinn umzuschalten, bis Erfolg! THEN ; \ fertig