restructuring
This commit is contained in:
parent
3193117543
commit
95ff0c95b3
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
||||||
erzeugnis
|
build/
|
||||||
|
|
||||||
|
|
|
||||||
BIN
documents/screenshot.png
Normal file
BIN
documents/screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 59 KiB |
55
hilfe.md
55
hilfe.md
|
|
@ -1,55 +0,0 @@
|
||||||
Dieses Spiel ist inspiriert von [http://www.kongregate.com/games/PleasingFungus/manufactoria"](Manufacturia), [http://www.crazy-machines.com/](Crazy Machines), [http://worldofgoo.com/](World of Goo) … und auch von unvergessenen Stunden Hardware-Praktikum im Informatik-Studium :P
|
|
||||||
|
|
||||||
## Steuerung
|
|
||||||
|
|
||||||
- Links-Klick/Rechts-Klick: Feldtyp wechseln
|
|
||||||
- Mausrad-Drehen: Feld drehen
|
|
||||||
|
|
||||||
## Figur
|
|
||||||
|
|
||||||
Die Figur kann durch Aktoren auf dem Spielplan umher bewegt werden und wird als schwarzer Kreis dargestellt.
|
|
||||||
Zudem verfügt die Figur über ein Liste von gesetzen Symbolen (Band), dargestellt durch farbige Punkte neben der Figur. Gelesen wird das Band immer an der vordersten Stelle und geschrieben wird an die hinterste Stelle (FIFO-Prinzip).
|
|
||||||
|
|
||||||
## Aktoren
|
|
||||||
Jedes Feld des Spielplans kann mit einem Aktor bestückt werden, der je nach Typ unterschiedliche Einflüsse auf die Figur ausübt. Folgende Typen stehen zur Verfügung:
|
|
||||||
|
|
||||||
### Eingang
|
|
||||||
|
|
||||||
Der Eingang ist fest platziert auf dem ganz linken Feld des Spielplans und wird durch ein weißes Dreieck dargestellt. An ihm wird die Spielfigur auf den Plan gesetzt und bewegt sich anschließend in die angezeigte Richtung.
|
|
||||||
|
|
||||||
### Ausgang
|
|
||||||
|
|
||||||
Auf dem ganz rechten Feld des Spielplans fest platziert befindet sich der Ausgang, der durch einen weißen Kreis dargestellt wird. Steuert man die Figur zu diesem Feld, so wird der aktuelle Band-Inhalt ausgelesen und akzeptiert.
|
|
||||||
|
|
||||||
### Abweiser
|
|
||||||
|
|
||||||
Jedes leere Feld beendet den Lauf der Figur mit einer Abweisung des aktuellen Band-Inhalts.
|
|
||||||
|
|
||||||
### Schieber
|
|
||||||
|
|
||||||
Dieser Aktor dient dazu die Figur von einem Feld zu einem benachbarten zu befördern ohne dabei den Band-Inhalt zu ändern.
|
|
||||||
|
|
||||||
### Schreiber
|
|
||||||
|
|
||||||
Um ein Symbol auf dem Band zu schreiben, wird dieser Aktor benötigt. Die jeweilige Farbe gibt an, welches Symbol geschrieben wird und die Richtung zeigt, wohin die Figur anschließend befördert wird.
|
|
||||||
|
|
||||||
### Weiche
|
|
||||||
|
|
||||||
An einer Weiche wird das erste Symbol auf dem Band der Figur gelesen und die übereinstimmende Richtung gewählt, zu welcher die Figur im Anschluss bewegt wird. Gibt es einen passenden Ausgang, so wird das gelesene Symbol vom Band entfernt. Falls kein Ausgang gefunden wird oder das Band leer ist, wird der Ersatz-Ausgang (grau) gewählt.
|
|
||||||
|
|
||||||
## Aufgaben
|
|
||||||
|
|
||||||
Ziel ist das Lösen von bestimmten Aufgaben. Dabei wird zwischen zwei Arten von Aufgaben unterschieden:
|
|
||||||
|
|
||||||
### Akzeptor
|
|
||||||
|
|
||||||
Hierbei geht es darum den Band-Inhalt der Figur zu untersuchen und zu entscheiden, ob er eine bestimmte Bedingung erfüllt oder nicht. Fall ja, so steuert man die Figur in den Ausgang; andernfalls auf ein beliebiges leeres Feld.
|
|
||||||
|
|
||||||
Beispiel: Genau dann akzeptieren, wenn das Band mindestens zwei mal rot enthält.
|
|
||||||
|
|
||||||
### Transduktor
|
|
||||||
|
|
||||||
Bei einer Transduktor-Aufgabe soll eine Ausgabe erzeugt werden, die in einer bestimmten Beziehung zur vorgefundenen Eingabe steht, also sozusagen eine Funktion angewendet werden.
|
|
||||||
|
|
||||||
Beispiel: Die Eingabe zwei mal wiederholt.
|
|
||||||
|
|
||||||
147
makefile
147
makefile
|
|
@ -6,91 +6,92 @@ cmd_cat := cat
|
||||||
cmd_tsc := tsc --allowUnreachableCode
|
cmd_tsc := tsc --allowUnreachableCode
|
||||||
cmd_sass := sass
|
cmd_sass := sass
|
||||||
|
|
||||||
dir_quelldatein := quelldatein
|
dir_source := source
|
||||||
dir_erzeugnis := erzeugnis
|
dir_build := build
|
||||||
|
|
||||||
all: \
|
all: \
|
||||||
${dir_erzeugnis}/vtm.html \
|
${dir_build}/vtm.html \
|
||||||
${dir_erzeugnis}/vtm.css \
|
${dir_build}/vtm.css \
|
||||||
${dir_erzeugnis}/vtm.dat.js \
|
${dir_build}/vtm.dat.js \
|
||||||
${dir_erzeugnis}/vtm.js
|
${dir_build}/vtm.js
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
|
||||||
clear:
|
clear:
|
||||||
@ ${cmd_echo} "-- zurücksetzen …"
|
@ ${cmd_echo} "-- clearing …"
|
||||||
@ ${cmd_rm} ${dir_erzeugnis}
|
@ ${cmd_rm} ${dir_build}
|
||||||
.PHONY: clear
|
.PHONY: clear
|
||||||
|
|
||||||
${dir_erzeugnis}/vtm.html: \
|
${dir_build}/vtm.html: \
|
||||||
${dir_quelldatein}/manifestation/web/vtm.html
|
${dir_source}/main.html
|
||||||
@ ${cmd_echo} "-- Struktur …"
|
@ ${cmd_echo} "-- structure …"
|
||||||
@ ${cmd_md} ${dir_erzeugnis}
|
@ ${cmd_md} ${dir_build}
|
||||||
@ ${cmd_cp} $^ $@
|
@ ${cmd_cp} $^ $@
|
||||||
|
|
||||||
${dir_erzeugnis}/vtm.css: \
|
${dir_build}/vtm.css: \
|
||||||
${dir_quelldatein}/manifestation/web/vtm.scss \
|
${dir_source}/manifestation/web/game.scss \
|
||||||
${dir_quelldatein}/manifestation/web/partie.scss
|
${dir_source}/main.scss
|
||||||
@ ${cmd_echo} "-- Gestaltung …"
|
@ ${cmd_echo} "-- style …"
|
||||||
@ ${cmd_md} ${dir_erzeugnis}
|
@ ${cmd_md} ${dir_build}
|
||||||
@ ${cmd_cat} $^ | ${cmd_sass} --stdin > $@
|
@ ${cmd_cat} $^ | ${cmd_sass} --stdin > $@
|
||||||
|
|
||||||
${dir_erzeugnis}/vtm.dat.js: \
|
${dir_build}/vtm.dat.js: \
|
||||||
${dir_quelldatein}/daten/aufgaben.dat.js \
|
${dir_source}/data/strings/de.dat.js \
|
||||||
${dir_quelldatein}/daten/zeichenketten/de.dat.js \
|
${dir_source}/data/strings/en.dat.js \
|
||||||
${dir_quelldatein}/daten/zeichenketten/en.dat.js
|
${dir_source}/data/tasks.dat.js
|
||||||
@ ${cmd_echo} "-- Daten …"
|
@ ${cmd_echo} "-- data …"
|
||||||
@ ${cmd_md} ${dir_erzeugnis}
|
@ ${cmd_md} ${dir_build}
|
||||||
@ ${cmd_cat} $^ > $@
|
@ ${cmd_cat} $^ > $@
|
||||||
|
|
||||||
${dir_erzeugnis}/vtm.js: \
|
${dir_build}/vtm.js: \
|
||||||
${dir_quelldatein}/helfer/typen.ts \
|
${dir_source}/helpers/types.ts \
|
||||||
${dir_quelldatein}/helfer/aufruf.ts \
|
${dir_source}/helpers/call.ts \
|
||||||
${dir_quelldatein}/helfer/brauch.ts \
|
${dir_source}/helpers/trait.ts \
|
||||||
${dir_quelldatein}/helfer/fehlermonade.ts \
|
${dir_source}/helpers/errormonade.ts \
|
||||||
${dir_quelldatein}/helfer/xml.ts \
|
${dir_source}/helpers/string.ts \
|
||||||
${dir_quelldatein}/helfer/verschiedenes.ts \
|
${dir_source}/helpers/xml.ts \
|
||||||
${dir_quelldatein}/helfer/mathematik.ts \
|
${dir_source}/helpers/misc.ts \
|
||||||
${dir_quelldatein}/helfer/vektor.ts \
|
${dir_source}/helpers/math.ts \
|
||||||
${dir_quelldatein}/helfer/hashmap.ts \
|
${dir_source}/helpers/vector.ts \
|
||||||
${dir_quelldatein}/helfer/uebersetzung.ts \
|
${dir_source}/helpers/hashmap.ts \
|
||||||
${dir_quelldatein}/daten.ts \
|
${dir_source}/helpers/translate.ts \
|
||||||
${dir_quelldatein}/aufbau/richtung.ts \
|
${dir_source}/helpers/svg.ts \
|
||||||
${dir_quelldatein}/aufbau/symbol.ts \
|
${dir_source}/data/_data.ts \
|
||||||
${dir_quelldatein}/aufbau/stelle.ts \
|
${dir_source}/model/direction.ts \
|
||||||
${dir_quelldatein}/aufbau/zustand.ts \
|
${dir_source}/model/symbol.ts \
|
||||||
${dir_quelldatein}/aufbau/figur.ts \
|
${dir_source}/model/spot.ts \
|
||||||
${dir_quelldatein}/aufbau/aktoren/_aktor.ts \
|
${dir_source}/model/state.ts \
|
||||||
${dir_quelldatein}/aufbau/aktoren/verwerfer.ts \
|
${dir_source}/model/token.ts \
|
||||||
${dir_quelldatein}/aufbau/aktoren/annehmer.ts \
|
${dir_source}/model/actuators/_actuator.ts \
|
||||||
${dir_quelldatein}/aufbau/aktoren/erzeuger.ts \
|
${dir_source}/model/actuators/rejector.ts \
|
||||||
${dir_quelldatein}/aufbau/aktoren/befoerderer.ts \
|
${dir_source}/model/actuators/acceptor.ts \
|
||||||
${dir_quelldatein}/aufbau/aktoren/schreiber.ts \
|
${dir_source}/model/actuators/generator.ts \
|
||||||
${dir_quelldatein}/aufbau/aktoren/leser.ts \
|
${dir_source}/model/actuators/conveyer.ts \
|
||||||
${dir_quelldatein}/aufbau/welt.ts \
|
${dir_source}/model/actuators/writer.ts \
|
||||||
${dir_quelldatein}/aufbau/aufgaben/test.ts \
|
${dir_source}/model/actuators/reader.ts \
|
||||||
${dir_quelldatein}/aufbau/aufgaben/akzeptortest.ts \
|
${dir_source}/model/world.ts \
|
||||||
${dir_quelldatein}/aufbau/aufgaben/transduktortest.ts \
|
${dir_source}/model/tasks/acceptortest.ts \
|
||||||
${dir_quelldatein}/aufbau/aufgaben/akzeptoraufgabe.ts \
|
${dir_source}/model/tasks/transducertest.ts \
|
||||||
${dir_quelldatein}/aufbau/aufgaben/transduktoraufgabe.ts \
|
${dir_source}/model/tasks/test.ts \
|
||||||
${dir_quelldatein}/aufbau/aufgaben/aufgabe.ts \
|
${dir_source}/model/tasks/acceptortask.ts \
|
||||||
${dir_quelldatein}/aufbau/modus.ts \
|
${dir_source}/model/tasks/transducertask.ts \
|
||||||
${dir_quelldatein}/aufbau/partie.ts \
|
${dir_source}/model/tasks/task.ts \
|
||||||
${dir_quelldatein}/manifestation/manifestation.ts \
|
${dir_source}/model/mode.ts \
|
||||||
${dir_quelldatein}/manifestation/position.ts \
|
${dir_source}/model/game.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/_svg.ts \
|
${dir_source}/manifestation/manifestation.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/figur.ts \
|
${dir_source}/manifestation/position.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/aktor/_aktor.ts \
|
${dir_source}/manifestation/svg/token.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/aktor/verwerfer.ts \
|
${dir_source}/manifestation/svg/actuators/_actuator.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/aktor/annehmer.ts \
|
${dir_source}/manifestation/svg/actuators/rejector.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/aktor/erzeuger.ts \
|
${dir_source}/manifestation/svg/actuators/acceptor.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/aktor/befoerderer.ts \
|
${dir_source}/manifestation/svg/actuators/generator.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/aktor/schreiber.ts \
|
${dir_source}/manifestation/svg/actuators/conveyer.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/aktor/leser.ts \
|
${dir_source}/manifestation/svg/actuators/writer.ts \
|
||||||
${dir_quelldatein}/manifestation/svg/partie.ts \
|
${dir_source}/manifestation/svg/actuators/reader.ts \
|
||||||
${dir_quelldatein}/manifestation/web/partie.ts \
|
${dir_source}/manifestation/svg/game.ts \
|
||||||
${dir_quelldatein}/manifestation/speicher/partie.ts \
|
${dir_source}/manifestation/web/game.ts \
|
||||||
${dir_quelldatein}/haupt.ts
|
${dir_source}/manifestation/store/game.ts \
|
||||||
@ ${cmd_echo} "-- Logik …"
|
${dir_source}/main.ts
|
||||||
@ ${cmd_md} ${dir_erzeugnis}
|
@ ${cmd_echo} "-- logic …"
|
||||||
|
@ ${cmd_md} ${dir_build}
|
||||||
@ ${cmd_tsc} $^ --outFile $@
|
@ ${cmd_tsc} $^ --outFile $@
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
jsonp_handle(
|
|
||||||
{
|
|
||||||
"key": "strings-de",
|
|
||||||
"value": {
|
|
||||||
"common.title": "Verrückte Turing-Maschinen",
|
|
||||||
"common.help": "Hilfe",
|
|
||||||
"common.game": "Spiel",
|
|
||||||
"model.token.terms.singular": "Figur",
|
|
||||||
"model.token.terms.plural": "Figuren",
|
|
||||||
"model.modes.initial": "Maschine bearbeiten",
|
|
||||||
"model.modes.uncertain": "wird geprüft …",
|
|
||||||
"model.modes.wrong": "fehlerhaft :/",
|
|
||||||
"model.modes.correct": "anscheinend korrekt :)",
|
|
||||||
"model.actuators.terms.singular": "Aktor",
|
|
||||||
"model.actuators.terms.plural": "Aktoren",
|
|
||||||
"model.actuators.kinds.erzeuger.name": "Eingang",
|
|
||||||
"model.actuators.kinds.annehmer.name": "Ausgang",
|
|
||||||
"model.actuators.kinds.verwerfer.name": "Abweiser",
|
|
||||||
"model.actuators.kinds.befoerderer.name": "Schieber",
|
|
||||||
"model.actuators.kinds.schreiber.name": "Schreiber",
|
|
||||||
"model.actuators.kinds.leser.name": "Weiche",
|
|
||||||
"model.tasks.terms.singular": "Aufgabe",
|
|
||||||
"model.tasks.terms.plural": "tasks",
|
|
||||||
"model.tasks.kinds.acceptor.name": "Akzeptor",
|
|
||||||
"model.tasks.kinds.acceptor.shortcut": "AKZ",
|
|
||||||
"model.tasks.kinds.transductor.name": "Transduktor",
|
|
||||||
"model.tasks.kinds.transductor.shortcut": "TRA",
|
|
||||||
"controls.choose": "Aufgabe auswählen",
|
|
||||||
"controls.step": "Nächster Schritt",
|
|
||||||
"controls.run": "Ablaufen",
|
|
||||||
"controls.stop": "Anhalten",
|
|
||||||
"controls.edit": "Bearbeiten",
|
|
||||||
"controls.clear": "Leeren",
|
|
||||||
"help.introduction": "Dieses Spiel ist inspiriert von !var:manufacturia, !var:crazy_machines, !var:world_of_goo … und auch von unvergessenen Stunden Hardware-Praktikum im Informatik-Studium :P",
|
|
||||||
"help.controls.title": "Steuerung",
|
|
||||||
"help.controls.eintrag1": "Links-Klick/Rechts-Klick: Feldtyp wechseln",
|
|
||||||
"help.controls.eintrag2": "Mausrad-Drehen: Feld drehen",
|
|
||||||
"help.token.satz1": "Die Figur kann durch Aktoren auf dem Spielplan umher bewegt werden und wird als schwarzer Kreis dargestellt.",
|
|
||||||
"help.token.satz2": "Zudem verfügt die Figur über ein Liste von gesetzen Symbolen (Band), dargestellt durch farbige Punkte neben der Figur. Gelesen wird das Band immer an der vordersten Stelle und geschrieben wird an die hinterste Stelle (FIFO-Prinzip).",
|
|
||||||
"help.actuators.introduction": "Jedes Feld des Spielplans kann mit einem Aktor bestückt werden, der je nach Typ unterschiedliche Einflüsse auf die Figur ausübt. Folgende Typen stehen zur Verfügung:",
|
|
||||||
"help.actuators.erzeuger": "Der Eingang ist fest platziert auf dem ganz linken Feld des Spielplans und wird durch ein weißes Dreieck dargestellt. An ihm wird die Spieltoken auf den Plan gesetzt und bewegt sich anschließend in die angezeigte Richtung.",
|
|
||||||
"help.actuators.annehmer": "Auf dem ganz rechten Feld des Spielplans fest platziert befindet sich der Ausgang, der durch einen weißen Kreis dargestellt wird. Steuert man die Figur zu diesem Feld, so wird der aktuelle Band-Inhalt ausgelesen und akzeptiert.",
|
|
||||||
"help.actuators.verwerfer": "Jedes leere Feld beendet den Lauf der Figur mit einer Abweisung des aktuellen Band-Inhalts.",
|
|
||||||
"help.actuators.befoerderer": "Dieser Aktor dient dazu die Figur von einem Feld zu einem benachbkinds zu befördern ohne dabei den Band-Inhalt zu ändern.",
|
|
||||||
"help.actuators.schreiber": "Um ein Symbol auf das Band zu schreiben, wird dieser Aktor benötigt. Die jeweilige Farbe gibt an, welches Symbol geschrieben wird und die Richtung zeigt, wohin die Figur anschließend befördert wird.",
|
|
||||||
"help.actuators.leser": "An einer Weiche wird das erste Symbol auf dem Band der Figur gelesen und die übereinstimmende Richtung gewählt, zu welcher die Figur im Anschluss bewegt wird. Gibt es einen passenden Ausgang, so wird das gelesene Symbol vom Band entfernt. Falls kein Ausgang gefunden wird oder das Band leer ist, wird der Ersatz-Ausgang (grau) gewählt.",
|
|
||||||
"help.tasks.introduction": "Ziel ist das Lösen von bestimmten Aufgaben. Dabei wird zwischen zwei Arten von tasks unterschieden:",
|
|
||||||
"help.tasks.acceptor.description": "Hierbei geht es darum den Band-Inhalt der Figur zu untersuchen und zu entscheiden, ob er eine bestimmte Bedingung erfüllt oder nicht. Fall ja, so steuert man die Figur in den Ausgang; andernfalls auf ein beliebiges leeres Feld.",
|
|
||||||
"help.tasks.acceptor.example": "Beispiel: Genau dann akzeptieren, wenn das Band mindestens zwei mal rot enthält.",
|
|
||||||
"help.tasks.transductor.description": "Bei einer Transduktor-Aufgabe soll eine Ausgabe erzeugt werden, die in einer bestimmten Beziehung zur vorgefundenen Eingabe steht, also sozusagen eine Funktion angewendet werden.",
|
|
||||||
"help.tasks.transductor.example": "Beispiel: Die Eingabe zwei mal wiederholt."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
jsonp_handle(
|
|
||||||
{
|
|
||||||
"key": "strings-en",
|
|
||||||
"value": {
|
|
||||||
"common.title": "Crazy Turing Machines",
|
|
||||||
"common.help": "Help",
|
|
||||||
"common.game": "Game",
|
|
||||||
"model.token.terms.singular": "token",
|
|
||||||
"model.token.terms.plural": "tokens",
|
|
||||||
"model.modes.initial": "edit machine",
|
|
||||||
"model.modes.uncertain": "testing …",
|
|
||||||
"model.modes.wrong": "flawed :/",
|
|
||||||
"model.modes.correct": "seemingly correct :)",
|
|
||||||
"model.actuators.terms.singular": "actor",
|
|
||||||
"model.actuators.terms.plural": "actors",
|
|
||||||
"model.actuators.kinds.erzeuger.name": "entrance",
|
|
||||||
"model.actuators.kinds.annehmer.name": "exit",
|
|
||||||
"model.actuators.kinds.verwerfer.name": "dropper",
|
|
||||||
"model.actuators.kinds.befoerderer.name": "conveyer",
|
|
||||||
"model.actuators.kinds.schreiber.name": "writer",
|
|
||||||
"model.actuators.kinds.leser.name": "switch",
|
|
||||||
"model.tasks.terms.singular": "task",
|
|
||||||
"model.tasks.terms.plural": "tasks",
|
|
||||||
"model.tasks.kinds.acceptor.name": "acceptor",
|
|
||||||
"model.tasks.kinds.acceptor.shortcut": "ACC",
|
|
||||||
"model.tasks.kinds.transductor.name": "transductor",
|
|
||||||
"model.tasks.kinds.transductor.shortcut": "TRA",
|
|
||||||
"controls.choose": "choose task",
|
|
||||||
"controls.step": "next step",
|
|
||||||
"controls.run": "run",
|
|
||||||
"controls.stop": "stop",
|
|
||||||
"controls.edit": "edit",
|
|
||||||
"controls.clear": "clear",
|
|
||||||
"help.introduction": "This game is inspired by !var:manufacturia, !var:crazy_machines, !var:world_of_goo … and also by memorable hours of the practical hardware course during computer science study :P",
|
|
||||||
"help.controls.title": "controls",
|
|
||||||
"help.controls.eintrag1": "left click/right click: change tile type",
|
|
||||||
"help.controls.eintrag2": "rotate mousewheel: rotate tile",
|
|
||||||
"help.token.satz1": "The token can be moved around the board by actors and it is displayed as a black circle.",
|
|
||||||
"help.token.satz2": "Additionally the token has a list of set symbols (its tape), which is shown as coloured points next to the token. The tape is always read at the front and written at its back (FIFO principle).",
|
|
||||||
"help.actuators.introduction": "Every tile on the board can be equipped with an actor, which will cause a certain effect on the token depending on the type. The following types are available:",
|
|
||||||
"help.actuators.erzeuger": "The entrance is statically placed on the most left tile of the board and is displayed as a white triangle. It is the spot at which the token is inserted into the board and moved to the indicated direction afterwards.",
|
|
||||||
"help.actuators.annehmer": "On the most right tile of the board the exit is statically placed; it is displayed as a white circle. If the token is moved to this tile, its tape content will be read and accepted.",
|
|
||||||
"help.actuators.verwerfer": "Every empty tile will cancel the tokens run with a rejection of the current tape content.",
|
|
||||||
"help.actuators.befoerderer": "This actor is used for moving the token to neighbour tile without changing the tape content.",
|
|
||||||
"help.actuators.schreiber": "In order to write a symbol to the tape, this actor is utilized. The colour indicates which symbol will be written and the direction shows to which tile the token will be moved afterwards.",
|
|
||||||
"help.actuators.leser": "At a switch the first symbol of the tape will be read and the the token will be moved the the corresponding direction. If a matching way out exists, the symbol will be removed from the tape. If no way out matches or if the tape is empty the fallback exit (grey) will be chosen.",
|
|
||||||
"help.tasks.introduction": "The goal is to solve certain tasks. Two kind of tasks are distinguished:",
|
|
||||||
"help.tasks.acceptor.description": "Here the goal is to investigate the content of the tokens tape and to decide whether it fulfils a certain condition or not. IF so, the token shall be moved to the exit; otherwise to an arbitrary empty tile.",
|
|
||||||
"help.tasks.acceptor.example": "Example: Accept then and only then, if the tape contains at least two red symbols.",
|
|
||||||
"help.tasks.transductor.description": "In a transductor task an output shall be generated, which has a certain relationship to to the input; in other words: to apply a function.",
|
|
||||||
"help.tasks.transductor.example": "Example: The input repeated two times."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
@ -1,163 +0,0 @@
|
||||||
/*
|
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
module mod_vtm
|
|
||||||
{
|
|
||||||
|
|
||||||
export module mod_manifestation
|
|
||||||
{
|
|
||||||
|
|
||||||
export module mod_svg
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
export const float_precision : int = 4;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
export const shape_arrow : string = "M +4 0 L 0 +1 L 0 -1 Z";
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
export function rotation
|
|
||||||
(
|
|
||||||
staerke : float
|
|
||||||
)
|
|
||||||
: string
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
"rotate"
|
|
||||||
+ "("
|
|
||||||
+ (staerke * 360).toFixed(float_precision)
|
|
||||||
+ ")"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
export function translation
|
|
||||||
(
|
|
||||||
x : float,
|
|
||||||
y : float
|
|
||||||
)
|
|
||||||
: string
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
"translate"
|
|
||||||
+ "("
|
|
||||||
+ x.toFixed(float_precision)
|
|
||||||
+ ", "
|
|
||||||
+ y.toFixed(float_precision)
|
|
||||||
+ ")"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
export function skalierung
|
|
||||||
(
|
|
||||||
staerke : float
|
|
||||||
)
|
|
||||||
: string
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
"scale"
|
|
||||||
+ "("
|
|
||||||
+ staerke.toFixed(float_precision)
|
|
||||||
+ ")"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
export function path
|
|
||||||
(
|
|
||||||
vertices : Array<lib_vector.type_vector>,
|
|
||||||
close : boolean = true,
|
|
||||||
attributes : {[schlussel : string] : string} = {},
|
|
||||||
)
|
|
||||||
: lib_xml.type_node
|
|
||||||
{
|
|
||||||
let d : string = "";
|
|
||||||
vertices.forEach
|
|
||||||
(
|
|
||||||
(vertex, index) =>
|
|
||||||
{
|
|
||||||
let c : string = ((index <= 0) ? "M" : "L");
|
|
||||||
let x : string = vertex.x.toFixed(float_precision);
|
|
||||||
let y : string = vertex.y.toFixed(float_precision);
|
|
||||||
d += [c, x, y].join(" ");
|
|
||||||
}
|
|
||||||
)
|
|
||||||
;
|
|
||||||
if (close)
|
|
||||||
d += "Z";
|
|
||||||
attributes["d"] = d;
|
|
||||||
return (lib_xml.create_normal("path", attributes));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
export function root
|
|
||||||
(
|
|
||||||
von_x : float,
|
|
||||||
von_y : float,
|
|
||||||
bis_x : float,
|
|
||||||
bis_y : float,
|
|
||||||
hoehe : int = 500,
|
|
||||||
breite : int = 500,
|
|
||||||
children : Array<lib_xml.type_node> = []
|
|
||||||
)
|
|
||||||
: lib_xml.type_node
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
lib_xml.create_normal
|
|
||||||
(
|
|
||||||
"svg",
|
|
||||||
{
|
|
||||||
"xmlns": "http://www.w3.org/2000/svg",
|
|
||||||
"xmlns:xlink": "http://www.w3.org/1999/xlink",
|
|
||||||
"width": breite.toFixed(0),
|
|
||||||
"height": hoehe.toFixed(0),
|
|
||||||
"viewBox": [von_x.toFixed(4), von_y.toFixed(4), (bis_x-von_x).toFixed(4), (bis_y-von_y).toFixed(4)].join(" "),
|
|
||||||
},
|
|
||||||
children,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
13
readme.md
13
readme.md
|
|
@ -1,10 +1,19 @@
|
||||||
# Verrückte Turing-Maschinen
|
# Verrückte Turing-Maschinen
|
||||||
|
|
||||||
|
Dieses Spiel ist inspiriert von [http://www.kongregate.com/games/PleasingFungus/manufactoria"](Manufacturia), [http://www.crazy-machines.com/](Crazy Machines), [http://worldofgoo.com/](World of Goo) … und auch von unvergessenen Stunden Hardware-Praktikum im Informatik-Studium :P
|
||||||
|
|
||||||
|
|
||||||
## Bauen
|
## Bauen
|
||||||
|
|
||||||
Zum Bauen wird ein Typscript-Compiler benötigt, den man beispielweise über **npm** beziehen kann: `npm install typescript`. Dadurch sollte das Kommando `tsc` verfügbar sein. Hat man das, kann man anschließend `make` ausführen, wodurch der Ordner `erzeugnis` erstellt wird.
|
Zum Bauen wird ein Typscript- und ein SASS-Compiler benötigt, die man beispielweise über **npm** beziehen kann: `npm install typescript && npm install sass`. Dadurch sollten die Kommandos `tsc` und `sass` verfügbar sein. Hat man das, kann man anschließend `make` ausführen, wodurch der Ordner `build` erstellt wird.
|
||||||
|
|
||||||
|
|
||||||
## Starten
|
## Starten
|
||||||
|
|
||||||
Zum Starten/Testen einfach einen Webserver im Verzeichnis `erzeugnis` starten (zum Beispiel per `cd erzeugnis && python3 -m http.server 8888 ; cd -`) und im Browser aufrufen.
|
Zum Starten/Testen einfach einen Webserver im Verzeichnis `build` starten (zum Beispiel per `cd build && python3 -m http.server 8888 ; cd -`) und im Browser `http://localhost:8888/vtm.html` aufrufen.
|
||||||
|
|
||||||
|
|
||||||
|
## Anmerkungen
|
||||||
|
|
||||||
|
Das Programm folgt konsequent den Paradigmen der prozeduralen und funktionalen Programmierung und ist nach der Grundidee des Architektur-Musters [https://de.wikipedia.org/wiki/Model_View_Controller](MVC) aufgebaut.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
78
source/data/strings/de.dat.js
Normal file
78
source/data/strings/de.dat.js
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
jsonp_handle(
|
||||||
|
{
|
||||||
|
"key": "strings-de",
|
||||||
|
"value": {
|
||||||
|
"common.title": "Verrückte Turing-Maschinen",
|
||||||
|
"common.help": "Hilfe",
|
||||||
|
"common.game": "Spiel",
|
||||||
|
"model.token.terms.singular": "Figur",
|
||||||
|
"model.token.terms.plural": "Figuren",
|
||||||
|
"model.modes.initial": "Maschine bearbeiten",
|
||||||
|
"model.modes.uncertain": "wird geprüft …",
|
||||||
|
"model.modes.wrong": "fehlerhaft :/",
|
||||||
|
"model.modes.correct": "anscheinend korrekt :)",
|
||||||
|
"model.actuators.terms.singular": "Aktor",
|
||||||
|
"model.actuators.terms.plural": "Aktoren",
|
||||||
|
"model.actuators.kinds.generator.name": "Eingang",
|
||||||
|
"model.actuators.kinds.acceptor.name": "Ausgang",
|
||||||
|
"model.actuators.kinds.rejector.name": "Abweiser",
|
||||||
|
"model.actuators.kinds.conveyer.name": "Schieber",
|
||||||
|
"model.actuators.kinds.writer.name": "Schreiber",
|
||||||
|
"model.actuators.kinds.reader.name": "Weiche",
|
||||||
|
"model.tasks.terms.singular": "Aufgabe",
|
||||||
|
"model.tasks.terms.plural": "Aufgaben",
|
||||||
|
"model.tasks.kinds.acceptor.name": "Akzeptor",
|
||||||
|
"model.tasks.kinds.acceptor.shortcut": "AKZ",
|
||||||
|
"model.tasks.kinds.transducer.name": "Transduktor",
|
||||||
|
"model.tasks.kinds.transducer.shortcut": "TRA",
|
||||||
|
"controls.choose": "Aufgabe auswählen",
|
||||||
|
"controls.step": "Nächster Schritt",
|
||||||
|
"controls.run": "Ablaufen",
|
||||||
|
"controls.stop": "Anhalten",
|
||||||
|
"controls.edit": "Bearbeiten",
|
||||||
|
"controls.clear": "Leeren",
|
||||||
|
"help.introduction": "Dieses Spiel ist inspiriert von !var:manufacturia, !var:crazy_machines, !var:world_of_goo … und auch von unvergessenen Stunden Hardware-Praktikum im Informatik-Studium :P",
|
||||||
|
"help.controls.title": "Steuerung",
|
||||||
|
"help.controls.eintrag1": "Links-Klick/Rechts-Klick: Feldtyp wechseln",
|
||||||
|
"help.controls.eintrag2": "Mausrad-Drehen: Feld drehen",
|
||||||
|
"help.token.satz1": "Die Figur kann durch Aktoren auf dem Spielplan umher bewegt werden und wird als schwarzer Kreis dargestellt.",
|
||||||
|
"help.token.satz2": "Zudem verfügt die Figur über ein Liste von gesetzen Symbolen (Band), dargestellt durch farbige Punkte neben der Figur. Gelesen wird das Band immer an der vordersten Stelle und geschrieben wird an die hinterste Stelle (FIFO-Prinzip).",
|
||||||
|
"help.actuators.introduction": "Jedes Feld des Spielplans kann mit einem Aktor bestückt werden, der je nach Typ unterschiedliche Einflüsse auf die Figur ausübt. Folgende Typen stehen zur Verfügung:",
|
||||||
|
"help.actuators.generator": "Der Eingang ist fest platziert auf dem ganz linken Feld des Spielplans und wird durch ein weißes Dreieck dargestellt. An ihm wird die Spieltoken auf den Plan gesetzt und bewegt sich anschließend in die angezeigte Richtung.",
|
||||||
|
"help.actuators.acceptor": "Auf dem ganz rechten Feld des Spielplans fest platziert befindet sich der Ausgang, der durch einen weißen Kreis dargestellt wird. Steuert man die Figur zu diesem Feld, so wird der aktuelle Band-Inhalt ausgelesen und akzeptiert.",
|
||||||
|
"help.actuators.rejector": "Jedes leere Feld beendet den Lauf der Figur mit einer Abweisung des aktuellen Band-Inhalts.",
|
||||||
|
"help.actuators.conveyer": "Dieser Aktor dient dazu die Figur von einem Feld zu einem benachbkinds zu befördern ohne dabei den Band-Inhalt zu ändern.",
|
||||||
|
"help.actuators.writer": "Um ein Symbol auf das Band zu schreiben, wird dieser Aktor benötigt. Die jeweilige Farbe gibt an, welches Symbol geschrieben wird und die Richtung zeigt, wohin die Figur anschließend befördert wird.",
|
||||||
|
"help.actuators.reader": "An einer Weiche wird das erste Symbol auf dem Band der Figur gelesen und die übereinstimmende Richtung gewählt, zu welcher die Figur im Anschluss bewegt wird. Gibt es einen passenden Ausgang, so wird das gelesene Symbol vom Band entfernt. Falls kein Ausgang gefunden wird oder das Band leer ist, wird der Ersatz-Ausgang (grau) gewählt.",
|
||||||
|
"help.tasks.introduction": "Ziel ist das Lösen von bestimmten Aufgaben. Dabei wird zwischen zwei Arten von Aufgaben unterschieden:",
|
||||||
|
"help.tasks.acceptor.description": "Hierbei geht es darum den Band-Inhalt der Figur zu untersuchen und zu entscheiden, ob er eine bestimmte Bedingung erfüllt oder nicht. Fall ja, so steuert man die Figur in den Ausgang; andernfalls auf ein beliebiges leeres Feld.",
|
||||||
|
"help.tasks.acceptor.example": "Beispiel: Genau dann akzeptieren, wenn das Band mindestens zwei mal rot enthält.",
|
||||||
|
"help.tasks.transducer.description": "Bei einer Transduktor-Aufgabe soll eine Ausgabe erzeugt werden, die in einer bestimmten Beziehung zur vorgefundenen Eingabe steht, also sozusagen eine Funktion angewendet werden.",
|
||||||
|
"help.tasks.transducer.example": "Beispiel: Die Eingabe zwei mal wiederholt.",
|
||||||
|
"tasks.einfuehrung.title": "Einf\u00fchrung",
|
||||||
|
"tasks.einfuehrung.text": "Bewege die Figur vom Eingang (links) zum Ausgang (rechts)!",
|
||||||
|
"tasks.start_symbol.title": "Start-Symbol",
|
||||||
|
"tasks.start_symbol.text": "Annehmen, wenn die Eingabe mit ${s1} beginnt; andernfalls ablehnen",
|
||||||
|
"tasks.dreifaltigkeit.title": "Dreifaltigkeit",
|
||||||
|
"tasks.dreifaltigkeit.text": "Annehmen genau dann, wenn die Eingabe mindestens drei ${s1} enth\u00e4lt",
|
||||||
|
"tasks.abwechslung_erfreuet.title": "Abwechslung erfreuet",
|
||||||
|
"tasks.abwechslung_erfreuet.text": "annehmen genau dann wenn: Die Farben der Eingabe (${s0} / ${s1}) sich immer abwechseln",
|
||||||
|
"tasks.ans_ende.title": "Ans Ende",
|
||||||
|
"tasks.ans_ende.text": "die Eingabe (${s0} / ${s1}), aber mit dem ersten Symbol am Ende",
|
||||||
|
"tasks.tauschen.title": "Tauschen",
|
||||||
|
"tasks.tauschen.text": "aus der Eingabe (${s0} / ${s1}) alle ${s0} durch ${s2} ersetzen und alle ${s1} durch ${s3}",
|
||||||
|
"tasks.waehlerisch.title": "W\u00e4hlerisch",
|
||||||
|
"tasks.waehlerisch.text": "aus der Eingabe alle ${s0} entfernen und alle ${s1} beibehalten",
|
||||||
|
"tasks.dekorator.title": "Dekorator",
|
||||||
|
"tasks.dekorator.text": "Alles wird h\u00fcbscher mit Schn\u00f6rkeln, Schleifchen und Kinkerlitzchen aller Art! Zumindest glauben das die Leute \u2026 Shopping-Sender im Fernsehen sind der Beweis! Ob das auch f\u00fcr das Band der Figur gilt, wenn es nur ${s0} und ${s1} enth\u00e4lt? Finden wir's raus: Setz ein ${s2} an den Anfang und ein ${s3} an das Ende!",
|
||||||
|
"tasks.alpha_und_omega.title": "Alpha und Omega",
|
||||||
|
"tasks.alpha_und_omega.text": "Eingaben (${s0} / ${s1}), die mit den gleichen Symbolen anfangen und enden",
|
||||||
|
"tasks.an_den_anfang.title": "An den Anfang",
|
||||||
|
"tasks.an_den_anfang.text": "die Eingabe (${s0} / ${s1}), aber mit dem letzten Symbol am Anfang",
|
||||||
|
"tasks.a_n_b_n.title": "a^n b^n",
|
||||||
|
"tasks.a_n_b_n.text": "Jaja, die ber\u00fchmt ber\u00fcchtige Sprache, die sich mit einem endlichen Automaten nicht erkennen l\u00e4sst \u2026 Das ist deine Chance zu zeigen, dass dieses Ding hier mehr ist als so ein k\u00fcmmerlicher DEA \u2026 und das ganz ohne Kellerspeicher! Also: Eine beliebige Anzahl an ${s0}, dann die gleiche Anzahl an ${s1}!",
|
||||||
|
"tasks.a_n_b_n.hinweise.hinweis1": "Ein Wort ist genau dann Element der Sprache ${s0}^n ${s1}^n, wenn sie entweder 1) leer ist (also n = 0 gilt) oder 2) sie mit ${s0} beginnt, mit ${s1} endet und dazwischen ein Wort der Form ${s0}^(n-1) ${s1}^(n-1) steht \u2026 Stichwort: Rekursion"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
59
source/data/strings/en.dat.js
Normal file
59
source/data/strings/en.dat.js
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
jsonp_handle(
|
||||||
|
{
|
||||||
|
"key": "strings-en",
|
||||||
|
"value": {
|
||||||
|
"common.title": "Crazy Turing Machines",
|
||||||
|
"common.help": "Help",
|
||||||
|
"common.game": "Game",
|
||||||
|
"model.token.terms.singular": "token",
|
||||||
|
"model.token.terms.plural": "tokens",
|
||||||
|
"model.modes.initial": "edit machine",
|
||||||
|
"model.modes.uncertain": "testing …",
|
||||||
|
"model.modes.wrong": "flawed :/",
|
||||||
|
"model.modes.correct": "seemingly correct :)",
|
||||||
|
"model.actuators.terms.singular": "actor",
|
||||||
|
"model.actuators.terms.plural": "actors",
|
||||||
|
"model.actuators.kinds.generator.name": "entrance",
|
||||||
|
"model.actuators.kinds.acceptor.name": "exit",
|
||||||
|
"model.actuators.kinds.rejector.name": "dropper",
|
||||||
|
"model.actuators.kinds.conveyer.name": "conveyer",
|
||||||
|
"model.actuators.kinds.writer.name": "writer",
|
||||||
|
"model.actuators.kinds.reader.name": "switch",
|
||||||
|
"model.tasks.terms.singular": "task",
|
||||||
|
"model.tasks.terms.plural": "tasks",
|
||||||
|
"model.tasks.kinds.acceptor.name": "acceptor",
|
||||||
|
"model.tasks.kinds.acceptor.shortcut": "ACC",
|
||||||
|
"model.tasks.kinds.transducer.name": "transducer",
|
||||||
|
"model.tasks.kinds.transducer.shortcut": "TRA",
|
||||||
|
"controls.choose": "choose task",
|
||||||
|
"controls.step": "next step",
|
||||||
|
"controls.run": "run",
|
||||||
|
"controls.stop": "stop",
|
||||||
|
"controls.edit": "edit",
|
||||||
|
"controls.clear": "clear",
|
||||||
|
"help.introduction": "This game is inspired by !var:manufacturia, !var:crazy_machines, !var:world_of_goo … and also by memorable hours of the practical hardware course during computer science study :P",
|
||||||
|
"help.controls.title": "controls",
|
||||||
|
"help.controls.eintrag1": "left click/right click: change tile type",
|
||||||
|
"help.controls.eintrag2": "rotate mousewheel: rotate tile",
|
||||||
|
"help.token.satz1": "The token can be moved agame the board by actors and it is displayed as a black circle.",
|
||||||
|
"help.token.satz2": "Additionally the token has a list of set symbols (its tape), which is shown as coloured points next to the token. The tape is always read at the front and written at its back (FIFO principle).",
|
||||||
|
"help.actuators.introduction": "Every tile on the board can be equipped with an actor, which will cause a certain effect on the token depending on the type. The following types are available:",
|
||||||
|
"help.actuators.generator": "The entrance is statically placed on the most left tile of the board and is displayed as a white triangle. It is the spot at which the token is inserted into the board and moved to the indicated direction afterwards.",
|
||||||
|
"help.actuators.acceptor": "On the most right tile of the board the exit is statically placed; it is displayed as a white circle. If the token is moved to this tile, its tape content will be read and accepted.",
|
||||||
|
"help.actuators.rejector": "Every empty tile will cancel the tokens run with a rejection of the current tape content.",
|
||||||
|
"help.actuators.conveyer": "This actor is used for moving the token to neighbour tile without changing the tape content.",
|
||||||
|
"help.actuators.writer": "In order to write a symbol to the tape, this actor is utilized. The colour indicates which symbol will be written and the direction shows to which tile the token will be moved afterwards.",
|
||||||
|
"help.actuators.reader": "At a switch the first symbol of the tape will be read and the the token will be moved the the corresponding direction. If a matching way out exists, the symbol will be removed from the tape. If no way out matches or if the tape is empty the fallback exit (grey) will be chosen.",
|
||||||
|
"help.tasks.introduction": "The goal is to solve certain tasks. Two kind of tasks are distinguished:",
|
||||||
|
"help.tasks.acceptor.description": "Here the goal is to investigate the content of the tokens tape and to decide whether it fulfils a certain condition or not. IF so, the token shall be moved to the exit; otherwise to an arbitrary empty tile.",
|
||||||
|
"help.tasks.acceptor.example": "Example: Accept then and only then, if the tape contains at least two red symbols.",
|
||||||
|
"help.tasks.transducer.description": "In a transducer task an output shall be generated, which has a certain relationship to to the input; in other words: to apply a function.",
|
||||||
|
"help.tasks.transducer.example": "Example: The input repeated two times.",
|
||||||
|
"tasks.einfuehrung.title": "Introduction",
|
||||||
|
"tasks.einfuehrung.text": "Move the token from the entrance (left) to the exit (rights)!",
|
||||||
|
"tasks.a_n_b_n.title": "a^n b^n",
|
||||||
|
"tasks.a_n_b_n.text": "Yeah, yeah, yeah … The far famed language, which can't be recognized by a finite automaton … This is your chance to prove that this gizmo here is mightier than any wimpy DFA; even without any stack! So: An arbitrary number of ${s0}, then the same number of ${s1}!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
@ -6,8 +6,6 @@ jsonp_handle(
|
||||||
"id": "einfuehrung",
|
"id": "einfuehrung",
|
||||||
"kind": "acceptor",
|
"kind": "acceptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Einführung",
|
|
||||||
"text": "Bewege die Figur vom Eingang (links) zum Ausgang (rechts)!",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [],
|
"input": [],
|
||||||
|
|
@ -20,8 +18,6 @@ jsonp_handle(
|
||||||
"id": "start_symbol",
|
"id": "start_symbol",
|
||||||
"kind": "acceptor",
|
"kind": "acceptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Start-Symbol",
|
|
||||||
"text": "Annehmen, wenn die input mit ${s1} beginnt; andernfalls ablehnen",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [],
|
"input": [],
|
||||||
|
|
@ -50,8 +46,6 @@ jsonp_handle(
|
||||||
"id": "dreifaltigkeit",
|
"id": "dreifaltigkeit",
|
||||||
"kind": "acceptor",
|
"kind": "acceptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Dreifaltigkeit",
|
|
||||||
"text": "Annehmen genau dann, wenn die input mindestens drei ${s1} enthält",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [1],
|
"input": [1],
|
||||||
|
|
@ -72,8 +66,6 @@ jsonp_handle(
|
||||||
"id": "abwechslung_erfreuet",
|
"id": "abwechslung_erfreuet",
|
||||||
"kind": "acceptor",
|
"kind": "acceptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Abwechslung erfreuet",
|
|
||||||
"text": "annehmen genau dann wenn: Die Farben der input (${s0} / ${s1}) sich immer abwechseln",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [],
|
"input": [],
|
||||||
|
|
@ -100,10 +92,8 @@ jsonp_handle(
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ans_ende",
|
"id": "ans_ende",
|
||||||
"kind": "transductor",
|
"kind": "transducer",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Ans Ende",
|
|
||||||
"text": "die input (${s0} / ${s1}), aber mit dem ersten Symbol am Ende",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
"input": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
||||||
|
|
@ -114,10 +104,8 @@ jsonp_handle(
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "tauschen",
|
"id": "tauschen",
|
||||||
"kind": "transductor",
|
"kind": "transducer",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Tauschen",
|
|
||||||
"text": "aus der input (${s0} / ${s1}) alle ${s0} durch ${s2} ersetzen und alle ${s1} durch ${s3}",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [0,1,1,0],
|
"input": [0,1,1,0],
|
||||||
|
|
@ -132,10 +120,8 @@ jsonp_handle(
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "waehlerisch",
|
"id": "waehlerisch",
|
||||||
"kind": "transductor",
|
"kind": "transducer",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Wählerisch",
|
|
||||||
"text": "aus der input alle ${s0} entfernen und alle ${s1} beibehalten",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [0,0,0,1,0],
|
"input": [0,0,0,1,0],
|
||||||
|
|
@ -158,10 +144,8 @@ jsonp_handle(
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "dekorator",
|
"id": "dekorator",
|
||||||
"kind": "transductor",
|
"kind": "transducer",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Dekorator",
|
|
||||||
"text": "Alles wird hübscher mit Schnörkeln, Schleifchen und Kinkerlitzchen aller Art! Zumindest glauben das die Leute … Shopping-Sender im Fernsehen sind der Beweis! Ob das auch für das Band der Figur gilt, wenn es nur ${s0} und ${s1} enthält? Finden wir's raus: Setz ein ${s2} an den Anfang und ein ${s3} an das Ende!",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [1,1,0],
|
"input": [1,1,0],
|
||||||
|
|
@ -178,8 +162,6 @@ jsonp_handle(
|
||||||
"id": "alpha_und_omega",
|
"id": "alpha_und_omega",
|
||||||
"kind": "acceptor",
|
"kind": "acceptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Alpha und Omega",
|
|
||||||
"text": "inputn (${s0} / ${s1}), die mit den gleichen Symbolen anfangen und enden",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [],
|
"input": [],
|
||||||
|
|
@ -210,10 +192,8 @@ jsonp_handle(
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "an_den_anfang",
|
"id": "an_den_anfang",
|
||||||
"kind": "transductor",
|
"kind": "transducer",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "An den Anfang",
|
|
||||||
"text": "die input (${s0} / ${s1}), aber mit dem letzten Symbol am Anfang",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
"input": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
||||||
|
|
@ -226,8 +206,6 @@ jsonp_handle(
|
||||||
"id": "a_n_b_n",
|
"id": "a_n_b_n",
|
||||||
"kind": "acceptor",
|
"kind": "acceptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "a^n b^n",
|
|
||||||
"text": "Jaja, die berühmt berüchtige Sprache, die sich mit einem endlichen Automaten nicht erkennen lässt … Das ist deine Chance zu zeigen, dass dieses Ding hier mehr ist als so ein kümmerlicher DEA … und das ganz ohne Kellerspeicher! Also: Eine beliebige Anzahl an ${s0}, dann die gleiche Anzahl an ${s1}!",
|
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"input": [],
|
"input": [],
|
||||||
|
|
@ -249,9 +227,6 @@ jsonp_handle(
|
||||||
"input": [0,0,0,0,0,0,0,1,1,1,1,1,1,1],
|
"input": [0,0,0,0,0,0,0,1,1,1,1,1,1,1],
|
||||||
"accept": true
|
"accept": true
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"hinweise": [
|
|
||||||
"Ein Wort ist genau dann Element der Sprache ${s0}^n ${s1}^n, wenn sie entweder 1) leer ist (also n = 0 gilt) oder 2) sie mit ${s0} beginnt, mit ${s1} endet und dazwischen ein Wort der Form ${s0}^(n-1) ${s1}^(n-1) steht … Stichwort: Rekursion"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
54
source/helpers/string.ts
Normal file
54
source/helpers/string.ts
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module lib_string
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function indent
|
||||||
|
(
|
||||||
|
depth : int,
|
||||||
|
symbol : string = "\t"
|
||||||
|
)
|
||||||
|
: string
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
(depth === 0)
|
||||||
|
? ""
|
||||||
|
: (symbol + indent(depth-1))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function stance(str : string, vars : {[name : string] : string}) : string
|
||||||
|
{
|
||||||
|
for (let name in vars)
|
||||||
|
{
|
||||||
|
let regexp : RegExp = (new RegExp("\\$\{" + name + "\}", "g"));
|
||||||
|
str = str.replace(regexp, vars[name]);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
153
source/helpers/svg.ts
Normal file
153
source/helpers/svg.ts
Normal file
|
|
@ -0,0 +1,153 @@
|
||||||
|
/*
|
||||||
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module lib_svg
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export const float_precision : int = 4;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export const shape_arrow : string = "M +4 0 L 0 +1 L 0 -1 Z";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function rotation
|
||||||
|
(
|
||||||
|
staerke : float
|
||||||
|
)
|
||||||
|
: string
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
"rotate"
|
||||||
|
+ "("
|
||||||
|
+ (staerke * 360).toFixed(float_precision)
|
||||||
|
+ ")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function translation
|
||||||
|
(
|
||||||
|
x : float,
|
||||||
|
y : float
|
||||||
|
)
|
||||||
|
: string
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
"translate"
|
||||||
|
+ "("
|
||||||
|
+ x.toFixed(float_precision)
|
||||||
|
+ ", "
|
||||||
|
+ y.toFixed(float_precision)
|
||||||
|
+ ")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function skalierung
|
||||||
|
(
|
||||||
|
staerke : float
|
||||||
|
)
|
||||||
|
: string
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
"scale"
|
||||||
|
+ "("
|
||||||
|
+ staerke.toFixed(float_precision)
|
||||||
|
+ ")"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function path
|
||||||
|
(
|
||||||
|
vertices : Array<lib_vector.type_vector>,
|
||||||
|
close : boolean = true,
|
||||||
|
attributes : {[name : string] : string} = {},
|
||||||
|
)
|
||||||
|
: lib_xml.type_node
|
||||||
|
{
|
||||||
|
let d : string = "";
|
||||||
|
vertices.forEach
|
||||||
|
(
|
||||||
|
(vertex, index) =>
|
||||||
|
{
|
||||||
|
let c : string = ((index <= 0) ? "M" : "L");
|
||||||
|
let x : string = vertex.x.toFixed(float_precision);
|
||||||
|
let y : string = vertex.y.toFixed(float_precision);
|
||||||
|
d += [c, x, y].join(" ");
|
||||||
|
}
|
||||||
|
)
|
||||||
|
;
|
||||||
|
if (close)
|
||||||
|
d += "Z";
|
||||||
|
attributes["d"] = d;
|
||||||
|
return (lib_xml.create_normal("path", attributes));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function root
|
||||||
|
(
|
||||||
|
from_x : float,
|
||||||
|
from_y : float,
|
||||||
|
to_x : float,
|
||||||
|
to_y : float,
|
||||||
|
height : int = 500,
|
||||||
|
width : int = 500,
|
||||||
|
children : Array<lib_xml.type_node> = []
|
||||||
|
)
|
||||||
|
: lib_xml.type_node
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
lib_xml.create_normal
|
||||||
|
(
|
||||||
|
"svg",
|
||||||
|
{
|
||||||
|
"xmlns": "http://www.w3.org/2000/svg",
|
||||||
|
"xmlns:xlink": "http://www.w3.org/1999/xlink",
|
||||||
|
"width": width.toFixed(0),
|
||||||
|
"height": height.toFixed(0),
|
||||||
|
"viewBox": [from_x.toFixed(4), from_y.toFixed(4), (to_x-from_x).toFixed(4), (to_y-from_y).toFixed(4)].join(" "),
|
||||||
|
},
|
||||||
|
children,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -19,24 +19,6 @@
|
||||||
module lib_xml
|
module lib_xml
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
function indent
|
|
||||||
(
|
|
||||||
depth : int,
|
|
||||||
zeichen : string = "\t"
|
|
||||||
)
|
|
||||||
: string
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
(depth === 0)
|
|
||||||
? ""
|
|
||||||
: (zeichen + indent(depth-1))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
|
|
@ -130,7 +112,7 @@ module lib_xml
|
||||||
;
|
;
|
||||||
str_begin += str_attributes;
|
str_begin += str_attributes;
|
||||||
}
|
}
|
||||||
str_begin = (indent(depth) + "<" + str_begin + ">" + "\n");
|
str_begin = (lib_string.indent(depth) + "<" + str_begin + ">" + "\n");
|
||||||
str += str_begin;
|
str += str_begin;
|
||||||
}
|
}
|
||||||
// children
|
// children
|
||||||
|
|
@ -141,7 +123,7 @@ module lib_xml
|
||||||
{
|
{
|
||||||
let str_end : string = "";
|
let str_end : string = "";
|
||||||
str_end += name;
|
str_end += name;
|
||||||
str_end = (indent(depth) + "<" + "/" + str_end + ">" + "\n");
|
str_end = (lib_string.indent(depth) + "<" + "/" + str_end + ">" + "\n");
|
||||||
str += str_end;
|
str += str_end;
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
|
|
@ -52,35 +52,35 @@
|
||||||
<header id="help_actuators_title">!translate:model.actuators.terms.plural</header>
|
<header id="help_actuators_title">!translate:model.actuators.terms.plural</header>
|
||||||
<p id="help_actuators_introduction">!translate:help.actuators.introduction</p>
|
<p id="help_actuators_introduction">!translate:help.actuators.introduction</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li class="help_actuators_actuator" id="help_actuators_actuator_erzeuger">
|
<li class="help_actuators_actuator" id="help_actuators_actuator_generator">
|
||||||
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.erzeuger.name</header>
|
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.generator.name</header>
|
||||||
<div class="help_actuators_actuator_image"></div>
|
<div class="help_actuators_actuator_image"></div>
|
||||||
<div class="help_actuators_actuator_text">!translate:help.actuators.erzeuger</div>
|
<div class="help_actuators_actuator_text">!translate:help.actuators.generator</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="help_actuators_actuator" id="help_actuators_actuator_annehmer">
|
<li class="help_actuators_actuator" id="help_actuators_actuator_acceptor">
|
||||||
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.annehmer.name</header>
|
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.acceptor.name</header>
|
||||||
<div class="help_actuators_actuator_image"></div>
|
<div class="help_actuators_actuator_image"></div>
|
||||||
<div class="help_actuators_actuator_text">!translate:help.actuators.annehmer</div>
|
<div class="help_actuators_actuator_text">!translate:help.actuators.acceptor</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="help_actuators_actuator" id="help_actuators_actuator_verwerfer">
|
<li class="help_actuators_actuator" id="help_actuators_actuator_rejector">
|
||||||
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.verwerfer.name</header>
|
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.rejector.name</header>
|
||||||
<div class="help_actuators_actuator_image"></div>
|
<div class="help_actuators_actuator_image"></div>
|
||||||
<div class="help_actuators_actuator_text">!translate:help.actuators.verwerfer</div>
|
<div class="help_actuators_actuator_text">!translate:help.actuators.rejector</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="help_actuators_actuator" id="help_actuators_actuator_befoerderer">
|
<li class="help_actuators_actuator" id="help_actuators_actuator_conveyer">
|
||||||
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.befoerderer.name</header>
|
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.conveyer.name</header>
|
||||||
<div class="help_actuators_actuator_image"></div>
|
<div class="help_actuators_actuator_image"></div>
|
||||||
<div class="help_actuators_actuator_text">!translate:help.actuators.befoerderer</div>
|
<div class="help_actuators_actuator_text">!translate:help.actuators.conveyer</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="help_actuators_actuator" id="help_actuators_actuator_schreiber">
|
<li class="help_actuators_actuator" id="help_actuators_actuator_writer">
|
||||||
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.schreiber.name</header>
|
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.writer.name</header>
|
||||||
<div class="help_actuators_actuator_image"></div>
|
<div class="help_actuators_actuator_image"></div>
|
||||||
<div class="help_actuators_actuator_text">!translate:help.actuators.schreiber</div>
|
<div class="help_actuators_actuator_text">!translate:help.actuators.writer</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="help_actuators_actuator" id="help_actuators_actuator_leser">
|
<li class="help_actuators_actuator" id="help_actuators_actuator_reader">
|
||||||
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.leser.name</header>
|
<header class="help_actuators_actuator_name">!translate:model.actuators.kinds.reader.name</header>
|
||||||
<div class="help_actuators_actuator_image"></div>
|
<div class="help_actuators_actuator_image"></div>
|
||||||
<div class="help_actuators_actuator_text">!translate:help.actuators.leser</div>
|
<div class="help_actuators_actuator_text">!translate:help.actuators.reader</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -93,10 +93,10 @@
|
||||||
<p id="help_tasks_acceptor_description">!translate:help.tasks.acceptor.description</p>
|
<p id="help_tasks_acceptor_description">!translate:help.tasks.acceptor.description</p>
|
||||||
<p id="help_tasks_acceptor_example">!translate:help.tasks.acceptor.example</p>
|
<p id="help_tasks_acceptor_example">!translate:help.tasks.acceptor.example</p>
|
||||||
</li>
|
</li>
|
||||||
<li id="help_tasks_transductor">
|
<li id="help_tasks_transducer">
|
||||||
<header id="help_tasks_acceptor_name">!translate:model.tasks.kinds.transductor.name</header>
|
<header id="help_tasks_acceptor_name">!translate:model.tasks.kinds.transducer.name</header>
|
||||||
<p id="help_tasks_transductor_description">!translate:help.tasks.transductor.description</p>
|
<p id="help_tasks_transducer_description">!translate:help.tasks.transducer.description</p>
|
||||||
<p id="help_tasks_transductor_example">!translate:help.tasks.transductor.example</p>
|
<p id="help_tasks_transducer_example">!translate:help.tasks.transducer.example</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -42,21 +42,54 @@ body
|
||||||
|
|
||||||
a
|
a
|
||||||
{
|
{
|
||||||
color: hsl(120, 50%, 50%);
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:not(:hover)
|
||||||
|
{
|
||||||
|
color: hsl(120, 50%, 50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover
|
&:hover
|
||||||
{
|
{
|
||||||
color: hsl(120, 50%, 75%);
|
color: hsl(120, 50%, 75%);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
li
|
li
|
||||||
{
|
{
|
||||||
list-style-type: "» ";
|
list-style-type: "» ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input,select,textarea,button
|
||||||
|
{
|
||||||
|
margin: 4px;
|
||||||
|
border: none;
|
||||||
|
padding: 8px;
|
||||||
|
|
||||||
|
// border-radius: 2px;
|
||||||
|
// box-shadow: 1px 1px 1px black;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
font-family: monospace;
|
||||||
|
// font-weight: bold;
|
||||||
|
|
||||||
|
&:not(:hover)
|
||||||
|
{
|
||||||
|
background-color: hsl(120, 0%, 25%);
|
||||||
|
color: hsl(120, 0%, 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
{
|
||||||
|
background-color: hsl(120, 50%, 25%);
|
||||||
|
color: hsl(120, 0%, 100%);
|
||||||
|
|
||||||
|
transition: 0.25s ease;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
body > header
|
body > header
|
||||||
{
|
{
|
||||||
font-size: 200%;
|
font-size: 200%;
|
||||||
|
|
@ -72,12 +105,12 @@ body > header
|
||||||
#radio_help:checked
|
#radio_help:checked
|
||||||
{
|
{
|
||||||
& ~ #help {}
|
& ~ #help {}
|
||||||
& ~ #game {display: none;}
|
& ~ #game {display: none !important;}
|
||||||
}
|
}
|
||||||
|
|
||||||
#radio_game:checked
|
#radio_game:checked
|
||||||
{
|
{
|
||||||
& ~ #help {display: none;}
|
& ~ #help {display: none !important;}
|
||||||
& ~ #game {}
|
& ~ #game {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -131,43 +164,45 @@ body > header
|
||||||
{
|
{
|
||||||
& > *
|
& > *
|
||||||
{
|
{
|
||||||
margin: 2px;
|
margin: 4px;
|
||||||
|
display: block;
|
||||||
|
text-transform: capitalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.initial
|
&.initial
|
||||||
{
|
{
|
||||||
& > #button_step {}
|
& > #button_step {}
|
||||||
& > #button_run {}
|
& > #button_run {}
|
||||||
& > #button_stop {display: none;}
|
& > #button_stop {display: none !important;}
|
||||||
& > #button_edit {display: none;}
|
& > #button_edit {display: none !important;}
|
||||||
& > #button_clear {}
|
& > #button_clear {}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.uncertain_running
|
&.uncertain_running
|
||||||
{
|
{
|
||||||
& > #button_step {display: none;}
|
& > #button_step {display: none !important;}
|
||||||
& > #button_run {display: none;}
|
& > #button_run {display: none !important;}
|
||||||
& > #button_stop {}
|
& > #button_stop {}
|
||||||
& > #button_edit {display: none;}
|
& > #button_edit {display: none !important;}
|
||||||
& > #button_clear {display: none;}
|
& > #button_clear {display: none !important;}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.uncertain_standing
|
&.uncertain_standing
|
||||||
{
|
{
|
||||||
& > #button_step {}
|
& > #button_step {}
|
||||||
& > #button_run {}
|
& > #button_run {}
|
||||||
& > #button_stop {display: none;}
|
& > #button_stop {display: none !important;}
|
||||||
& > #button_edit {}
|
& > #button_edit {}
|
||||||
& > #button_clear {display: none;}
|
& > #button_clear {display: none !important;}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.done
|
&.done
|
||||||
{
|
{
|
||||||
& > #button_step {display: none;}
|
& > #button_step {display: none !important;}
|
||||||
& > #button_run {display: none;}
|
& > #button_run {display: none !important;}
|
||||||
& > #button_stop {display: none;}
|
& > #button_stop {display: none !important;}
|
||||||
& > #button_edit {}
|
& > #button_edit {}
|
||||||
& > #button_clear {display: none;}
|
& > #button_clear {display: none !important;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -22,7 +22,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function tasks_insert(behandler : (task : mod_model.mod_task.type_task)=>void) : void
|
function tasks_insert(handler : (task : mod_model.mod_task.type_task)=>void) : void
|
||||||
{
|
{
|
||||||
let tasks_raw_ : lib_errormonade.type_errormonade<Array<any>> = mod_vtm.mod_data.read("tasks");
|
let tasks_raw_ : lib_errormonade.type_errormonade<Array<any>> = mod_vtm.mod_data.read("tasks");
|
||||||
if (lib_errormonade.filled(tasks_raw_))
|
if (lib_errormonade.filled(tasks_raw_))
|
||||||
|
|
@ -33,24 +33,24 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
(task_raw, index) =>
|
(task_raw, index) =>
|
||||||
{
|
{
|
||||||
|
let task : mod_model.mod_task.type_task = mod_model.mod_task.import_(task_raw);
|
||||||
// Aufgabe registrieren
|
// Aufgabe registrieren
|
||||||
{
|
{
|
||||||
let task : mod_model.mod_task.type_task = mod_model.mod_task.import_(task_raw);
|
|
||||||
mod_model.mod_task.registrieren(task);
|
mod_model.mod_task.registrieren(task);
|
||||||
}
|
}
|
||||||
// Option insert
|
// Option eintragen
|
||||||
{
|
{
|
||||||
let praefix : string = (
|
let prefix : string = (
|
||||||
{
|
{
|
||||||
"acceptor": lib_translate.get("model.tasks.kinds.acceptor.shortcut"),
|
"acceptor": lib_translate.get("model.tasks.kinds.acceptor.shortcut"),
|
||||||
"transductor": lib_translate.get("model.tasks.kinds.transductor.shortcut"),
|
"transducer": lib_translate.get("model.tasks.kinds.transducer.shortcut"),
|
||||||
}[task_raw["kind"]]
|
}[task_raw["kind"]]
|
||||||
);
|
);
|
||||||
let titel : string = ("[" + praefix + "]" + " " + task_raw["parameter"]["titel"]);
|
let title : string = ("[" + prefix + "]" + " " + mod_model.mod_task.title(task));
|
||||||
let value : string = index.toFixed(0);
|
let value : string = index.toFixed(0);
|
||||||
let dom_option : Element = document.createElement("option");
|
let dom_option : Element = document.createElement("option");
|
||||||
dom_option.setAttribute("value", value);
|
dom_option.setAttribute("value", value);
|
||||||
dom_option.textContent = titel;
|
dom_option.textContent = title;
|
||||||
dom_selection.appendChild(dom_option);
|
dom_selection.appendChild(dom_option);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -64,7 +64,7 @@ module mod_vtm
|
||||||
let value : string = dom_selection["value"];
|
let value : string = dom_selection["value"];
|
||||||
let index : int = parseInt(value);
|
let index : int = parseInt(value);
|
||||||
let task : mod_model.mod_task.type_task = mod_model.mod_task.get(index);
|
let task : mod_model.mod_task.type_task = mod_model.mod_task.get(index);
|
||||||
behandler(task);
|
handler(task);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -110,59 +110,59 @@ module mod_vtm
|
||||||
{
|
{
|
||||||
// Arten
|
// Arten
|
||||||
{
|
{
|
||||||
let von_x : float = -0.5;
|
let from_x : float = -0.5;
|
||||||
let von_y : float = -0.5;
|
let from_y : float = -0.5;
|
||||||
let bis_x : float = +0.5;
|
let to_x : float = +0.5;
|
||||||
let bis_y : float = +0.5;
|
let to_y : float = +0.5;
|
||||||
let breite : float = 80;
|
let width : float = 80;
|
||||||
let hoehe : float = 80;
|
let height : float = 80;
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"model": mod_model.mod_actuator.example("erzeuger"),
|
"model": mod_model.mod_actuator.example("generator"),
|
||||||
"bereich": document.querySelector("#help_actuators_actuator_erzeuger"),
|
"area": document.querySelector("#help_actuators_actuator_generator"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": mod_model.mod_actuator.example("annehmer"),
|
"model": mod_model.mod_actuator.example("acceptor"),
|
||||||
"bereich": document.querySelector("#help_actuators_actuator_annehmer"),
|
"area": document.querySelector("#help_actuators_actuator_acceptor"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": mod_model.mod_actuator.example("verwerfer"),
|
"model": mod_model.mod_actuator.example("rejector"),
|
||||||
"bereich": document.querySelector("#help_actuators_actuator_verwerfer"),
|
"area": document.querySelector("#help_actuators_actuator_rejector"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": mod_model.mod_actuator.example("befoerderer"),
|
"model": mod_model.mod_actuator.example("conveyer"),
|
||||||
"bereich": document.querySelector("#help_actuators_actuator_befoerderer"),
|
"area": document.querySelector("#help_actuators_actuator_conveyer"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": mod_model.mod_actuator.example("schreiber"),
|
"model": mod_model.mod_actuator.example("writer"),
|
||||||
"bereich": document.querySelector("#help_actuators_actuator_schreiber"),
|
"area": document.querySelector("#help_actuators_actuator_writer"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"model": mod_model.mod_actuator.example("leser"),
|
"model": mod_model.mod_actuator.example("reader"),
|
||||||
"bereich": document.querySelector("#help_actuators_actuator_leser"),
|
"area": document.querySelector("#help_actuators_actuator_reader"),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
.forEach
|
.forEach
|
||||||
(
|
(
|
||||||
eintrag =>
|
entry =>
|
||||||
{
|
{
|
||||||
let manifestation = (
|
let manifestation = (
|
||||||
mod_manifestation.mod_svg.mod_actuator.create_manifestation
|
mod_manifestation.mod_svg.mod_actuator.create_extended
|
||||||
(
|
(
|
||||||
eintrag.model,
|
entry.model,
|
||||||
mod_model.mod_spot.null_()
|
mod_model.mod_spot.null_()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
let xmlnode : lib_xml.type_node = (
|
let xmlnode : lib_xml.type_node = (
|
||||||
mod_manifestation.mod_svg.root
|
lib_svg.root
|
||||||
(
|
(
|
||||||
von_x, von_y,
|
from_x, from_y,
|
||||||
bis_x, bis_y,
|
to_x, to_y,
|
||||||
breite, hoehe,
|
width, height,
|
||||||
[mod_manifestation.view(manifestation)]
|
[mod_manifestation.view(manifestation)]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
eintrag.bereich.querySelector(".help_actuators_actuator_image").innerHTML = lib_xml.view(xmlnode);
|
entry.area.querySelector(".help_actuators_actuator_image").innerHTML = lib_xml.view(xmlnode);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -171,31 +171,31 @@ module mod_vtm
|
||||||
}
|
}
|
||||||
// Spiel
|
// Spiel
|
||||||
{
|
{
|
||||||
let round : mod_model.mod_round.type_round;
|
let game : mod_model.mod_game.type_game;
|
||||||
// Aufgaben
|
// Aufgaben
|
||||||
{
|
{
|
||||||
tasks_insert
|
tasks_insert
|
||||||
(
|
(
|
||||||
function (task : mod_model.mod_task.type_task) : void {mod_model.mod_round.task_set(round, task);}
|
function (task : mod_model.mod_task.type_task) : void {mod_model.mod_game.task_set(game, task);}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
// Aufbau
|
// Aufbau
|
||||||
{
|
{
|
||||||
round = mod_model.mod_round.create(mod_model.mod_task.get(0));
|
game = mod_model.mod_game.create(mod_model.mod_task.get(0));
|
||||||
}
|
}
|
||||||
// Manifestationen
|
// Manifestationen
|
||||||
{
|
{
|
||||||
[
|
[
|
||||||
mod_manifestation.mod_web.mod_round.create_erweitert
|
mod_manifestation.mod_web.mod_game.create_extended
|
||||||
(
|
(
|
||||||
round,
|
game,
|
||||||
document.querySelector("#section_mid")
|
document.querySelector("#section_mid")
|
||||||
)
|
)
|
||||||
,
|
,
|
||||||
mod_manifestation.mod_store.mod_round.create_erweitert
|
mod_manifestation.mod_store.mod_game.create_extended
|
||||||
(
|
(
|
||||||
round
|
game
|
||||||
)
|
)
|
||||||
,
|
,
|
||||||
]
|
]
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -41,7 +41,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function von_spot(spot : mod_vtm.mod_model.mod_spot.type_spot) : type_position
|
export function from_spot(spot : mod_vtm.mod_model.mod_spot.type_spot) : type_position
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
lib_vector.add
|
lib_vector.add
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,15 +25,15 @@ module mod_vtm
|
||||||
export module mod_store
|
export module mod_store
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_round
|
export module mod_game
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_round =
|
export type type_game =
|
||||||
{
|
{
|
||||||
model : mod_vtm.mod_model.mod_round.type_round;
|
model : mod_vtm.mod_model.mod_game.type_game;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -43,9 +43,9 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function create
|
export function create
|
||||||
(
|
(
|
||||||
model : mod_vtm.mod_model.mod_round.type_round
|
model : mod_vtm.mod_model.mod_game.type_game
|
||||||
)
|
)
|
||||||
: type_round
|
: type_game
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"model": model
|
"model": model
|
||||||
|
|
@ -56,14 +56,14 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_erweitert
|
export function create_extended
|
||||||
(
|
(
|
||||||
model : mod_vtm.mod_model.mod_round.type_round
|
model : mod_vtm.mod_model.mod_game.type_game
|
||||||
)
|
)
|
||||||
: type_manifestation<mod_vtm.mod_model.mod_round.type_round>
|
: type_manifestation<mod_vtm.mod_model.mod_game.type_game>
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"kind": "store_round",
|
"kind": "store_game",
|
||||||
"data": create(model)
|
"data": create(model)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -72,7 +72,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function view(round : type_round) : void
|
function view(game : type_game) : void
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,16 +80,16 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function bind(round : type_round) : void
|
function bind(game : type_game) : void
|
||||||
{
|
{
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_task",
|
"change_task",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
// console.info("aendrung_task", data);
|
// console.info("change_task", data);
|
||||||
let task : mod_vtm.mod_model.mod_task.type_task = mod_vtm.mod_model.mod_round.task_read(round.model);
|
let task : mod_vtm.mod_model.mod_task.type_task = mod_vtm.mod_model.mod_game.task_read(game.model);
|
||||||
let id : string = mod_vtm.mod_model.mod_task.id(task);
|
let id : string = mod_vtm.mod_model.mod_task.id(task);
|
||||||
let key : string = ("vtm_" + id);
|
let key : string = ("vtm_" + id);
|
||||||
//
|
//
|
||||||
|
|
@ -98,50 +98,50 @@ module mod_vtm
|
||||||
let item : string = localStorage.getItem(key);
|
let item : string = localStorage.getItem(key);
|
||||||
let world_ : any = JSON.parse(item);
|
let world_ : any = JSON.parse(item);
|
||||||
let world : mod_vtm.mod_model.mod_world.type_world = mod_vtm.mod_model.mod_world.import_(world_);
|
let world : mod_vtm.mod_model.mod_world.type_world = mod_vtm.mod_model.mod_world.import_(world_);
|
||||||
mod_vtm.mod_model.mod_round.world_set(round.model, world, false);
|
mod_vtm.mod_model.mod_game.world_set(game.model, world, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mod_vtm.mod_model.mod_round.world_clear(round.model);
|
mod_vtm.mod_model.mod_game.world_clear(game.model);
|
||||||
// nothing tun
|
// nothing tun
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_world",
|
"change_world",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
let task : mod_vtm.mod_model.mod_task.type_task = mod_vtm.mod_model.mod_round.task_read(round.model);
|
let task : mod_vtm.mod_model.mod_task.type_task = mod_vtm.mod_model.mod_game.task_read(game.model);
|
||||||
let id : string = mod_vtm.mod_model.mod_task.id(task);
|
let id : string = mod_vtm.mod_model.mod_task.id(task);
|
||||||
let key : string = ("vtm_" + id);
|
let key : string = ("vtm_" + id);
|
||||||
//
|
//
|
||||||
let world : mod_vtm.mod_model.mod_world.type_world = mod_vtm.mod_model.mod_round.world_read(round.model);
|
let world : mod_vtm.mod_model.mod_world.type_world = mod_vtm.mod_model.mod_game.world_read(game.model);
|
||||||
let world_ : any = mod_vtm.mod_model.mod_world.export_(world);
|
let world_ : any = mod_vtm.mod_model.mod_world.export_(world);
|
||||||
let item : string = JSON.stringify(world_);
|
let item : string = JSON.stringify(world_);
|
||||||
localStorage.setItem(key, item);
|
localStorage.setItem(key, item);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_token",
|
"change_token",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
// console.info("aendrung_token", data);
|
// console.info("change_token", data);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_mode",
|
"change_mode",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
// console.info("aendrung_mode", data);
|
// console.info("change_mode", data);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -151,10 +151,10 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
lib_trait.attend<signature_manifestation<mod_vtm.mod_model.mod_round.type_round, void>>
|
lib_trait.attend<signature_manifestation<mod_vtm.mod_model.mod_game.type_game, void>>
|
||||||
(
|
(
|
||||||
trait_manifestation,
|
trait_manifestation,
|
||||||
"store_round",
|
"store_game",
|
||||||
{
|
{
|
||||||
"view": (manifestation) => view(manifestation.data),
|
"view": (manifestation) => view(manifestation.data),
|
||||||
"bind": (manifestation) => bind(manifestation.data),
|
"bind": (manifestation) => bind(manifestation.data),
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -75,7 +75,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_manifestation
|
export function create_extended
|
||||||
(
|
(
|
||||||
model : mod_vtm.mod_model.mod_actuator.type_actuator,
|
model : mod_vtm.mod_model.mod_actuator.type_actuator,
|
||||||
spot : mod_vtm.mod_model.mod_spot.type_spot
|
spot : mod_vtm.mod_model.mod_spot.type_spot
|
||||||
|
|
@ -98,7 +98,7 @@ module mod_vtm
|
||||||
let node_rahmen = function () : lib_xml.type_node
|
let node_rahmen = function () : lib_xml.type_node
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
path
|
lib_svg.path
|
||||||
(
|
(
|
||||||
mod_vtm.mod_helfer.sequence(6).map(i => lib_vector.polar(((i+0.5)/6) * (2*Math.PI), 0.5)),
|
mod_vtm.mod_helfer.sequence(6).map(i => lib_vector.polar(((i+0.5)/6) * (2*Math.PI), 0.5)),
|
||||||
true,
|
true,
|
||||||
|
|
@ -109,7 +109,7 @@ module mod_vtm
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
let position : mod_position.type_position = mod_position.von_spot(actuator_.spot);
|
let position : mod_position.type_position = mod_position.from_spot(actuator_.spot);
|
||||||
let node_tile : lib_xml.type_node = (
|
let node_tile : lib_xml.type_node = (
|
||||||
lib_xml.create_normal
|
lib_xml.create_normal
|
||||||
(
|
(
|
||||||
|
|
@ -117,7 +117,7 @@ module mod_vtm
|
||||||
{
|
{
|
||||||
"class": "tile",
|
"class": "tile",
|
||||||
"rel": mod_vtm.mod_model.mod_spot.hash(actuator_.spot),
|
"rel": mod_vtm.mod_model.mod_spot.hash(actuator_.spot),
|
||||||
"transform": translation(position.x, position.y),
|
"transform": lib_svg.translation(position.x, position.y),
|
||||||
},
|
},
|
||||||
(
|
(
|
||||||
[node_rahmen()]
|
[node_rahmen()]
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -34,7 +34,7 @@ module mod_vtm
|
||||||
lib_trait.attend
|
lib_trait.attend
|
||||||
(
|
(
|
||||||
trait_actuator,
|
trait_actuator,
|
||||||
"annehmer",
|
"acceptor",
|
||||||
{
|
{
|
||||||
"view": (actuator) =>
|
"view": (actuator) =>
|
||||||
{
|
{
|
||||||
|
|
@ -44,9 +44,9 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"circle",
|
"circle",
|
||||||
{
|
{
|
||||||
"cx": (0.0).toFixed(float_precision),
|
"cx": (0.0).toFixed(lib_svg.float_precision),
|
||||||
"cy": (0.0).toFixed(float_precision),
|
"cy": (0.0).toFixed(lib_svg.float_precision),
|
||||||
"r": (0.25).toFixed(float_precision),
|
"r": (0.25).toFixed(lib_svg.float_precision),
|
||||||
"class": (
|
"class": (
|
||||||
[
|
[
|
||||||
"kreis",
|
"kreis",
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -34,7 +34,7 @@ module mod_vtm
|
||||||
lib_trait.attend
|
lib_trait.attend
|
||||||
(
|
(
|
||||||
trait_actuator,
|
trait_actuator,
|
||||||
"befoerderer",
|
"conveyer",
|
||||||
{
|
{
|
||||||
"view": ({"data": {"direction": direction}}) =>
|
"view": ({"data": {"direction": direction}}) =>
|
||||||
{
|
{
|
||||||
|
|
@ -44,7 +44,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"path",
|
"path",
|
||||||
{
|
{
|
||||||
"d": shape_arrow,
|
"d": lib_svg.shape_arrow,
|
||||||
"class": (
|
"class": (
|
||||||
[
|
[
|
||||||
"pfeil",
|
"pfeil",
|
||||||
|
|
@ -53,9 +53,9 @@ module mod_vtm
|
||||||
),
|
),
|
||||||
"transform": (
|
"transform": (
|
||||||
[
|
[
|
||||||
rotation(direction/6),
|
lib_svg.rotation(direction/6),
|
||||||
translation(-0.2, 0),
|
lib_svg.translation(-0.2, 0),
|
||||||
skalierung(0.12),
|
lib_svg.skalierung(0.12),
|
||||||
].join(" ")
|
].join(" ")
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -34,7 +34,7 @@ module mod_vtm
|
||||||
lib_trait.attend
|
lib_trait.attend
|
||||||
(
|
(
|
||||||
trait_actuator,
|
trait_actuator,
|
||||||
"erzeuger",
|
"generator",
|
||||||
{
|
{
|
||||||
"view": ({"data": {"direction": direction}}) =>
|
"view": ({"data": {"direction": direction}}) =>
|
||||||
{
|
{
|
||||||
|
|
@ -44,18 +44,18 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"path",
|
"path",
|
||||||
{
|
{
|
||||||
"d": shape_arrow,
|
"d": lib_svg.shape_arrow,
|
||||||
"class": (
|
"class": (
|
||||||
[
|
[
|
||||||
"pfeil",
|
"pfeil",
|
||||||
"erzeuger",
|
"generator",
|
||||||
].join(" ")
|
].join(" ")
|
||||||
),
|
),
|
||||||
"transform": (
|
"transform": (
|
||||||
[
|
[
|
||||||
rotation(direction/6),
|
lib_svg.rotation(direction/6),
|
||||||
translation(-0.2, 0),
|
lib_svg.translation(-0.2, 0),
|
||||||
skalierung(0.12),
|
lib_svg.skalierung(0.12),
|
||||||
].join(" ")
|
].join(" ")
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -34,7 +34,7 @@ module mod_vtm
|
||||||
lib_trait.attend
|
lib_trait.attend
|
||||||
(
|
(
|
||||||
trait_actuator,
|
trait_actuator,
|
||||||
"leser",
|
"reader",
|
||||||
{
|
{
|
||||||
"view": ({"data": {"direction": direction, "symbol_links": symbol_links, "symbol_rechts": symbol_rechts}}) =>
|
"view": ({"data": {"direction": direction, "symbol_links": symbol_links, "symbol_rechts": symbol_rechts}}) =>
|
||||||
{
|
{
|
||||||
|
|
@ -71,7 +71,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"path",
|
"path",
|
||||||
{
|
{
|
||||||
"d": shape_arrow,
|
"d": lib_svg.shape_arrow,
|
||||||
"class": (
|
"class": (
|
||||||
[
|
[
|
||||||
"pfeil",
|
"pfeil",
|
||||||
|
|
@ -84,9 +84,9 @@ module mod_vtm
|
||||||
),
|
),
|
||||||
"transform": (
|
"transform": (
|
||||||
[
|
[
|
||||||
rotation(anglestaerke),
|
lib_svg.rotation(anglestaerke),
|
||||||
translation(+0.1, 0),
|
lib_svg.translation(+0.1, 0),
|
||||||
skalierung(0.075),
|
lib_svg.skalierung(0.075),
|
||||||
].join(" ")
|
].join(" ")
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -34,7 +34,7 @@ module mod_vtm
|
||||||
lib_trait.attend
|
lib_trait.attend
|
||||||
(
|
(
|
||||||
trait_actuator,
|
trait_actuator,
|
||||||
"verwerfer",
|
"rejector",
|
||||||
{
|
{
|
||||||
"view": (actuator) =>
|
"view": (actuator) =>
|
||||||
{
|
{
|
||||||
|
|
@ -44,9 +44,9 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"circle",
|
"circle",
|
||||||
{
|
{
|
||||||
"cx": (0.0).toFixed(float_precision),
|
"cx": (0.0).toFixed(lib_svg.float_precision),
|
||||||
"cy": (0.0).toFixed(float_precision),
|
"cy": (0.0).toFixed(lib_svg.float_precision),
|
||||||
"r": (0.25).toFixed(float_precision),
|
"r": (0.25).toFixed(lib_svg.float_precision),
|
||||||
"class": (
|
"class": (
|
||||||
[
|
[
|
||||||
"kreis",
|
"kreis",
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -34,7 +34,7 @@ module mod_vtm
|
||||||
lib_trait.attend
|
lib_trait.attend
|
||||||
(
|
(
|
||||||
trait_actuator,
|
trait_actuator,
|
||||||
"schreiber",
|
"writer",
|
||||||
{
|
{
|
||||||
"view": ({"data": {"direction": direction, "symbol": symbol}}) =>
|
"view": ({"data": {"direction": direction, "symbol": symbol}}) =>
|
||||||
{
|
{
|
||||||
|
|
@ -44,7 +44,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"path",
|
"path",
|
||||||
{
|
{
|
||||||
"d": shape_arrow,
|
"d": lib_svg.shape_arrow,
|
||||||
"class": (
|
"class": (
|
||||||
[
|
[
|
||||||
"pfeil",
|
"pfeil",
|
||||||
|
|
@ -53,9 +53,9 @@ module mod_vtm
|
||||||
),
|
),
|
||||||
"transform": (
|
"transform": (
|
||||||
[
|
[
|
||||||
rotation(direction/6),
|
lib_svg.rotation(direction/6),
|
||||||
translation(-0.2, 0),
|
lib_svg.translation(-0.2, 0),
|
||||||
skalierung(0.12),
|
lib_svg.skalierung(0.12),
|
||||||
].join(" ")
|
].join(" ")
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,15 +25,15 @@ module mod_vtm
|
||||||
export module mod_svg
|
export module mod_svg
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_round
|
export module mod_game
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_round =
|
export type type_game =
|
||||||
{
|
{
|
||||||
model : mod_vtm.mod_model.mod_round.type_round;
|
model : mod_vtm.mod_model.mod_game.type_game;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -41,7 +41,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function create(model : mod_vtm.mod_model.mod_round.type_round) : type_round
|
function create(model : mod_vtm.mod_model.mod_game.type_game) : type_game
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"model": model
|
"model": model
|
||||||
|
|
@ -52,10 +52,10 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_manifestation(model : mod_vtm.mod_model.mod_round.type_round) : type_manifestation<mod_vtm.mod_model.mod_round.type_round>
|
export function create_extended(model : mod_vtm.mod_model.mod_game.type_game) : type_manifestation<mod_vtm.mod_model.mod_game.type_game>
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"kind": "svg_round",
|
"kind": "svg_game",
|
||||||
"data": create(model)
|
"data": create(model)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -64,20 +64,20 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function view(round : type_round) : lib_xml.type_node
|
function view(game : type_game) : lib_xml.type_node
|
||||||
{
|
{
|
||||||
let children_round : Array<lib_xml.type_node> = [];
|
let children_game : Array<lib_xml.type_node> = [];
|
||||||
// Welt
|
// Welt
|
||||||
{
|
{
|
||||||
let children_world : Array<lib_xml.type_node> = [];
|
let children_world : Array<lib_xml.type_node> = [];
|
||||||
// Felder
|
// Felder
|
||||||
{
|
{
|
||||||
let children_tiles : Array<lib_xml.type_node> = [];
|
let children_tiles : Array<lib_xml.type_node> = [];
|
||||||
mod_vtm.mod_model.mod_world.tiles_read(mod_vtm.mod_model.mod_round.world_read(round.model)).forEach
|
mod_vtm.mod_model.mod_world.tiles_read(mod_vtm.mod_model.mod_game.world_read(game.model)).forEach
|
||||||
(
|
(
|
||||||
({"spot": spot, "actuator": actuator}) =>
|
({"spot": spot, "actuator": actuator}) =>
|
||||||
{
|
{
|
||||||
let manifestation_tile : type_manifestation<mod_vtm.mod_model.mod_actuator.type_actuator> = mod_actuator.create_manifestation(actuator, spot);
|
let manifestation_tile : type_manifestation<mod_vtm.mod_model.mod_actuator.type_actuator> = mod_actuator.create_extended(actuator, spot);
|
||||||
let node_tile : lib_xml.type_node = mod_manifestation.view(manifestation_tile);
|
let node_tile : lib_xml.type_node = mod_manifestation.view(manifestation_tile);
|
||||||
children_tiles.push(node_tile);
|
children_tiles.push(node_tile);
|
||||||
}
|
}
|
||||||
|
|
@ -106,41 +106,41 @@ module mod_vtm
|
||||||
children_world
|
children_world
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
children_round.push(node_world);
|
children_game.push(node_world);
|
||||||
}
|
}
|
||||||
// Figur
|
// Figur
|
||||||
{
|
{
|
||||||
let token_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_token.type_token> = mod_vtm.mod_model.mod_round.token_read(round.model);
|
let token_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_token.type_token> = mod_vtm.mod_model.mod_game.token_read(game.model);
|
||||||
if (lib_errormonade.filled(token_))
|
if (lib_errormonade.filled(token_))
|
||||||
{
|
{
|
||||||
let token : mod_vtm.mod_model.mod_token.type_token = lib_errormonade.read(token_);
|
let token : mod_vtm.mod_model.mod_token.type_token = lib_errormonade.read(token_);
|
||||||
let manifestation_token : type_manifestation<mod_vtm.mod_model.mod_token.type_token> = mod_token.create_manifestation(token);
|
let manifestation_token : type_manifestation<mod_vtm.mod_model.mod_token.type_token> = mod_token.create_extended(token);
|
||||||
let node_token : lib_xml.type_node = mod_manifestation.view(manifestation_token);
|
let node_token : lib_xml.type_node = mod_manifestation.view(manifestation_token);
|
||||||
children_round.push(node_token);
|
children_game.push(node_token);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// nothing tun
|
// nothing tun
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let node_round : lib_xml.type_node = (
|
let node_game : lib_xml.type_node = (
|
||||||
lib_xml.create_normal
|
lib_xml.create_normal
|
||||||
(
|
(
|
||||||
"g",
|
"g",
|
||||||
{
|
{
|
||||||
"class": "round",
|
"class": "game",
|
||||||
},
|
},
|
||||||
children_round
|
children_game
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
return node_round;
|
return node_game;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function bind(round : type_round) : void
|
function bind(game : type_game) : void
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -148,10 +148,10 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
lib_trait.attend<signature_manifestation<mod_vtm.mod_model.mod_round.type_round, lib_xml.type_node>>
|
lib_trait.attend<signature_manifestation<mod_vtm.mod_model.mod_game.type_game, lib_xml.type_node>>
|
||||||
(
|
(
|
||||||
trait_manifestation,
|
trait_manifestation,
|
||||||
"svg_round",
|
"svg_game",
|
||||||
{
|
{
|
||||||
"view": (manifestation) => view(manifestation.data),
|
"view": (manifestation) => view(manifestation.data),
|
||||||
"bind": (manifestation) => bind(manifestation.data),
|
"bind": (manifestation) => bind(manifestation.data),
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -56,7 +56,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_manifestation
|
export function create_extended
|
||||||
(
|
(
|
||||||
model : mod_vtm.mod_model.mod_token.type_token
|
model : mod_vtm.mod_model.mod_token.type_token
|
||||||
)
|
)
|
||||||
|
|
@ -87,9 +87,9 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"circle",
|
"circle",
|
||||||
{
|
{
|
||||||
"cx": (0.0).toFixed(float_precision),
|
"cx": (0.0).toFixed(lib_svg.float_precision),
|
||||||
"cy": (0.0).toFixed(float_precision),
|
"cy": (0.0).toFixed(lib_svg.float_precision),
|
||||||
"r": (0.125).toFixed(float_precision),
|
"r": (0.125).toFixed(lib_svg.float_precision),
|
||||||
"class": "stein",
|
"class": "stein",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
@ -112,14 +112,14 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
"circle",
|
"circle",
|
||||||
{
|
{
|
||||||
"cx": x.toFixed(float_precision),
|
"cx": x.toFixed(lib_svg.float_precision),
|
||||||
"cy": y.toFixed(float_precision),
|
"cy": y.toFixed(lib_svg.float_precision),
|
||||||
"r": r.toFixed(float_precision),
|
"r": r.toFixed(lib_svg.float_precision),
|
||||||
/*
|
/*
|
||||||
"x": (x-r).toFixed(float_precision),
|
"x": (x-r).toFixed(lib_svg.float_precision),
|
||||||
"y": (y-r).toFixed(float_precision),
|
"y": (y-r).toFixed(lib_svg.float_precision),
|
||||||
"width": (2*r).toFixed(float_precision),
|
"width": (2*r).toFixed(lib_svg.float_precision),
|
||||||
"height": (2*r).toFixed(float_precision),
|
"height": (2*r).toFixed(lib_svg.float_precision),
|
||||||
*/
|
*/
|
||||||
"class": (
|
"class": (
|
||||||
[
|
[
|
||||||
|
|
@ -146,14 +146,14 @@ module mod_vtm
|
||||||
);
|
);
|
||||||
children_token.push(node_tape);
|
children_token.push(node_tape);
|
||||||
}
|
}
|
||||||
let position : mod_position.type_position = mod_position.von_spot(mod_vtm.mod_model.mod_token.spot_read(token));
|
let position : mod_position.type_position = mod_position.from_spot(mod_vtm.mod_model.mod_token.spot_read(token));
|
||||||
let node_token = (
|
let node_token = (
|
||||||
lib_xml.create_normal
|
lib_xml.create_normal
|
||||||
(
|
(
|
||||||
"g",
|
"g",
|
||||||
{
|
{
|
||||||
"class": "token",
|
"class": "token",
|
||||||
"transform": translation(position.x, position.y),
|
"transform": lib_svg.translation(position.x, position.y),
|
||||||
},
|
},
|
||||||
children_token
|
children_token
|
||||||
)
|
)
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -59,7 +59,7 @@ $helligkeit_symbol: 50%;
|
||||||
stroke: none;
|
stroke: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.erzeuger
|
.generator
|
||||||
{
|
{
|
||||||
fill: hsl( 0, 0%, 100%);
|
fill: hsl( 0, 0%, 100%);
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,25 +25,27 @@ module mod_vtm
|
||||||
export module mod_web
|
export module mod_web
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_round
|
export module mod_game
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function text_nachedit(text : string) : string
|
function text_postprocess(text : string) : string
|
||||||
{
|
{
|
||||||
let regexp : RegExp = (new RegExp("\\$\{s(\\d*)\}", "g"));
|
let vars : {[name : string] : string} = {};
|
||||||
return text.replace(regexp, "<span class=\"symbol_$1\"> </span>");
|
for (let i : int = 0; i <= 3; i += 1)
|
||||||
|
vars["s" + i.toFixed(0)] = ("<span class=\"symbol_" + i.toFixed(0) + "\"> </span>");
|
||||||
|
return lib_string.stance(text, vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_round =
|
export type type_game =
|
||||||
{
|
{
|
||||||
model : mod_model.mod_round.type_round;
|
model : mod_model.mod_game.type_game;
|
||||||
area : Element;
|
area : Element;
|
||||||
intervall : lib_errormonade.type_errormonade<any>;
|
intervall : lib_errormonade.type_errormonade<any>;
|
||||||
}
|
}
|
||||||
|
|
@ -55,10 +57,10 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function create
|
function create
|
||||||
(
|
(
|
||||||
model : mod_model.mod_round.type_round,
|
model : mod_model.mod_game.type_game,
|
||||||
area : Element
|
area : Element
|
||||||
)
|
)
|
||||||
: type_round
|
: type_game
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"model": model,
|
"model": model,
|
||||||
|
|
@ -71,31 +73,34 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_erweitert
|
export function create_extended
|
||||||
(
|
(
|
||||||
model : mod_model.mod_round.type_round,
|
model : mod_model.mod_game.type_game,
|
||||||
area : Element
|
area : Element
|
||||||
)
|
)
|
||||||
: type_manifestation<mod_model.mod_round.type_round>
|
: type_manifestation<mod_model.mod_game.type_game>
|
||||||
{
|
{
|
||||||
return {
|
return (
|
||||||
"kind": "web_round",
|
lib_call.wrap
|
||||||
"data": create(model, area)
|
(
|
||||||
};
|
"web_game",
|
||||||
|
create(model, area)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function update_task(round : type_round) : void
|
function update_task(game : type_game) : void
|
||||||
{
|
{
|
||||||
document.querySelector("#task_text").innerHTML = (
|
document.querySelector("#task_text").innerHTML = (
|
||||||
text_nachedit
|
text_postprocess
|
||||||
(
|
(
|
||||||
mod_vtm.mod_model.mod_task.text
|
mod_vtm.mod_model.mod_task.text
|
||||||
(
|
(
|
||||||
mod_vtm.mod_model.mod_round.task_read(round.model)
|
mod_vtm.mod_model.mod_game.task_read(game.model)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -105,44 +110,44 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function update_world(round : type_round) : void
|
function update_world(game : type_game) : void
|
||||||
{
|
{
|
||||||
let node_svg : lib_xml.type_node = mod_svg.root
|
let node_svg : lib_xml.type_node = lib_svg.root
|
||||||
(
|
(
|
||||||
-4, -4,
|
-4, -4,
|
||||||
+4, +4,
|
+4, +4,
|
||||||
800, 800,
|
800, 800,
|
||||||
[mod_manifestation.view(mod_svg.mod_round.create_manifestation(round.model))]
|
[mod_manifestation.view(mod_svg.mod_game.create_extended(game.model))]
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
round.area.innerHTML = lib_xml.view(node_svg);
|
game.area.innerHTML = lib_xml.view(node_svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function update_token(round : type_round) : void
|
function update_token(game : type_game) : void
|
||||||
{
|
{
|
||||||
let node_svg : lib_xml.type_node = mod_svg.root
|
let node_svg : lib_xml.type_node = lib_svg.root
|
||||||
(
|
(
|
||||||
-4, -4,
|
-4, -4,
|
||||||
+4, +4,
|
+4, +4,
|
||||||
800, 800,
|
800, 800,
|
||||||
[mod_manifestation.view(mod_svg.mod_round.create_manifestation(round.model))]
|
[mod_manifestation.view(mod_svg.mod_game.create_extended(game.model))]
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
round.area.innerHTML = lib_xml.view(node_svg);
|
game.area.innerHTML = lib_xml.view(node_svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function update_mode(round : type_round) : void
|
function update_mode(game : type_game) : void
|
||||||
{
|
{
|
||||||
let status : string;
|
let status : string;
|
||||||
switch (mod_vtm.mod_model.mod_round.mode_read(round.model))
|
switch (mod_vtm.mod_model.mod_game.mode_read(game.model))
|
||||||
{
|
{
|
||||||
case mod_vtm.mod_model.mod_mode.initial:
|
case mod_vtm.mod_model.mod_mode.initial:
|
||||||
{
|
{
|
||||||
|
|
@ -178,21 +183,21 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function update_buttons(round : type_round) : void
|
function update_buttons(game : type_game) : void
|
||||||
{
|
{
|
||||||
let mode : mod_vtm.mod_model.mod_mode.type_mode = mod_vtm.mod_model.mod_round.mode_read(round.model);
|
let mode : mod_vtm.mod_model.mod_mode.type_mode = mod_vtm.mod_model.mod_game.mode_read(game.model);
|
||||||
let klasse : string;
|
let class_ : string;
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case mod_vtm.mod_model.mod_mode.initial:
|
case mod_vtm.mod_model.mod_mode.initial:
|
||||||
{
|
{
|
||||||
klasse = "initial";
|
class_ = "initial";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case mod_vtm.mod_model.mod_mode.uncertain:
|
case mod_vtm.mod_model.mod_mode.uncertain:
|
||||||
{
|
{
|
||||||
klasse = (
|
class_ = (
|
||||||
lib_errormonade.filled<any>(round.intervall)
|
lib_errormonade.filled<any>(game.intervall)
|
||||||
? "uncertain_running"
|
? "uncertain_running"
|
||||||
: "uncertain_standing"
|
: "uncertain_standing"
|
||||||
);
|
);
|
||||||
|
|
@ -201,7 +206,7 @@ module mod_vtm
|
||||||
case mod_vtm.mod_model.mod_mode.wrong:
|
case mod_vtm.mod_model.mod_mode.wrong:
|
||||||
case mod_vtm.mod_model.mod_mode.correct:
|
case mod_vtm.mod_model.mod_mode.correct:
|
||||||
{
|
{
|
||||||
klasse = "done";
|
class_ = "done";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
@ -210,97 +215,97 @@ module mod_vtm
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
document.querySelector("#buttons").setAttribute("class", klasse);
|
document.querySelector("#buttons").setAttribute("class", class_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function view(round : type_round) : void
|
function view(game : type_game) : void
|
||||||
{
|
{
|
||||||
update_task(round);
|
update_task(game);
|
||||||
update_world(round);
|
update_world(game);
|
||||||
update_token(round);
|
update_token(game);
|
||||||
update_mode(round);
|
update_mode(game);
|
||||||
update_buttons(round);
|
update_buttons(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function stop(round : type_round) : void
|
function stop(game : type_game) : void
|
||||||
{
|
{
|
||||||
if (lib_errormonade.filled(round.intervall))
|
if (lib_errormonade.filled(game.intervall))
|
||||||
{
|
{
|
||||||
clearInterval(lib_errormonade.read(round.intervall));
|
clearInterval(lib_errormonade.read(game.intervall));
|
||||||
round.intervall = (lib_errormonade.create_nothing<any>());
|
game.intervall = (lib_errormonade.create_nothing<any>());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let message : string = "kein Intervall gesetzt";
|
let message : string = "kein Intervall gesetzt";
|
||||||
console.warn(message);
|
console.warn(message);
|
||||||
}
|
}
|
||||||
update_buttons(round);
|
update_buttons(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function resume(round : type_round) : void
|
function resume(game : type_game) : void
|
||||||
{
|
{
|
||||||
mod_vtm.mod_model.mod_round.resume(round.model);
|
mod_vtm.mod_model.mod_game.resume(game.model);
|
||||||
let mode : mod_vtm.mod_model.mod_mode.type_mode = mod_vtm.mod_model.mod_round.mode_read(round.model);
|
let mode : mod_vtm.mod_model.mod_mode.type_mode = mod_vtm.mod_model.mod_game.mode_read(game.model);
|
||||||
if (mode <= 1)
|
if (mode <= 1)
|
||||||
{
|
{
|
||||||
// nothing tun
|
// nothing tun
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stop(round);
|
stop(game);
|
||||||
}
|
}
|
||||||
update_buttons(round);
|
update_buttons(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function testen(round : type_round) : void
|
function testen(game : type_game) : void
|
||||||
{
|
{
|
||||||
let handle : any = setInterval(() => resume(round), 500);
|
let handle : any = setInterval(() => resume(game), 500);
|
||||||
round.intervall = (lib_errormonade.create_just<any>(handle));
|
game.intervall = (lib_errormonade.create_just<any>(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function edit(round : type_round) : void
|
function edit(game : type_game) : void
|
||||||
{
|
{
|
||||||
stop(round);
|
stop(game);
|
||||||
mod_vtm.mod_model.mod_round.reset(round.model);
|
mod_vtm.mod_model.mod_game.reset(game.model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function clear(round : type_round) : void
|
function clear(game : type_game) : void
|
||||||
{
|
{
|
||||||
mod_vtm.mod_model.mod_round.world_clear(round.model);
|
mod_vtm.mod_model.mod_game.world_clear(game.model);
|
||||||
mod_vtm.mod_model.mod_round.reset(round.model);
|
mod_vtm.mod_model.mod_game.reset(game.model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
function bind(round : type_round) : void
|
function bind(game : type_game) : void
|
||||||
{
|
{
|
||||||
let spot_ermitteln = (target : EventTarget) =>
|
let spot_determine = (target : EventTarget) =>
|
||||||
{
|
{
|
||||||
let spot : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot>;
|
let spot : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot>;
|
||||||
let dom_tile : Element = target["closest"](".tile");
|
let dom_tile : Element = target["closest"](".tile");
|
||||||
|
|
@ -311,63 +316,63 @@ module mod_vtm
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let rel : string = dom_tile.getAttribute("rel")
|
let rel : string = dom_tile.getAttribute("rel")
|
||||||
spot = (lib_errormonade.create_just<mod_vtm.mod_model.mod_spot.type_spot>(mod_vtm.mod_model.mod_spot.von_hash(rel)));
|
spot = (lib_errormonade.create_just<mod_vtm.mod_model.mod_spot.type_spot>(mod_vtm.mod_model.mod_spot.from_hash(rel)));
|
||||||
}
|
}
|
||||||
return spot;
|
return spot;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_task",
|
"change_task",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
update_task(round);
|
update_task(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_world",
|
"change_world",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
update_world(round);
|
update_world(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_token",
|
"change_token",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
update_token(round);
|
update_token(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
mod_vtm.mod_model.mod_round.lauschen
|
mod_vtm.mod_model.mod_game.lauschen
|
||||||
(
|
(
|
||||||
round.model,
|
game.model,
|
||||||
"aendrung_mode",
|
"change_mode",
|
||||||
(data) =>
|
(data) =>
|
||||||
{
|
{
|
||||||
update_mode(round);
|
update_mode(game);
|
||||||
update_buttons(round);
|
update_buttons(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
// Links-Klick
|
// Links-Klick
|
||||||
round.area.addEventListener
|
game.area.addEventListener
|
||||||
(
|
(
|
||||||
"click",
|
"click",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let spot_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot> = spot_ermitteln(event.target);
|
let spot_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot> = spot_determine(event.target);
|
||||||
if (lib_errormonade.filled(spot_))
|
if (lib_errormonade.filled(spot_))
|
||||||
{
|
{
|
||||||
mod_vtm.mod_model.mod_round.world_tile_wechseln(round.model, lib_errormonade.read(spot_), false);
|
mod_vtm.mod_model.mod_game.world_tile_wechseln(game.model, lib_errormonade.read(spot_), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -377,16 +382,16 @@ module mod_vtm
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
// Rechts-Klick
|
// Rechts-Klick
|
||||||
round.area.addEventListener
|
game.area.addEventListener
|
||||||
(
|
(
|
||||||
"contextmenu",
|
"contextmenu",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let spot_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot> = spot_ermitteln(event.target);
|
let spot_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot> = spot_determine(event.target);
|
||||||
if (lib_errormonade.filled(spot_))
|
if (lib_errormonade.filled(spot_))
|
||||||
{
|
{
|
||||||
mod_vtm.mod_model.mod_round.world_tile_wechseln(round.model, lib_errormonade.read(spot_), true);
|
mod_vtm.mod_model.mod_game.world_tile_wechseln(game.model, lib_errormonade.read(spot_), true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -396,17 +401,17 @@ module mod_vtm
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
// Mausrad
|
// Mausrad
|
||||||
round.area.addEventListener
|
game.area.addEventListener
|
||||||
(
|
(
|
||||||
"wheel",
|
"wheel",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let spot_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot> = spot_ermitteln(event.target);
|
let spot_ : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_spot.type_spot> = spot_determine(event.target);
|
||||||
if (lib_errormonade.filled(spot_))
|
if (lib_errormonade.filled(spot_))
|
||||||
{
|
{
|
||||||
let inkrement : int = ((event["deltaY"] < 0) ? -1 : +1);
|
let inkrement : int = ((event["deltaY"] < 0) ? -1 : +1);
|
||||||
mod_vtm.mod_model.mod_round.world_tile_rotate(round.model, lib_errormonade.read(spot_), inkrement);
|
mod_vtm.mod_model.mod_game.world_tile_rotate(game.model, lib_errormonade.read(spot_), inkrement);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -421,8 +426,8 @@ module mod_vtm
|
||||||
"click",
|
"click",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
stop(round);
|
stop(game);
|
||||||
resume(round);
|
resume(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -432,7 +437,7 @@ module mod_vtm
|
||||||
"click",
|
"click",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
testen(round);
|
testen(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -442,7 +447,7 @@ module mod_vtm
|
||||||
"click",
|
"click",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
stop(round);
|
stop(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -452,7 +457,7 @@ module mod_vtm
|
||||||
"click",
|
"click",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
edit(round);
|
edit(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -462,7 +467,7 @@ module mod_vtm
|
||||||
"click",
|
"click",
|
||||||
event =>
|
event =>
|
||||||
{
|
{
|
||||||
clear(round);
|
clear(game);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -472,10 +477,10 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
lib_trait.attend<signature_manifestation<mod_vtm.mod_model.mod_round.type_round, void>>
|
lib_trait.attend<signature_manifestation<mod_vtm.mod_model.mod_game.type_game, void>>
|
||||||
(
|
(
|
||||||
trait_manifestation,
|
trait_manifestation,
|
||||||
"web_round",
|
"web_game",
|
||||||
{
|
{
|
||||||
"view": (manifestation) => view(manifestation.data),
|
"view": (manifestation) => view(manifestation.data),
|
||||||
"bind": (manifestation) => bind(manifestation.data),
|
"bind": (manifestation) => bind(manifestation.data),
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,19 +25,19 @@ module mod_vtm
|
||||||
export module mod_actuator
|
export module mod_actuator
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_annehmer
|
export module mod_acceptor
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
let kind : string = "annehmer";
|
let kind : string = "acceptor";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_annehmer =
|
export type type_acceptor =
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
@ -49,7 +49,7 @@ module mod_vtm
|
||||||
function create
|
function create
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_annehmer
|
: type_acceptor
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
};
|
};
|
||||||
|
|
@ -59,7 +59,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_actuator
|
export function create_extended
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: mod_actuator.type_actuator
|
: mod_actuator.type_actuator
|
||||||
|
|
@ -74,7 +74,7 @@ module mod_vtm
|
||||||
function example
|
function example
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_annehmer
|
: type_acceptor
|
||||||
{
|
{
|
||||||
return create();
|
return create();
|
||||||
}
|
}
|
||||||
|
|
@ -85,7 +85,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function rotate
|
function rotate
|
||||||
(
|
(
|
||||||
annehmer : type_annehmer,
|
acceptor : type_acceptor,
|
||||||
inkrement ?: int
|
inkrement ?: int
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
|
|
@ -98,7 +98,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function use
|
function use
|
||||||
(
|
(
|
||||||
annehmer : type_annehmer,
|
acceptor : type_acceptor,
|
||||||
token : mod_token.type_token
|
token : mod_token.type_token
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
|
|
@ -112,7 +112,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function export_
|
function export_
|
||||||
(
|
(
|
||||||
annehmer : type_annehmer
|
acceptor : type_acceptor
|
||||||
)
|
)
|
||||||
: any
|
: any
|
||||||
{
|
{
|
||||||
|
|
@ -128,7 +128,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
raw : any
|
raw : any
|
||||||
)
|
)
|
||||||
: type_annehmer
|
: type_acceptor
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
create
|
create
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,19 +25,19 @@ module mod_vtm
|
||||||
export module mod_actuator
|
export module mod_actuator
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_befoerderer
|
export module mod_conveyer
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
let kind : string = "befoerderer";
|
let kind : string = "conveyer";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_befoerderer =
|
export type type_conveyer =
|
||||||
{
|
{
|
||||||
direction : mod_direction.type_direction;
|
direction : mod_direction.type_direction;
|
||||||
}
|
}
|
||||||
|
|
@ -51,7 +51,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
direction : mod_direction.type_direction
|
direction : mod_direction.type_direction
|
||||||
)
|
)
|
||||||
: type_befoerderer
|
: type_conveyer
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": direction,
|
"direction": direction,
|
||||||
|
|
@ -62,7 +62,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_actuator
|
export function create_extended
|
||||||
(
|
(
|
||||||
direction : mod_direction.type_direction
|
direction : mod_direction.type_direction
|
||||||
)
|
)
|
||||||
|
|
@ -78,7 +78,7 @@ module mod_vtm
|
||||||
function example
|
function example
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_befoerderer
|
: type_conveyer
|
||||||
{
|
{
|
||||||
return create(0);
|
return create(0);
|
||||||
}
|
}
|
||||||
|
|
@ -89,11 +89,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function direction_read
|
export function direction_read
|
||||||
(
|
(
|
||||||
befoerderer : type_befoerderer
|
conveyer : type_conveyer
|
||||||
)
|
)
|
||||||
: mod_direction.type_direction
|
: mod_direction.type_direction
|
||||||
{
|
{
|
||||||
return befoerderer.direction;
|
return conveyer.direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -102,12 +102,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function rotate
|
function rotate
|
||||||
(
|
(
|
||||||
befoerderer : type_befoerderer,
|
conveyer : type_conveyer,
|
||||||
inkrement : int = +1
|
inkrement : int = +1
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
befoerderer.direction = mod_direction.add(befoerderer.direction, inkrement);
|
conveyer.direction = mod_direction.add(conveyer.direction, inkrement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -116,12 +116,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function use
|
function use
|
||||||
(
|
(
|
||||||
befoerderer : type_befoerderer,
|
conveyer : type_conveyer,
|
||||||
token : mod_token.type_token
|
token : mod_token.type_token
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
mod_token.move(token, befoerderer.direction);
|
mod_token.move(token, conveyer.direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -130,12 +130,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function export_
|
function export_
|
||||||
(
|
(
|
||||||
befoerderer : type_befoerderer
|
conveyer : type_conveyer
|
||||||
)
|
)
|
||||||
: any
|
: any
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": mod_direction.export_(befoerderer.direction),
|
"direction": mod_direction.export_(conveyer.direction),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -145,14 +145,14 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function import_
|
function import_
|
||||||
(
|
(
|
||||||
befoerderer_ : any
|
conveyer_ : any
|
||||||
)
|
)
|
||||||
: type_befoerderer
|
: type_conveyer
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
create
|
create
|
||||||
(
|
(
|
||||||
mod_direction.import_(befoerderer_["direction"])
|
mod_direction.import_(conveyer_["direction"])
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,19 +25,19 @@ module mod_vtm
|
||||||
export module mod_actuator
|
export module mod_actuator
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_erzeuger
|
export module mod_generator
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
let kind : string = "erzeuger";
|
let kind : string = "generator";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_erzeuger =
|
export type type_generator =
|
||||||
{
|
{
|
||||||
direction : mod_direction.type_direction;
|
direction : mod_direction.type_direction;
|
||||||
}
|
}
|
||||||
|
|
@ -51,7 +51,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
direction : mod_direction.type_direction
|
direction : mod_direction.type_direction
|
||||||
)
|
)
|
||||||
: type_erzeuger
|
: type_generator
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": direction,
|
"direction": direction,
|
||||||
|
|
@ -62,7 +62,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_actuator
|
export function create_extended
|
||||||
(
|
(
|
||||||
direction : mod_direction.type_direction
|
direction : mod_direction.type_direction
|
||||||
)
|
)
|
||||||
|
|
@ -78,7 +78,7 @@ module mod_vtm
|
||||||
function example
|
function example
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_erzeuger
|
: type_generator
|
||||||
{
|
{
|
||||||
return create(0);
|
return create(0);
|
||||||
}
|
}
|
||||||
|
|
@ -89,11 +89,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function direction_read
|
export function direction_read
|
||||||
(
|
(
|
||||||
erzeuger : type_erzeuger
|
generator : type_generator
|
||||||
)
|
)
|
||||||
: mod_direction.type_direction
|
: mod_direction.type_direction
|
||||||
{
|
{
|
||||||
return erzeuger.direction;
|
return generator.direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -102,12 +102,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function rotate
|
function rotate
|
||||||
(
|
(
|
||||||
erzeuger : type_erzeuger,
|
generator : type_generator,
|
||||||
inkrement : int = +1
|
inkrement : int = +1
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
erzeuger.direction = mod_direction.add(erzeuger.direction, inkrement);
|
generator.direction = mod_direction.add(generator.direction, inkrement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -116,12 +116,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function use
|
function use
|
||||||
(
|
(
|
||||||
erzeuger : type_erzeuger,
|
generator : type_generator,
|
||||||
token : mod_token.type_token
|
token : mod_token.type_token
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
mod_token.move(token, erzeuger.direction);
|
mod_token.move(token, generator.direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -130,12 +130,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function export_
|
function export_
|
||||||
(
|
(
|
||||||
erzeuger : type_erzeuger
|
generator : type_generator
|
||||||
)
|
)
|
||||||
: any
|
: any
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": mod_direction.export_(erzeuger.direction),
|
"direction": mod_direction.export_(generator.direction),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -147,7 +147,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
raw : any
|
raw : any
|
||||||
)
|
)
|
||||||
: type_erzeuger
|
: type_generator
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
create
|
create
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,19 +25,19 @@ module mod_vtm
|
||||||
export module mod_actuator
|
export module mod_actuator
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_leser
|
export module mod_reader
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
let kind : string = "leser";
|
let kind : string = "reader";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_leser =
|
export type type_reader =
|
||||||
{
|
{
|
||||||
"direction": mod_direction.type_direction,
|
"direction": mod_direction.type_direction,
|
||||||
"symbol_links": mod_symbol.type_symbol,
|
"symbol_links": mod_symbol.type_symbol,
|
||||||
|
|
@ -55,7 +55,7 @@ module mod_vtm
|
||||||
symbol_links : mod_symbol.type_symbol,
|
symbol_links : mod_symbol.type_symbol,
|
||||||
symbol_rechts : mod_symbol.type_symbol
|
symbol_rechts : mod_symbol.type_symbol
|
||||||
)
|
)
|
||||||
: type_leser
|
: type_reader
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": direction,
|
"direction": direction,
|
||||||
|
|
@ -68,7 +68,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_actuator
|
export function create_extended
|
||||||
(
|
(
|
||||||
direction : mod_direction.type_direction,
|
direction : mod_direction.type_direction,
|
||||||
symbol_links : mod_symbol.type_symbol,
|
symbol_links : mod_symbol.type_symbol,
|
||||||
|
|
@ -86,7 +86,7 @@ module mod_vtm
|
||||||
function example
|
function example
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_leser
|
: type_reader
|
||||||
{
|
{
|
||||||
return create(0, 0, 1);
|
return create(0, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -97,11 +97,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function direction_read
|
export function direction_read
|
||||||
(
|
(
|
||||||
leser : type_leser
|
reader : type_reader
|
||||||
)
|
)
|
||||||
: mod_direction.type_direction
|
: mod_direction.type_direction
|
||||||
{
|
{
|
||||||
return leser.direction;
|
return reader.direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -110,11 +110,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function symbol_links_read
|
export function symbol_links_read
|
||||||
(
|
(
|
||||||
leser : type_leser
|
reader : type_reader
|
||||||
)
|
)
|
||||||
: mod_symbol.type_symbol
|
: mod_symbol.type_symbol
|
||||||
{
|
{
|
||||||
return leser.symbol_links;
|
return reader.symbol_links;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -123,11 +123,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function symbol_rechts_read
|
export function symbol_rechts_read
|
||||||
(
|
(
|
||||||
leser : type_leser
|
reader : type_reader
|
||||||
)
|
)
|
||||||
: mod_symbol.type_symbol
|
: mod_symbol.type_symbol
|
||||||
{
|
{
|
||||||
return leser.symbol_rechts;
|
return reader.symbol_rechts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -136,12 +136,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function rotate
|
function rotate
|
||||||
(
|
(
|
||||||
leser : type_leser,
|
reader : type_reader,
|
||||||
inkrement : int = +1
|
inkrement : int = +1
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
leser.direction = mod_direction.add(leser.direction, inkrement);
|
reader.direction = mod_direction.add(reader.direction, inkrement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -150,7 +150,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function use
|
function use
|
||||||
(
|
(
|
||||||
leser : type_leser,
|
reader : type_reader,
|
||||||
token : mod_token.type_token
|
token : mod_token.type_token
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
|
|
@ -160,12 +160,12 @@ module mod_vtm
|
||||||
if (lib_errormonade.filled(symbol_))
|
if (lib_errormonade.filled(symbol_))
|
||||||
{
|
{
|
||||||
let symbol : mod_symbol.type_symbol = lib_errormonade.read(symbol_);
|
let symbol : mod_symbol.type_symbol = lib_errormonade.read(symbol_);
|
||||||
if (symbol === leser.symbol_links)
|
if (symbol === reader.symbol_links)
|
||||||
{
|
{
|
||||||
mod_token.shift(token);
|
mod_token.shift(token);
|
||||||
summand = +2;
|
summand = +2;
|
||||||
}
|
}
|
||||||
else if (symbol === leser.symbol_rechts)
|
else if (symbol === reader.symbol_rechts)
|
||||||
{
|
{
|
||||||
mod_token.shift(token);
|
mod_token.shift(token);
|
||||||
summand = -2;
|
summand = -2;
|
||||||
|
|
@ -179,7 +179,7 @@ module mod_vtm
|
||||||
{
|
{
|
||||||
summand = 0;
|
summand = 0;
|
||||||
}
|
}
|
||||||
let direction : mod_direction.type_direction = mod_direction.add(leser.direction, summand);
|
let direction : mod_direction.type_direction = mod_direction.add(reader.direction, summand);
|
||||||
mod_token.move(token, direction);
|
mod_token.move(token, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -189,14 +189,14 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function export_
|
function export_
|
||||||
(
|
(
|
||||||
leser : type_leser
|
reader : type_reader
|
||||||
)
|
)
|
||||||
: any
|
: any
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": mod_direction.export_(leser.direction),
|
"direction": mod_direction.export_(reader.direction),
|
||||||
"symbol_links": mod_symbol.export_(leser.symbol_links),
|
"symbol_links": mod_symbol.export_(reader.symbol_links),
|
||||||
"symbol_rechts": mod_symbol.export_(leser.symbol_rechts),
|
"symbol_rechts": mod_symbol.export_(reader.symbol_rechts),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -208,7 +208,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
raw : any
|
raw : any
|
||||||
)
|
)
|
||||||
: type_leser
|
: type_reader
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
create
|
create
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,19 +25,19 @@ module mod_vtm
|
||||||
export module mod_actuator
|
export module mod_actuator
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_verwerfer
|
export module mod_rejector
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
let kind : string = "verwerfer";
|
let kind : string = "rejector";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_verwerfer =
|
export type type_rejector =
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
@ -49,7 +49,7 @@ module mod_vtm
|
||||||
function create
|
function create
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_verwerfer
|
: type_rejector
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
};
|
};
|
||||||
|
|
@ -59,7 +59,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_actuator
|
export function create_extended
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: mod_actuator.type_actuator
|
: mod_actuator.type_actuator
|
||||||
|
|
@ -74,7 +74,7 @@ module mod_vtm
|
||||||
function example
|
function example
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_verwerfer
|
: type_rejector
|
||||||
{
|
{
|
||||||
return create();
|
return create();
|
||||||
}
|
}
|
||||||
|
|
@ -85,7 +85,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function rotate
|
function rotate
|
||||||
(
|
(
|
||||||
verwerfer : type_verwerfer,
|
rejector : type_rejector,
|
||||||
inkrement ?: int
|
inkrement ?: int
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
|
|
@ -98,7 +98,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function use
|
function use
|
||||||
(
|
(
|
||||||
verwerfer : type_verwerfer,
|
rejector : type_rejector,
|
||||||
token : mod_token.type_token
|
token : mod_token.type_token
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
|
|
@ -112,7 +112,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function export_
|
function export_
|
||||||
(
|
(
|
||||||
verwerfer : type_verwerfer
|
rejector : type_rejector
|
||||||
)
|
)
|
||||||
: any
|
: any
|
||||||
{
|
{
|
||||||
|
|
@ -128,7 +128,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
raw : any
|
raw : any
|
||||||
)
|
)
|
||||||
: type_verwerfer
|
: type_rejector
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
create
|
create
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -25,19 +25,19 @@ module mod_vtm
|
||||||
export module mod_actuator
|
export module mod_actuator
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_schreiber
|
export module mod_writer
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
let kind : string = "schreiber";
|
let kind : string = "writer";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_schreiber =
|
export type type_writer =
|
||||||
{
|
{
|
||||||
direction : mod_direction.type_direction;
|
direction : mod_direction.type_direction;
|
||||||
symbol : mod_symbol.type_symbol;
|
symbol : mod_symbol.type_symbol;
|
||||||
|
|
@ -53,7 +53,7 @@ module mod_vtm
|
||||||
direction : mod_direction.type_direction,
|
direction : mod_direction.type_direction,
|
||||||
symbol : mod_symbol.type_symbol
|
symbol : mod_symbol.type_symbol
|
||||||
)
|
)
|
||||||
: type_schreiber
|
: type_writer
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": direction,
|
"direction": direction,
|
||||||
|
|
@ -65,7 +65,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function create_actuator
|
export function create_extended
|
||||||
(
|
(
|
||||||
direction : mod_direction.type_direction,
|
direction : mod_direction.type_direction,
|
||||||
symbol : mod_symbol.type_symbol
|
symbol : mod_symbol.type_symbol
|
||||||
|
|
@ -82,7 +82,7 @@ module mod_vtm
|
||||||
function example
|
function example
|
||||||
(
|
(
|
||||||
)
|
)
|
||||||
: type_schreiber
|
: type_writer
|
||||||
{
|
{
|
||||||
return create(0, 0);
|
return create(0, 0);
|
||||||
}
|
}
|
||||||
|
|
@ -93,11 +93,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function direction_read
|
export function direction_read
|
||||||
(
|
(
|
||||||
schreiber : type_schreiber
|
writer : type_writer
|
||||||
)
|
)
|
||||||
: mod_direction.type_direction
|
: mod_direction.type_direction
|
||||||
{
|
{
|
||||||
return schreiber.direction;
|
return writer.direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -106,11 +106,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function symbol_read
|
export function symbol_read
|
||||||
(
|
(
|
||||||
schreiber : type_schreiber
|
writer : type_writer
|
||||||
)
|
)
|
||||||
: mod_symbol.type_symbol
|
: mod_symbol.type_symbol
|
||||||
{
|
{
|
||||||
return schreiber.symbol;
|
return writer.symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -119,12 +119,12 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function rotate
|
function rotate
|
||||||
(
|
(
|
||||||
schreiber : type_schreiber,
|
writer : type_writer,
|
||||||
inkrement : int = +1
|
inkrement : int = +1
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
schreiber.direction = mod_direction.add(schreiber.direction, inkrement);
|
writer.direction = mod_direction.add(writer.direction, inkrement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -133,13 +133,13 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function use
|
function use
|
||||||
(
|
(
|
||||||
schreiber : type_schreiber,
|
writer : type_writer,
|
||||||
token : mod_token.type_token
|
token : mod_token.type_token
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
mod_token.write(token, schreiber.symbol);
|
mod_token.write(token, writer.symbol);
|
||||||
mod_token.move(token, schreiber.direction);
|
mod_token.move(token, writer.direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -148,13 +148,13 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function export_
|
function export_
|
||||||
(
|
(
|
||||||
schreiber : type_schreiber
|
writer : type_writer
|
||||||
)
|
)
|
||||||
: any
|
: any
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"direction": mod_direction.export_(schreiber.direction),
|
"direction": mod_direction.export_(writer.direction),
|
||||||
"symbol": mod_symbol.export_(schreiber.symbol),
|
"symbol": mod_symbol.export_(writer.symbol),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -166,7 +166,7 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
raw : any
|
raw : any
|
||||||
)
|
)
|
||||||
: type_schreiber
|
: type_writer
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
create
|
create
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -22,13 +22,13 @@ module mod_vtm
|
||||||
export module mod_model
|
export module mod_model
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_round
|
export module mod_game
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_round =
|
export type type_game =
|
||||||
{
|
{
|
||||||
world : mod_world.type_world;
|
world : mod_world.type_world;
|
||||||
token : lib_errormonade.type_errormonade<mod_token.type_token>;
|
token : lib_errormonade.type_errormonade<mod_token.type_token>;
|
||||||
|
|
@ -47,9 +47,9 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
task : mod_task.type_task
|
task : mod_task.type_task
|
||||||
)
|
)
|
||||||
: type_round
|
: type_game
|
||||||
{
|
{
|
||||||
let round : type_round =
|
let game : type_game =
|
||||||
{
|
{
|
||||||
"world": undefined,
|
"world": undefined,
|
||||||
"token": undefined,
|
"token": undefined,
|
||||||
|
|
@ -59,17 +59,17 @@ module mod_vtm
|
||||||
"listeners": undefined,
|
"listeners": undefined,
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
round.listeners =
|
game.listeners =
|
||||||
{
|
{
|
||||||
"aendrung_task": [],
|
"change_task": [],
|
||||||
"aendrung_world": [],
|
"change_world": [],
|
||||||
"aendrung_token": [],
|
"change_token": [],
|
||||||
"aendrung_mode": [],
|
"change_mode": [],
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
world_clear(round, false);
|
world_clear(game, false);
|
||||||
reset(round, false);
|
reset(game, false);
|
||||||
return round;
|
return game;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -78,15 +78,15 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function lauschen
|
export function lauschen
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
event : string,
|
event : string,
|
||||||
procedure : (data ?: any)=>void
|
procedure : (data ?: any)=>void
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
if (event in round.listeners)
|
if (event in game.listeners)
|
||||||
{
|
{
|
||||||
round.listeners[event].push(procedure);
|
game.listeners[event].push(procedure);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -101,14 +101,14 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
function notify
|
function notify
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
event : string,
|
event : string,
|
||||||
data : any = {}
|
data : any = {}
|
||||||
) : void
|
) : void
|
||||||
{
|
{
|
||||||
if (event in round.listeners)
|
if (event in game.listeners)
|
||||||
{
|
{
|
||||||
round.listeners[event].forEach
|
game.listeners[event].forEach
|
||||||
(
|
(
|
||||||
procedure =>
|
procedure =>
|
||||||
{
|
{
|
||||||
|
|
@ -130,18 +130,18 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function reset
|
export function reset
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
inform : boolean = true
|
inform : boolean = true
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
round.token = (lib_errormonade.create_nothing<mod_token.type_token>());
|
game.token = (lib_errormonade.create_nothing<mod_token.type_token>());
|
||||||
round.testindex = (lib_errormonade.create_nothing<int>());
|
game.testindex = (lib_errormonade.create_nothing<int>());
|
||||||
round.mode = mod_mode.initial;
|
game.mode = mod_mode.initial;
|
||||||
if (inform)
|
if (inform)
|
||||||
{
|
{
|
||||||
notify(round, "aendrung_token", {});
|
notify(game, "change_token", {});
|
||||||
notify(round, "aendrung_mode", {});
|
notify(game, "change_mode", {});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -155,11 +155,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function task_read
|
export function task_read
|
||||||
(
|
(
|
||||||
round : type_round
|
game : type_game
|
||||||
)
|
)
|
||||||
: mod_task.type_task
|
: mod_task.type_task
|
||||||
{
|
{
|
||||||
return round.task;
|
return game.task;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -168,14 +168,14 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function task_set
|
export function task_set
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
task : mod_task.type_task
|
task : mod_task.type_task
|
||||||
) : void
|
) : void
|
||||||
{
|
{
|
||||||
round.task = task;
|
game.task = task;
|
||||||
// round.world_clear();
|
// game.world_clear();
|
||||||
notify(round, "aendrung_task", {});
|
notify(game, "change_task", {});
|
||||||
reset(round);
|
reset(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -184,11 +184,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function world_read
|
export function world_read
|
||||||
(
|
(
|
||||||
round : type_round
|
game : type_game
|
||||||
)
|
)
|
||||||
: mod_world.type_world
|
: mod_world.type_world
|
||||||
{
|
{
|
||||||
return round.world;
|
return game.world;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -197,16 +197,16 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function world_set
|
export function world_set
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
world : mod_world.type_world,
|
world : mod_world.type_world,
|
||||||
inform : boolean = true
|
inform : boolean = true
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
round.world = world;
|
game.world = world;
|
||||||
if (inform)
|
if (inform)
|
||||||
{
|
{
|
||||||
notify(round, "aendrung_world", {});
|
notify(game, "change_world", {});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -220,15 +220,15 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function world_clear
|
export function world_clear
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
inform : boolean = true
|
inform : boolean = true
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
round.world = mod_world.blanko();
|
game.world = mod_world.blanko();
|
||||||
if (inform)
|
if (inform)
|
||||||
{
|
{
|
||||||
notify(round, "aendrung_world", {});
|
notify(game, "change_world", {});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -242,11 +242,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function token_read
|
export function token_read
|
||||||
(
|
(
|
||||||
round : type_round
|
game : type_game
|
||||||
)
|
)
|
||||||
: lib_errormonade.type_errormonade<mod_token.type_token>
|
: lib_errormonade.type_errormonade<mod_token.type_token>
|
||||||
{
|
{
|
||||||
return round.token;
|
return game.token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -255,11 +255,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function mode_read
|
export function mode_read
|
||||||
(
|
(
|
||||||
round : type_round
|
game : type_game
|
||||||
)
|
)
|
||||||
: mod_mode.type_mode
|
: mod_mode.type_mode
|
||||||
{
|
{
|
||||||
return round.mode;
|
return game.mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -268,30 +268,30 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function world_tile_wechseln
|
export function world_tile_wechseln
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
spot : mod_spot.type_spot,
|
spot : mod_spot.type_spot,
|
||||||
umgekehrt : boolean = false
|
umgekehrt : boolean = false
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
if (! (round.mode === mod_mode.initial))
|
if (! (game.mode === mod_mode.initial))
|
||||||
{
|
{
|
||||||
let message : string = "gesperrt";
|
let message : string = "gesperrt";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mod_world.tile_wechseln(round.world, spot, umgekehrt);
|
mod_world.tile_wechseln(game.world, spot, umgekehrt);
|
||||||
notify
|
notify
|
||||||
(
|
(
|
||||||
round,
|
game,
|
||||||
"aendrung_world",
|
"change_world",
|
||||||
{
|
{
|
||||||
"kind": "tile_wechseln",
|
"kind": "tile_wechseln",
|
||||||
"data":
|
"data":
|
||||||
{
|
{
|
||||||
"spot": spot,
|
"spot": spot,
|
||||||
"umgekehrt": umgekehrt,
|
"umgekehrt": umgekehrt,
|
||||||
"tile": mod_world.tile_get(round.world, spot),
|
"tile": mod_world.tile_get(game.world, spot),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
@ -305,20 +305,20 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function world_tile_rotate
|
export function world_tile_rotate
|
||||||
(
|
(
|
||||||
round : type_round,
|
game : type_game,
|
||||||
spot : mod_spot.type_spot,
|
spot : mod_spot.type_spot,
|
||||||
inkrement : int = +1
|
inkrement : int = +1
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
if (! (round.mode === mod_mode.initial))
|
if (! (game.mode === mod_mode.initial))
|
||||||
{
|
{
|
||||||
let message : string = "gesperrt";
|
let message : string = "gesperrt";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mod_world.tile_rotate(round.world, spot, inkrement);
|
mod_world.tile_rotate(game.world, spot, inkrement);
|
||||||
notify(round, "aendrung_world", {});
|
notify(game, "change_world", {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -328,27 +328,27 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function resume
|
export function resume
|
||||||
(
|
(
|
||||||
round : type_round
|
game : type_game
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
switch (round.mode)
|
switch (game.mode)
|
||||||
{
|
{
|
||||||
case mod_mode.initial:
|
case mod_mode.initial:
|
||||||
{
|
{
|
||||||
round.mode = mod_mode.uncertain;
|
game.mode = mod_mode.uncertain;
|
||||||
round.testindex = (lib_errormonade.create_just<int>(0));
|
game.testindex = (lib_errormonade.create_just<int>(0));
|
||||||
notify(round, "aendrung_mode", {});
|
notify(game, "change_mode", {});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case mod_mode.uncertain:
|
case mod_mode.uncertain:
|
||||||
{
|
{
|
||||||
if (! lib_errormonade.filled<mod_token.type_token>(round.token))
|
if (! lib_errormonade.filled<mod_token.type_token>(game.token))
|
||||||
{
|
{
|
||||||
let test : mod_test.type_test = mod_task.tests(round.task)[lib_errormonade.read<int>(round.testindex)];
|
let test : mod_test.type_test = mod_task.tests(game.task)[lib_errormonade.read<int>(game.testindex)];
|
||||||
let tape : Array<mod_symbol.type_symbol> = mod_vtm.mod_helfer.list_copy<mod_symbol.type_symbol>(mod_test.input(test));
|
let tape : Array<mod_symbol.type_symbol> = mod_vtm.mod_helfer.list_copy<mod_symbol.type_symbol>(mod_test.input(test));
|
||||||
let spot : mod_spot.type_spot = mod_world.erzeuger_finden(round.world);
|
let spot : mod_spot.type_spot = mod_world.generator_finden(game.world);
|
||||||
round.token = (
|
game.token = (
|
||||||
lib_errormonade.create_just<mod_token.type_token>
|
lib_errormonade.create_just<mod_token.type_token>
|
||||||
(
|
(
|
||||||
mod_token.create
|
mod_token.create
|
||||||
|
|
@ -361,13 +361,13 @@ module mod_vtm
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let token : mod_token.type_token = lib_errormonade.read<mod_token.type_token>(round.token);
|
let token : mod_token.type_token = lib_errormonade.read<mod_token.type_token>(game.token);
|
||||||
let spot : mod_spot.type_spot = mod_token.spot_read(token);
|
let spot : mod_spot.type_spot = mod_token.spot_read(token);
|
||||||
let actuator_ : lib_errormonade.type_errormonade<mod_actuator.type_actuator> = mod_world.tile_get(round.world, spot);
|
let actuator_ : lib_errormonade.type_errormonade<mod_actuator.type_actuator> = mod_world.tile_get(game.world, spot);
|
||||||
let actuator : mod_actuator.type_actuator = (
|
let actuator : mod_actuator.type_actuator = (
|
||||||
lib_errormonade.filled<mod_actuator.type_actuator>(actuator_)
|
lib_errormonade.filled<mod_actuator.type_actuator>(actuator_)
|
||||||
? lib_errormonade.read<mod_actuator.type_actuator>(actuator_)
|
? lib_errormonade.read<mod_actuator.type_actuator>(actuator_)
|
||||||
: mod_actuator.mod_verwerfer.create_actuator()
|
: mod_actuator.mod_rejector.create_extended()
|
||||||
);
|
);
|
||||||
mod_actuator.use(actuator, token);
|
mod_actuator.use(actuator, token);
|
||||||
let state : mod_state.type_state = mod_token.state_read(token);
|
let state : mod_state.type_state = mod_token.state_read(token);
|
||||||
|
|
@ -379,14 +379,14 @@ module mod_vtm
|
||||||
{
|
{
|
||||||
let accepted : boolean = (state === mod_state.accepted);
|
let accepted : boolean = (state === mod_state.accepted);
|
||||||
let ausgabe : Array<mod_symbol.type_symbol> = mod_token.tape_read(token);
|
let ausgabe : Array<mod_symbol.type_symbol> = mod_token.tape_read(token);
|
||||||
round.token = (lib_errormonade.create_nothing<mod_token.type_token>());
|
game.token = (lib_errormonade.create_nothing<mod_token.type_token>());
|
||||||
let testindex : int = lib_errormonade.read<int>(round.testindex);
|
let testindex : int = lib_errormonade.read<int>(game.testindex);
|
||||||
let tests : Array<mod_test.type_test> = mod_task.tests(round.task);
|
let tests : Array<mod_test.type_test> = mod_task.tests(game.task);
|
||||||
let test : mod_test.type_test = tests[testindex];
|
let test : mod_test.type_test = tests[testindex];
|
||||||
if (! mod_test.pruefen(test, accepted, ausgabe))
|
if (! mod_test.pruefen(test, accepted, ausgabe))
|
||||||
{
|
{
|
||||||
round.mode = mod_mode.wrong;
|
game.mode = mod_mode.wrong;
|
||||||
notify(round, "aendrung_mode", {});
|
notify(game, "change_mode", {});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -394,14 +394,14 @@ module mod_vtm
|
||||||
if (testindex < tests.length)
|
if (testindex < tests.length)
|
||||||
{
|
{
|
||||||
// nächsten Test auswählen
|
// nächsten Test auswählen
|
||||||
round.testindex = (lib_errormonade.create_just<int>(testindex));
|
game.testindex = (lib_errormonade.create_just<int>(testindex));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// auf Modus "correct" wechseln
|
// auf Modus "correct" wechseln
|
||||||
round.testindex = (lib_errormonade.create_nothing<int>());
|
game.testindex = (lib_errormonade.create_nothing<int>());
|
||||||
round.mode = mod_mode.correct;
|
game.mode = mod_mode.correct;
|
||||||
notify(round, "aendrung_mode", {});
|
notify(game, "change_mode", {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -411,7 +411,7 @@ module mod_vtm
|
||||||
throw (new Error(message));
|
throw (new Error(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
notify(round, "aendrung_token", {});
|
notify(game, "change_token", {});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case mod_mode.wrong:
|
case mod_mode.wrong:
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -43,7 +43,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function von_hash(hash : string) : type_spot
|
export function from_hash(hash : string) : type_spot
|
||||||
{
|
{
|
||||||
let teile : Array<string> = hash.split("_");
|
let teile : Array<string> = hash.split("_");
|
||||||
return {"u": parseInt(teile[0]), "v": parseInt(teile[1])};
|
return {"u": parseInt(teile[0]), "v": parseInt(teile[1])};
|
||||||
|
|
@ -62,7 +62,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function von_direction(direction : mod_direction.type_direction) : type_spot
|
export function from_direction(direction : mod_direction.type_direction) : type_spot
|
||||||
{
|
{
|
||||||
switch (direction)
|
switch (direction)
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,7 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function import_(spot_ : string) : type_spot
|
export function import_(spot_ : string) : type_spot
|
||||||
{
|
{
|
||||||
return von_hash(spot_);
|
return from_hash(spot_);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -31,7 +31,7 @@ module mod_vtm
|
||||||
export type type_acceptortask =
|
export type type_acceptortask =
|
||||||
{
|
{
|
||||||
id : string;
|
id : string;
|
||||||
titel : string;
|
title : string;
|
||||||
text : string;
|
text : string;
|
||||||
tests : Array<mod_acceptortest.type_acceptortest>;
|
tests : Array<mod_acceptortest.type_acceptortest>;
|
||||||
}
|
}
|
||||||
|
|
@ -44,7 +44,7 @@ module mod_vtm
|
||||||
export function create
|
export function create
|
||||||
(
|
(
|
||||||
id : string,
|
id : string,
|
||||||
titel : string,
|
title : string,
|
||||||
text : string,
|
text : string,
|
||||||
tests : Array<mod_acceptortest.type_acceptortest>
|
tests : Array<mod_acceptortest.type_acceptortest>
|
||||||
)
|
)
|
||||||
|
|
@ -52,7 +52,7 @@ module mod_vtm
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"id": id,
|
"id": id,
|
||||||
"titel": titel,
|
"title": title,
|
||||||
"text": text,
|
"text": text,
|
||||||
"tests": tests,
|
"tests": tests,
|
||||||
};
|
};
|
||||||
|
|
@ -75,13 +75,13 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function titel
|
export function title
|
||||||
(
|
(
|
||||||
acceptortask : type_acceptortask
|
acceptortask : type_acceptortask
|
||||||
)
|
)
|
||||||
: string
|
: string
|
||||||
{
|
{
|
||||||
return acceptortask.titel;
|
return acceptortask.title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -52,7 +52,7 @@ module mod_vtm
|
||||||
task,
|
task,
|
||||||
{
|
{
|
||||||
"acceptortask": (data) => mod_acceptortask.id(data),
|
"acceptortask": (data) => mod_acceptortask.id(data),
|
||||||
"transductortask": (data) => mod_transductortask.id(data),
|
"transducertask": (data) => mod_transducertask.id(data),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -62,7 +62,7 @@ module mod_vtm
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function titel
|
export function title
|
||||||
(
|
(
|
||||||
task : type_task
|
task : type_task
|
||||||
)
|
)
|
||||||
|
|
@ -73,8 +73,8 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
task,
|
task,
|
||||||
{
|
{
|
||||||
"acceptortask": (data) => mod_acceptortask.titel(data),
|
"acceptortask": (data) => mod_acceptortask.title(data),
|
||||||
"transductortask": (data) => mod_transductortask.titel(data),
|
"transducertask": (data) => mod_transducertask.title(data),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -96,7 +96,7 @@ module mod_vtm
|
||||||
task,
|
task,
|
||||||
{
|
{
|
||||||
"acceptortask": (data) => mod_acceptortask.text(data),
|
"acceptortask": (data) => mod_acceptortask.text(data),
|
||||||
"transductortask": (data) => mod_transductortask.text(data),
|
"transducertask": (data) => mod_transducertask.text(data),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -121,9 +121,9 @@ module mod_vtm
|
||||||
mod_acceptortask.tests(data)
|
mod_acceptortask.tests(data)
|
||||||
.map(data_ => ({"kind": "acceptortest", "data": data_}))
|
.map(data_ => ({"kind": "acceptortest", "data": data_}))
|
||||||
),
|
),
|
||||||
"transductortask": (data) => (
|
"transducertask": (data) => (
|
||||||
mod_transductortask.tests(data)
|
mod_transducertask.tests(data)
|
||||||
.map(data_ => ({"kind": "transductortest", "data": data_}))
|
.map(data_ => ({"kind": "transducertest", "data": data_}))
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
@ -146,8 +146,8 @@ module mod_vtm
|
||||||
mod_acceptortask.create
|
mod_acceptortask.create
|
||||||
(
|
(
|
||||||
task_raw["id"],
|
task_raw["id"],
|
||||||
task_raw["parameter"]["titel"],
|
lib_translate.get(["tasks", task_raw["id"], "title"].join(".")),
|
||||||
task_raw["parameter"]["text"],
|
lib_translate.get(["tasks", task_raw["id"], "text"].join(".")),
|
||||||
task_raw["parameter"]["tests"].map
|
task_raw["parameter"]["tests"].map
|
||||||
(
|
(
|
||||||
test_raw => (
|
test_raw => (
|
||||||
|
|
@ -163,20 +163,20 @@ module mod_vtm
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "transductor":
|
case "transducer":
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"kind": "transductortask",
|
"kind": "transducertask",
|
||||||
"data": (
|
"data": (
|
||||||
mod_transductortask.create
|
mod_transducertask.create
|
||||||
(
|
(
|
||||||
task_raw["id"],
|
task_raw["id"],
|
||||||
task_raw["parameter"]["titel"],
|
lib_translate.get(["tasks", task_raw["id"], "title"].join(".")),
|
||||||
task_raw["parameter"]["text"],
|
lib_translate.get(["tasks", task_raw["id"], "text"].join(".")),
|
||||||
task_raw["parameter"]["tests"].map
|
task_raw["parameter"]["tests"].map
|
||||||
(
|
(
|
||||||
test_raw => (
|
test_raw => (
|
||||||
mod_transductortest.create
|
mod_transducertest.create
|
||||||
(
|
(
|
||||||
test_raw["input"],
|
test_raw["input"],
|
||||||
test_raw["output"]
|
test_raw["output"]
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -46,7 +46,7 @@ module mod_vtm
|
||||||
test,
|
test,
|
||||||
{
|
{
|
||||||
"acceptortest": (data) => mod_acceptortest.input(data),
|
"acceptortest": (data) => mod_acceptortest.input(data),
|
||||||
"transductortest": (data) => mod_transductortest.input(data),
|
"transducertest": (data) => mod_transducertest.input(data),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -70,7 +70,7 @@ module mod_vtm
|
||||||
test,
|
test,
|
||||||
{
|
{
|
||||||
"acceptortest": (data) => mod_acceptortest.pruefen(data, accepted, ausgabe),
|
"acceptortest": (data) => mod_acceptortest.pruefen(data, accepted, ausgabe),
|
||||||
"transductortest": (data) => mod_transductortest.pruefen(data, accepted, ausgabe),
|
"transducertest": (data) => mod_transducertest.pruefen(data, accepted, ausgabe),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -102,12 +102,12 @@ module mod_vtm
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "transductortest":
|
case "transducertest":
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"kind": "transductortest",
|
"kind": "transducertest",
|
||||||
"data": (
|
"data": (
|
||||||
mod_transductortest.create
|
mod_transducertest.create
|
||||||
(
|
(
|
||||||
test_raw["data"]["input"],
|
test_raw["data"]["input"],
|
||||||
test_raw["data"]["output"]
|
test_raw["data"]["output"]
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -22,18 +22,18 @@ module mod_vtm
|
||||||
export module mod_model
|
export module mod_model
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_transductortask
|
export module mod_transducertask
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_transductortask =
|
export type type_transducertask =
|
||||||
{
|
{
|
||||||
id : string;
|
id : string;
|
||||||
titel : string;
|
title : string;
|
||||||
text : string;
|
text : string;
|
||||||
tests : Array<mod_transductortest.type_transductortest>;
|
tests : Array<mod_transducertest.type_transducertest>;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -44,15 +44,15 @@ module mod_vtm
|
||||||
export function create
|
export function create
|
||||||
(
|
(
|
||||||
id : string,
|
id : string,
|
||||||
titel : string,
|
title : string,
|
||||||
text : string,
|
text : string,
|
||||||
tests : Array<mod_transductortest.type_transductortest>
|
tests : Array<mod_transducertest.type_transducertest>
|
||||||
)
|
)
|
||||||
: type_transductortask
|
: type_transducertask
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"id": id,
|
"id": id,
|
||||||
"titel": titel,
|
"title": title,
|
||||||
"text": text,
|
"text": text,
|
||||||
"tests": tests,
|
"tests": tests,
|
||||||
};
|
};
|
||||||
|
|
@ -64,24 +64,24 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function id
|
export function id
|
||||||
(
|
(
|
||||||
transductortask : type_transductortask
|
transducertask : type_transducertask
|
||||||
)
|
)
|
||||||
: string
|
: string
|
||||||
{
|
{
|
||||||
return transductortask.id;
|
return transducertask.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export function titel
|
export function title
|
||||||
(
|
(
|
||||||
transductortask : type_transductortask
|
transducertask : type_transducertask
|
||||||
)
|
)
|
||||||
: string
|
: string
|
||||||
{
|
{
|
||||||
return transductortask.titel;
|
return transducertask.title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -90,11 +90,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function text
|
export function text
|
||||||
(
|
(
|
||||||
transductortask : type_transductortask
|
transducertask : type_transducertask
|
||||||
)
|
)
|
||||||
: string
|
: string
|
||||||
{
|
{
|
||||||
return transductortask.text;
|
return transducertask.text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -103,11 +103,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function tests
|
export function tests
|
||||||
(
|
(
|
||||||
transductortask : type_transductortask
|
transducertask : type_transducertask
|
||||||
)
|
)
|
||||||
: Array<mod_transductortest.type_transductortest>
|
: Array<mod_transducertest.type_transducertest>
|
||||||
{
|
{
|
||||||
return transductortask.tests;
|
return transducertask.tests;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -22,13 +22,13 @@ module mod_vtm
|
||||||
export module mod_model
|
export module mod_model
|
||||||
{
|
{
|
||||||
|
|
||||||
export module mod_transductortest
|
export module mod_transducertest
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
export type type_transductortest =
|
export type type_transducertest =
|
||||||
{
|
{
|
||||||
input : Array<mod_vtm.mod_model.mod_symbol.type_symbol>;
|
input : Array<mod_vtm.mod_model.mod_symbol.type_symbol>;
|
||||||
output : Array<mod_vtm.mod_model.mod_symbol.type_symbol>;
|
output : Array<mod_vtm.mod_model.mod_symbol.type_symbol>;
|
||||||
|
|
@ -44,7 +44,7 @@ module mod_vtm
|
||||||
input : Array<mod_vtm.mod_model.mod_symbol.type_symbol>,
|
input : Array<mod_vtm.mod_model.mod_symbol.type_symbol>,
|
||||||
output : Array<mod_vtm.mod_model.mod_symbol.type_symbol>
|
output : Array<mod_vtm.mod_model.mod_symbol.type_symbol>
|
||||||
)
|
)
|
||||||
: type_transductortest
|
: type_transducertest
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
"input": input,
|
"input": input,
|
||||||
|
|
@ -58,11 +58,11 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function input
|
export function input
|
||||||
(
|
(
|
||||||
transductortest : type_transductortest
|
transducertest : type_transducertest
|
||||||
)
|
)
|
||||||
: Array<mod_vtm.mod_model.mod_symbol.type_symbol>
|
: Array<mod_vtm.mod_model.mod_symbol.type_symbol>
|
||||||
{
|
{
|
||||||
return transductortest.input;
|
return transducertest.input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -71,22 +71,22 @@ module mod_vtm
|
||||||
*/
|
*/
|
||||||
export function pruefen
|
export function pruefen
|
||||||
(
|
(
|
||||||
transductortest : type_transductortest,
|
transducertest : type_transducertest,
|
||||||
accepted : boolean,
|
accepted : boolean,
|
||||||
output : Array<mod_vtm.mod_model.mod_symbol.type_symbol>
|
output : Array<mod_vtm.mod_model.mod_symbol.type_symbol>
|
||||||
)
|
)
|
||||||
: boolean
|
: boolean
|
||||||
{
|
{
|
||||||
if (transductortest.output.length !== output.length)
|
if (transducertest.output.length !== output.length)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let gleich : boolean = true;
|
let gleich : boolean = true;
|
||||||
for (let index : int = 0; index < transductortest.output.length; index += 1)
|
for (let index : int = 0; index < transducertest.output.length; index += 1)
|
||||||
{
|
{
|
||||||
if (! mod_vtm.mod_model.mod_symbol.vergleichen(transductortest.output[index], output[index]))
|
if (! mod_vtm.mod_model.mod_symbol.vergleichen(transducertest.output[index], output[index]))
|
||||||
{
|
{
|
||||||
gleich = false;
|
gleich = false;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -104,7 +104,7 @@ module mod_vtm
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
let summand : mod_spot.type_spot = mod_spot.von_direction(direction);
|
let summand : mod_spot.type_spot = mod_spot.from_direction(direction);
|
||||||
token.spot = mod_spot.add(token.spot, summand);
|
token.spot = mod_spot.add(token.spot, summand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Verrückte Turing-Maschinen — A turing complete game
|
* Verrückte Turing-Maschinen — A turing complete game
|
||||||
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
|
* Copyright (C) 2016-2018 Christian Fraß <vidofnir@folksprak.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -110,29 +110,29 @@ module mod_vtm
|
||||||
)
|
)
|
||||||
: void
|
: void
|
||||||
{
|
{
|
||||||
let erweitert : boolean = true;
|
let extended : boolean = true;
|
||||||
let liste : Array<{pruefer : (actuator : mod_actuator.type_actuator)=>boolean; erspotr : ()=>mod_actuator.type_actuator;}> = (
|
let liste : Array<{pruefer : (actuator : mod_actuator.type_actuator)=>boolean; erspotr : ()=>mod_actuator.type_actuator;}> = (
|
||||||
[]
|
[]
|
||||||
.concat
|
.concat
|
||||||
(
|
(
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"pruefer": (actuator) => (actuator.kind === "befoerderer"),
|
"pruefer": (actuator) => (actuator.kind === "conveyer"),
|
||||||
"erspotr": () => mod_actuator.mod_befoerderer.create_actuator(0),
|
"erspotr": () => mod_actuator.mod_conveyer.create_extended(0),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
.concat
|
.concat
|
||||||
(
|
(
|
||||||
mod_vtm.mod_helfer.sequence(erweitert ? 4 : 2).map
|
mod_vtm.mod_helfer.sequence(extended ? 4 : 2).map
|
||||||
(
|
(
|
||||||
symbol => (
|
symbol => (
|
||||||
{
|
{
|
||||||
"pruefer": (actuator) =>
|
"pruefer": (actuator) =>
|
||||||
{
|
{
|
||||||
if (actuator.kind === "schreiber")
|
if (actuator.kind === "writer")
|
||||||
{
|
{
|
||||||
return (mod_actuator.mod_schreiber.symbol_read(actuator.data) === symbol);
|
return (mod_actuator.mod_writer.symbol_read(actuator.data) === symbol);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -140,14 +140,14 @@ module mod_vtm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
"erspotr": () => mod_actuator.mod_schreiber.create_actuator(0, symbol)
|
"erspotr": () => mod_actuator.mod_writer.create_extended(0, symbol)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.concat
|
.concat
|
||||||
(
|
(
|
||||||
mod_vtm.mod_helfer.sequence(erweitert ? 2 : 1).map
|
mod_vtm.mod_helfer.sequence(extended ? 2 : 1).map
|
||||||
(
|
(
|
||||||
index =>
|
index =>
|
||||||
{
|
{
|
||||||
|
|
@ -157,12 +157,12 @@ module mod_vtm
|
||||||
{
|
{
|
||||||
"pruefer": (actuator) =>
|
"pruefer": (actuator) =>
|
||||||
{
|
{
|
||||||
if (actuator.kind === "leser")
|
if (actuator.kind === "reader")
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
(mod_actuator.mod_leser.symbol_links_read(actuator.data) === symbol_links)
|
(mod_actuator.mod_reader.symbol_links_read(actuator.data) === symbol_links)
|
||||||
&&
|
&&
|
||||||
(mod_actuator.mod_leser.symbol_rechts_read(actuator.data) === symbol_rechts)
|
(mod_actuator.mod_reader.symbol_rechts_read(actuator.data) === symbol_rechts)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -171,7 +171,7 @@ module mod_vtm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
"erspotr": () => mod_actuator.mod_leser.create_actuator(0, symbol_links, symbol_rechts)
|
"erspotr": () => mod_actuator.mod_reader.create_extended(0, symbol_links, symbol_rechts)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -181,8 +181,8 @@ module mod_vtm
|
||||||
(
|
(
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"pruefer": (actuator) => (actuator.kind === "verwerfer"),
|
"pruefer": (actuator) => (actuator.kind === "rejector"),
|
||||||
"erspotr": () => mod_actuator.mod_verwerfer.create_actuator(),
|
"erspotr": () => mod_actuator.mod_rejector.create_extended(),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
@ -266,7 +266,7 @@ module mod_vtm
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
* @throws {Error}
|
* @throws {Error}
|
||||||
*/
|
*/
|
||||||
export function erzeuger_finden
|
export function generator_finden
|
||||||
(
|
(
|
||||||
world : type_world
|
world : type_world
|
||||||
)
|
)
|
||||||
|
|
@ -278,7 +278,7 @@ module mod_vtm
|
||||||
world.tiles,
|
world.tiles,
|
||||||
(spot_, actuator) =>
|
(spot_, actuator) =>
|
||||||
{
|
{
|
||||||
if (actuator.kind === "erzeuger")
|
if (actuator.kind === "generator")
|
||||||
{
|
{
|
||||||
if (lib_errormonade.filled<mod_spot.type_spot>(spot))
|
if (lib_errormonade.filled<mod_spot.type_spot>(spot))
|
||||||
{
|
{
|
||||||
|
|
@ -325,15 +325,15 @@ module mod_vtm
|
||||||
let actuator : mod_actuator.type_actuator;
|
let actuator : mod_actuator.type_actuator;
|
||||||
if ((u === -groesse) && (v === 0))
|
if ((u === -groesse) && (v === 0))
|
||||||
{
|
{
|
||||||
actuator = mod_actuator.mod_erzeuger.create_actuator(0);
|
actuator = mod_actuator.mod_generator.create_extended(0);
|
||||||
}
|
}
|
||||||
else if ((u === +groesse) && (v === 0))
|
else if ((u === +groesse) && (v === 0))
|
||||||
{
|
{
|
||||||
actuator = mod_actuator.mod_annehmer.create_actuator();
|
actuator = mod_actuator.mod_acceptor.create_extended();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
actuator = mod_actuator.mod_verwerfer.create_actuator();
|
actuator = mod_actuator.mod_rejector.create_extended();
|
||||||
}
|
}
|
||||||
lib_hashmap.set(world.tiles, spot, actuator);
|
lib_hashmap.set(world.tiles, spot, actuator);
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue