Übersetzungen
This commit is contained in:
parent
ecbcb3c906
commit
322407c963
22
makefile
22
makefile
|
|
@ -1,5 +1,10 @@
|
||||||
alles: erzeugnis/vtm.html erzeugnis/vtm.css erzeugnis/aufgaben.dat.js erzeugnis/vtm.js
|
all: erzeugnis/vtm.html erzeugnis/vtm.css erzeugnis/aufgaben.dat.js erzeugnis/vtm.js
|
||||||
.PHONY: alles
|
.PHONY: all
|
||||||
|
|
||||||
|
clear:
|
||||||
|
@ echo "-- zurücksetzen …"
|
||||||
|
@ rm -f erzeugnis
|
||||||
|
.PHONY: clear
|
||||||
|
|
||||||
erzeugnis/vtm.html: quelldatein/manifestation/web/vtm.html
|
erzeugnis/vtm.html: quelldatein/manifestation/web/vtm.html
|
||||||
@ echo "-- Struktur …"
|
@ echo "-- Struktur …"
|
||||||
|
|
@ -11,10 +16,17 @@ erzeugnis/vtm.css: quelldatein/manifestation/web/vtm.css quelldatein/manifestati
|
||||||
@ mkdir -p erzeugnis
|
@ mkdir -p erzeugnis
|
||||||
@ cat quelldatein/manifestation/web/vtm.css quelldatein/manifestation/web/partie.css > erzeugnis/vtm.css
|
@ cat quelldatein/manifestation/web/vtm.css quelldatein/manifestation/web/partie.css > erzeugnis/vtm.css
|
||||||
|
|
||||||
erzeugnis/aufgaben.dat.js: quelldatein/daten/aufgaben.dat.js
|
erzeugnis/aufgaben.dat.js: \
|
||||||
|
quelldatein/daten/aufgaben.dat.js \
|
||||||
|
quelldatein/daten/zeichenketten/de.dat.js \
|
||||||
|
quelldatein/daten/zeichenketten/en.dat.js
|
||||||
@ echo "-- Daten …"
|
@ echo "-- Daten …"
|
||||||
@ mkdir -p erzeugnis
|
@ mkdir -p erzeugnis
|
||||||
@ cat quelldatein/daten/aufgaben.dat.js > erzeugnis/daten.js
|
@ cat \
|
||||||
|
quelldatein/daten/aufgaben.dat.js \
|
||||||
|
quelldatein/daten/zeichenketten/de.dat.js \
|
||||||
|
quelldatein/daten/zeichenketten/en.dat.js \
|
||||||
|
> erzeugnis/daten.js
|
||||||
|
|
||||||
erzeugnis/vtm.js: \
|
erzeugnis/vtm.js: \
|
||||||
quelldatein/basis/typen.ts \
|
quelldatein/basis/typen.ts \
|
||||||
|
|
@ -24,6 +36,7 @@ erzeugnis/vtm.js: \
|
||||||
quelldatein/helfer/vektor.ts \
|
quelldatein/helfer/vektor.ts \
|
||||||
quelldatein/helfer/hashmap.ts \
|
quelldatein/helfer/hashmap.ts \
|
||||||
quelldatein/helfer/xmlknoten.ts \
|
quelldatein/helfer/xmlknoten.ts \
|
||||||
|
quelldatein/helfer/uebersetzung.ts \
|
||||||
quelldatein/daten.ts \
|
quelldatein/daten.ts \
|
||||||
quelldatein/aufbau/richtung.ts \
|
quelldatein/aufbau/richtung.ts \
|
||||||
quelldatein/aufbau/symbol.ts \
|
quelldatein/aufbau/symbol.ts \
|
||||||
|
|
@ -66,6 +79,7 @@ erzeugnis/vtm.js: \
|
||||||
quelldatein/helfer/vektor.ts \
|
quelldatein/helfer/vektor.ts \
|
||||||
quelldatein/helfer/hashmap.ts \
|
quelldatein/helfer/hashmap.ts \
|
||||||
quelldatein/helfer/xmlknoten.ts \
|
quelldatein/helfer/xmlknoten.ts \
|
||||||
|
quelldatein/helfer/uebersetzung.ts \
|
||||||
quelldatein/daten.ts \
|
quelldatein/daten.ts \
|
||||||
quelldatein/aufbau/richtung.ts \
|
quelldatein/aufbau/richtung.ts \
|
||||||
quelldatein/aufbau/symbol.ts \
|
quelldatein/aufbau/symbol.ts \
|
||||||
|
|
|
||||||
|
|
@ -66,15 +66,12 @@ module mod_vtm_aufbau
|
||||||
*/
|
*/
|
||||||
public constructor
|
public constructor
|
||||||
(
|
(
|
||||||
aufgabe : schnittstelle_aufgabe,
|
aufgabe : schnittstelle_aufgabe
|
||||||
welt : klasse_welt = klasse_welt.blanko()
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.aufgabe = aufgabe;
|
this.aufgabe = aufgabe;
|
||||||
this.welt = welt;
|
this.welt_leeren(false);
|
||||||
this.figur = (new klasse_nichts<klasse_figur>());
|
this.zuruecksetzen(false);
|
||||||
this.testindex = (new klasse_nichts<int>());
|
|
||||||
this.modus = modus_initial;
|
|
||||||
this.lauscher = {
|
this.lauscher = {
|
||||||
"aenderung_aufgabe": [],
|
"aenderung_aufgabe": [],
|
||||||
"aenderung_welt": [],
|
"aenderung_welt": [],
|
||||||
|
|
@ -125,6 +122,42 @@ module mod_vtm_aufbau
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
public welt_leeren(bescheid_geben : boolean = true) : void
|
||||||
|
{
|
||||||
|
this.welt = klasse_welt.blanko();
|
||||||
|
if (bescheid_geben)
|
||||||
|
{
|
||||||
|
this.benachrichtigen("aenderung_welt", {});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// nichts tun
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
public zuruecksetzen(bescheid_geben : boolean = true) : void
|
||||||
|
{
|
||||||
|
this.figur = (new klasse_nichts<klasse_figur>());
|
||||||
|
this.testindex = (new klasse_nichts<int>());
|
||||||
|
this.modus = modus_initial;
|
||||||
|
if (bescheid_geben)
|
||||||
|
{
|
||||||
|
this.benachrichtigen("aenderung_figur", {});
|
||||||
|
this.benachrichtigen("aenderung_modus", {});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// nichts tun
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
|
|
@ -140,9 +173,8 @@ module mod_vtm_aufbau
|
||||||
public aufgabe_setzen(aufgabe : schnittstelle_aufgabe) : void
|
public aufgabe_setzen(aufgabe : schnittstelle_aufgabe) : void
|
||||||
{
|
{
|
||||||
this.aufgabe = aufgabe;
|
this.aufgabe = aufgabe;
|
||||||
this.welt = klasse_welt.blanko();
|
this.welt_leeren();
|
||||||
this.benachrichtigen("aenderung_aufgabe", {});
|
this.benachrichtigen("aenderung_aufgabe", {});
|
||||||
this.benachrichtigen("aenderung_welt", {});
|
|
||||||
this.zuruecksetzen();
|
this.zuruecksetzen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -174,19 +206,6 @@ module mod_vtm_aufbau
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
|
||||||
*/
|
|
||||||
public zuruecksetzen() : void
|
|
||||||
{
|
|
||||||
this.figur = (new klasse_nichts<klasse_figur>());
|
|
||||||
this.testindex = (new klasse_nichts<int>());
|
|
||||||
this.modus = modus_initial;
|
|
||||||
this.benachrichtigen("aenderung_figur", {});
|
|
||||||
this.benachrichtigen("aenderung_modus", {});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kcf <vidofnir@folksprak.org>
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -160,18 +160,18 @@ module mod_vtm_aufbau
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
let index : int;
|
let index_alt : schnittstelle_fehlermonade<int>;
|
||||||
let aktor_alt_ : schnittstelle_fehlermonade<schnittstelle_aktor> = this.felder.holen(stelle);
|
let aktor_alt_ : schnittstelle_fehlermonade<schnittstelle_aktor> = this.felder.holen(stelle);
|
||||||
if (aktor_alt_.ist_schlicht)
|
if (aktor_alt_.ist_schlicht)
|
||||||
{
|
{
|
||||||
let aktor_alt : schnittstelle_aktor = aktor_alt_.lesen();
|
let aktor_alt : schnittstelle_aktor = aktor_alt_.lesen();
|
||||||
let gefunden : boolean = liste.some
|
let gefunden : boolean = liste.some
|
||||||
(
|
(
|
||||||
(eintrag, index_) =>
|
(eintrag, index) =>
|
||||||
{
|
{
|
||||||
if (eintrag.pruefer(aktor_alt))
|
if (eintrag.pruefer(aktor_alt))
|
||||||
{
|
{
|
||||||
index = index_;
|
index_alt = (new klasse_schlicht<int>(index));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -183,9 +183,7 @@ module mod_vtm_aufbau
|
||||||
;
|
;
|
||||||
if (! gefunden)
|
if (! gefunden)
|
||||||
{
|
{
|
||||||
let meldung : string = ("Aktor nicht gefunden");
|
index_alt = (new klasse_nichts<int>());
|
||||||
// throw (new Error(meldung));
|
|
||||||
console.warn(meldung);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -196,10 +194,20 @@ module mod_vtm_aufbau
|
||||||
{
|
{
|
||||||
let meldung : string = "kein Aktor gesetzt";
|
let meldung : string = "kein Aktor gesetzt";
|
||||||
// console.warn(meldung);
|
// console.warn(meldung);
|
||||||
index = 0;
|
index_alt = (new klasse_schlicht<int>(0));
|
||||||
|
}
|
||||||
|
if (index_alt.ist_schlicht())
|
||||||
|
{
|
||||||
|
let index_neu : int = mod_vtm_helfer.mod(index_alt.lesen() + (umgekehrt ? -1 : +1), liste.length);
|
||||||
|
let aktor_neu : schnittstelle_aktor = liste[index_neu].ersteller();
|
||||||
|
this.feld_setzen(stelle, aktor_neu);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let meldung : string = ("Aktor nicht gefunden");
|
||||||
|
// throw (new Error(meldung));
|
||||||
|
console.warn(meldung);
|
||||||
}
|
}
|
||||||
let aktor_neu : schnittstelle_aktor = liste[mod_vtm_helfer.mod(index + (umgekehrt ? -1 : +1), liste.length)].ersteller();
|
|
||||||
this.feld_setzen(stelle, aktor_neu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ jsonp_behandlung(
|
||||||
"art": "akzeptor",
|
"art": "akzeptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Abwechslung erfreuet",
|
"titel": "Abwechslung erfreuet",
|
||||||
"text": "Annehmen genau dann wenn: Die Farben der Eingabe (${s0} und ${s1}) sich immer abwechseln",
|
"text": "annehmen genau dann wenn: Die Farben der Eingabe (${s0} / ${s1}) sich immer abwechseln",
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"eingabe": [],
|
"eingabe": [],
|
||||||
|
|
@ -98,7 +98,7 @@ jsonp_behandlung(
|
||||||
"art": "transduktor",
|
"art": "transduktor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Ans Ende",
|
"titel": "Ans Ende",
|
||||||
"text": "die Eingabe, aber mit dem ersten Symbol am Ende",
|
"text": "die Eingabe (${s0} / ${s1}), aber mit dem ersten Symbol am Ende",
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"eingabe": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
"eingabe": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
||||||
|
|
@ -110,12 +110,16 @@ jsonp_behandlung(
|
||||||
{
|
{
|
||||||
"art": "transduktor",
|
"art": "transduktor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "An den Anfang",
|
"titel": "Tauschen",
|
||||||
"text": "die Eingabe, aber mit dem letzten Symbol am Anfang",
|
"text": "aus der Eingabe (${s0} / ${s1}) alle ${s0} durch ${s2} ersetzen und alle ${s1} durch ${s3}",
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"eingabe": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
"eingabe": [0,1,1,0],
|
||||||
"ausgabe": [1,0,0,1,1,1,0,1,0,1,1,1,0]
|
"ausgabe": [2,3,3,2]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"eingabe": [0,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0],
|
||||||
|
"ausgabe": [2,3,2,3,2,3,3,2,2,2,2,3,2,3,3,2]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -124,7 +128,7 @@ jsonp_behandlung(
|
||||||
"art": "transduktor",
|
"art": "transduktor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Wählerisch",
|
"titel": "Wählerisch",
|
||||||
"text": "aus der Eingabe alle ${s0} entfernen und alle ${s1} beibehalten",
|
"text": "aus der Eingabe (${s0} / ${s1}) alle ${s0} entfernen und alle ${s1} beibehalten",
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"eingabe": [0,0,0,1,0],
|
"eingabe": [0,0,0,1,0],
|
||||||
|
|
@ -166,7 +170,7 @@ jsonp_behandlung(
|
||||||
"art": "akzeptor",
|
"art": "akzeptor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Alpha und Omega",
|
"titel": "Alpha und Omega",
|
||||||
"text": "Eingaben, die mit den gleichen Symbolen anfangen und enden",
|
"text": "Eingaben(${s0} / ${s1}), die mit den gleichen Symbolen anfangen und enden",
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"eingabe": [],
|
"eingabe": [],
|
||||||
|
|
@ -198,16 +202,12 @@ jsonp_behandlung(
|
||||||
{
|
{
|
||||||
"art": "transduktor",
|
"art": "transduktor",
|
||||||
"parameter": {
|
"parameter": {
|
||||||
"titel": "Tauschen",
|
"titel": "An den Anfang",
|
||||||
"text": "alle ${s0} durch ${s2} ersetzen und alle ${s1} durch ${s3}",
|
"text": "die Eingabe (${s0} / ${s1}), aber mit dem letzten Symbol am Anfang",
|
||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"eingabe": [0,1,1,0],
|
"eingabe": [0,0,1,1,1,0,1,0,1,1,1,0,1],
|
||||||
"ausgabe": [2,3,3,2]
|
"ausgabe": [1,0,0,1,1,1,0,1,0,1,1,1,0]
|
||||||
},
|
|
||||||
{
|
|
||||||
"eingabe": [0,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0],
|
|
||||||
"ausgabe": [2,3,2,3,2,3,3,2,2,2,2,3,2,3,3,2]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
51
quelldatein/daten/zeichenketten/de.dat.js
Normal file
51
quelldatein/daten/zeichenketten/de.dat.js
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
jsonp_behandlung(
|
||||||
|
{
|
||||||
|
"schluessel": "zeichenketten-de",
|
||||||
|
"wert": {
|
||||||
|
"allgemein.titel": "Verrückte Turing-Maschinen",
|
||||||
|
"allgemein.hilfe": "Hilfe",
|
||||||
|
"allgemein.spiel": "Spiel",
|
||||||
|
"aufbau.figur.worter.singular": "Figur",
|
||||||
|
"aufbau.figur.worter.plural": "Figuren",
|
||||||
|
"aufbau.aktoren.woerter.singular": "Aktor",
|
||||||
|
"aufbau.aktoren.woerter.plural": "Aktoren",
|
||||||
|
"aufbau.aktoren.arten.erzeuger.name": "Eingang",
|
||||||
|
"aufbau.aktoren.arten.annehmer.name": "Ausgang",
|
||||||
|
"aufbau.aktoren.arten.verwerfer.name": "Abweiser",
|
||||||
|
"aufbau.aktoren.arten.befoerderer.name": "Schieber",
|
||||||
|
"aufbau.aktoren.arten.schreiber.name": "Schreiber",
|
||||||
|
"aufbau.aktoren.arten.leser.name": "Weiche",
|
||||||
|
"aufbau.aufgaben.woerter.singular": "Aufgabe",
|
||||||
|
"aufbau.aufgaben.woerter.plural": "Aufgaben",
|
||||||
|
"aufbau.aufgaben.arten.akzeptor.name": "Akzeptor",
|
||||||
|
"aufbau.aufgaben.arten.akzeptor.kuerzel": "AKZ",
|
||||||
|
"aufbau.aufgaben.arten.transduktor.name": "Transduktor",
|
||||||
|
"aufbau.aufgaben.arten.transduktor.kuerzel": "TRA",
|
||||||
|
"steuerung.auswaehlen": "Aufgabe auswählen",
|
||||||
|
"steuerung.schritt": "Nächster Schritt",
|
||||||
|
"steuerung.test": "Ablaufen",
|
||||||
|
"steuerung.anhalten": "Anhalten",
|
||||||
|
"steuerung.bearbeiten": "Bearbeiten",
|
||||||
|
"steuerung.leeren": "Leeren",
|
||||||
|
"hilfe.einleitung": "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",
|
||||||
|
"hilfe.steuerung.titel": "Steuerung",
|
||||||
|
"hilfe.steuerung.eintrag1": "Links-Klick/Rechts-Klick: Feldtyp wechseln",
|
||||||
|
"hilfe.steuerung.eintrag2": "Mausrad-Drehen: Feld drehen",
|
||||||
|
"hilfe.figur.satz1": "Die Figur kann durch Aktoren auf dem Spielplan umher bewegt werden und wird als schwarzer Kreis dargestellt.",
|
||||||
|
"hilfe.figur.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).",
|
||||||
|
"hilfe.aktoren.einleitung": "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:",
|
||||||
|
"hilfe.aktoren.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 Spielfigur auf den Plan gesetzt und bewegt sich anschließend in die angezeigte Richtung.",
|
||||||
|
"hilfe.aktoren.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.",
|
||||||
|
"hilfe.aktoren.verwerfer": "Jedes leere Feld beendet den Lauf der Figur mit einer Abweisung des aktuellen Band-Inhalts.",
|
||||||
|
"hilfe.aktoren.befoerderer": "Dieser Aktor dient dazu die Figur von einem Feld zu einem benachbarten zu befördern ohne dabei den Band-Inhalt zu ändern.",
|
||||||
|
"hilfe.aktoren.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.",
|
||||||
|
"hilfe.aktoren.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.",
|
||||||
|
"hilfe.aufgaben.einleitung": "Ziel ist das Lösen von bestimmten Aufgaben. Dabei wird zwischen zwei Arten von Aufgaben unterschieden:",
|
||||||
|
"hilfe.aufgaben.akzeptor.erklaerung": "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.",
|
||||||
|
"hilfe.aufgaben.akzeptor.beispiel": "Beispiel: Genau dann akzeptieren, wenn das Band mindestens zwei mal rot enthält.",
|
||||||
|
"hilfe.aufgaben.transduktor.erklaerung": "Bei einer Transduktor-Aufgabe soll eine Ausgabe erzeugt werden, die in einer bestimmten Beziehung zur vorgefundenen Eingabe steht, also sozusagen eine Funktion angewendet werden.",
|
||||||
|
"hilfe.aufgaben.transduktor.beispiel": "Beispiel: Die Eingabe zwei mal wiederholt."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
51
quelldatein/daten/zeichenketten/en.dat.js
Normal file
51
quelldatein/daten/zeichenketten/en.dat.js
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
jsonp_behandlung(
|
||||||
|
{
|
||||||
|
"schluessel": "zeichenketten-en",
|
||||||
|
"wert": {
|
||||||
|
"allgemein.titel": "Crazy Turing Machines",
|
||||||
|
"allgemein.hilfe": "Help",
|
||||||
|
"allgemein.spiel": "Game",
|
||||||
|
"aufbau.figur.worter.singular": "token",
|
||||||
|
"aufbau.figur.worter.plural": "tokens",
|
||||||
|
"aufbau.aktoren.woerter.singular": "actor",
|
||||||
|
"aufbau.aktoren.woerter.plural": "actors",
|
||||||
|
"aufbau.aktoren.arten.erzeuger.name": "entrance",
|
||||||
|
"aufbau.aktoren.arten.annehmer.name": "exit",
|
||||||
|
"aufbau.aktoren.arten.verwerfer.name": "dropper",
|
||||||
|
"aufbau.aktoren.arten.befoerderer.name": "conveyer",
|
||||||
|
"aufbau.aktoren.arten.schreiber.name": "writer",
|
||||||
|
"aufbau.aktoren.arten.leser.name": "switch",
|
||||||
|
"aufbau.aufgaben.woerter.singular": "task",
|
||||||
|
"aufbau.aufgaben.woerter.plural": "tasks",
|
||||||
|
"aufbau.aufgaben.arten.akzeptor.name": "acceptor",
|
||||||
|
"aufbau.aufgaben.arten.akzeptor.kuerzel": "ACC",
|
||||||
|
"aufbau.aufgaben.arten.transduktor.name": "transductor",
|
||||||
|
"aufbau.aufgaben.arten.transduktor.kuerzel": "TRA",
|
||||||
|
"steuerung.auswaehlen": "choose task",
|
||||||
|
"steuerung.schritt": "next step",
|
||||||
|
"steuerung.test": "run",
|
||||||
|
"steuerung.anhalten": "stop",
|
||||||
|
"steuerung.bearbeiten": "edit",
|
||||||
|
"steuerung.leeren": "clear",
|
||||||
|
"hilfe.einleitung": "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",
|
||||||
|
"hilfe.steuerung.titel": "controls",
|
||||||
|
"hilfe.steuerung.eintrag1": "left click/right click: change tile type",
|
||||||
|
"hilfe.steuerung.eintrag2": "rotate mousewheel: rotate tile",
|
||||||
|
"hilfe.figur.satz1": "The token can be moved around the board by actors and it is displayed as a black circle.",
|
||||||
|
"hilfe.figur.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).",
|
||||||
|
"hilfe.aktoren.einleitung": "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:",
|
||||||
|
"hilfe.aktoren.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.",
|
||||||
|
"hilfe.aktoren.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.",
|
||||||
|
"hilfe.aktoren.verwerfer": "Every empty tile will cancel the tokens run with a rejection of the current tape content.",
|
||||||
|
"hilfe.aktoren.befoerderer": "This actor is used for moving the token to neighbour tile without changing the tape content.",
|
||||||
|
"hilfe.aktoren.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.",
|
||||||
|
"hilfe.aktoren.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.",
|
||||||
|
"hilfe.aufgaben.einleitung": "The goal is to solve certain tasks. Two kind of tasks are distinguished:",
|
||||||
|
"hilfe.aufgaben.akzeptor.erklaerung": "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.",
|
||||||
|
"hilfe.aufgaben.akzeptor.beispiel": "Example: Accept then and only then, if the tape contains at least two red symbols.",
|
||||||
|
"hilfe.aufgaben.transduktor.erklaerung": "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.",
|
||||||
|
"hilfe.aufgaben.transduktor.beispiel": "Example: The input repeated two times."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
@ -78,11 +78,91 @@ function aufgaben_eintragen(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_
|
||||||
*/
|
*/
|
||||||
function haupt() : void
|
function haupt() : void
|
||||||
{
|
{
|
||||||
let aufbau : mod_vtm_aufbau.klasse_partie;
|
// uebersetzungen
|
||||||
let aufgabe_laden = function (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe) : void {aufbau.aufgabe_setzen(aufgabe);};
|
{
|
||||||
aufgaben_eintragen(aufgabe_laden);
|
let sprachen : Array<string> = navigator.languages.map(sprache => sprache);
|
||||||
aufbau = (new mod_vtm_aufbau.klasse_partie(mod_vtm_aufbau.aufgabe_holen(0)));
|
let sprache_nativ : string = "de";
|
||||||
(new mod_vtm_manifestation.klasse_web_partie(aufbau, document.querySelector("#bereich_mitte"))).einrichten();
|
if (! sprachen[""+"includes"](sprache_nativ))
|
||||||
|
sprachen.push(sprache_nativ);
|
||||||
|
mod_vtm_helfer.uebersetzung_einrichten(sprachen);
|
||||||
|
mod_vtm_helfer.uebersetzung_anwenden(document);
|
||||||
|
}
|
||||||
|
// hilfe
|
||||||
|
{
|
||||||
|
// einleitung
|
||||||
|
{
|
||||||
|
document.querySelector("#hilfe_einleitung").innerHTML = (
|
||||||
|
mod_vtm_helfer.uebersetzung_holen
|
||||||
|
(
|
||||||
|
"hilfe.einleitung",
|
||||||
|
{
|
||||||
|
"manufacturia": "<a href=\"http://www.kongregate.com/games/PleasingFungus/manufactoria\">Manufacturia</a>",
|
||||||
|
"crazy_machines": "<a href=\"http://www.crazy-machines.com/\">Crazy Machines</a>",
|
||||||
|
"world_of_goo": "<a href=\"http://worldofgoo.com/\">World of Goo</a>",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// aktoren
|
||||||
|
{
|
||||||
|
// arten
|
||||||
|
{
|
||||||
|
let von_x : float = -0.5;
|
||||||
|
let von_y : float = -0.5;
|
||||||
|
let bis_x : float = +0.5;
|
||||||
|
let bis_y : float = +0.5;
|
||||||
|
let breite : float = 80;
|
||||||
|
let hoehe : float = 80;
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"aufbau": (new mod_vtm_aufbau.klasse_erzeuger()),
|
||||||
|
"kontext": document.querySelector("#hilfe_aktoren_aktor_erzeuger"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aufbau": (new mod_vtm_aufbau.klasse_annehmer()),
|
||||||
|
"kontext": document.querySelector("#hilfe_aktoren_aktor_annehmer"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aufbau": (new mod_vtm_aufbau.klasse_verwerfer()),
|
||||||
|
"kontext": document.querySelector("#hilfe_aktoren_aktor_verwerfer"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aufbau": (new mod_vtm_aufbau.klasse_befoerderer()),
|
||||||
|
"kontext": document.querySelector("#hilfe_aktoren_aktor_befoerderer"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aufbau": (new mod_vtm_aufbau.klasse_schreiber()),
|
||||||
|
"kontext": document.querySelector("#hilfe_aktoren_aktor_schreiber"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aufbau": (new mod_vtm_aufbau.klasse_leser()),
|
||||||
|
"kontext": document.querySelector("#hilfe_aktoren_aktor_leser"),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
.forEach
|
||||||
|
(
|
||||||
|
eintrag =>
|
||||||
|
{
|
||||||
|
let manifestor = (new mod_vtm_manifestation.klasse_svg_aktor(eintrag.aufbau, mod_vtm_aufbau.stelle_null()));
|
||||||
|
let xmlknoten : mod_vtm_helfer.schnittstelle_xmlknoten = mod_vtm_manifestation.svg_wurzel(von_x, von_y, bis_x, bis_y, breite, hoehe, [manifestor.darstellen()]);
|
||||||
|
eintrag.kontext.querySelector(".hilfe_aktoren_aktor_bild").innerHTML = xmlknoten.darstellen();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// spiel
|
||||||
|
{
|
||||||
|
let aufbau : mod_vtm_aufbau.klasse_partie;
|
||||||
|
aufgaben_eintragen
|
||||||
|
(
|
||||||
|
function (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe) : void {aufbau.aufgabe_setzen(aufgabe);}
|
||||||
|
)
|
||||||
|
;
|
||||||
|
aufbau = (new mod_vtm_aufbau.klasse_partie(mod_vtm_aufbau.aufgabe_holen(0)));
|
||||||
|
(new mod_vtm_manifestation.klasse_web_partie(aufbau, document.querySelector("#bereich_mitte"))).einrichten();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
172
quelldatein/helfer/uebersetzung.ts
Normal file
172
quelldatein/helfer/uebersetzung.ts
Normal file
|
|
@ -0,0 +1,172 @@
|
||||||
|
/*
|
||||||
|
* 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_helfer
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
var _uebersetzung_sprachstapel : Array<string>;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export var _uebersetzung_daten : {[sprache : string] : {[schluessel : string] : string}} = {};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function uebersetzung_einrichten(sprachen : Array<string>) : void
|
||||||
|
{
|
||||||
|
_uebersetzung_sprachstapel = [];
|
||||||
|
sprachen.forEach
|
||||||
|
(
|
||||||
|
sprache =>
|
||||||
|
{
|
||||||
|
let zeichenketten_roh_ : schnittstelle_fehlermonade<any> = mod_vtm_daten.lesen("zeichenketten-" + sprache);
|
||||||
|
if (zeichenketten_roh_.ist_schlicht())
|
||||||
|
{
|
||||||
|
let zeichenketten_roh : {[schluessel : string] : string} = (<{[schluessel : string] : string}>(zeichenketten_roh_.lesen()));
|
||||||
|
_uebersetzung_daten[sprache] = {};
|
||||||
|
for (let schluessel in zeichenketten_roh)
|
||||||
|
{
|
||||||
|
_uebersetzung_daten[sprache][schluessel] = (<string>(zeichenketten_roh[schluessel]));
|
||||||
|
}
|
||||||
|
_uebersetzung_sprachstapel.push(sprache);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let meldung : string = ("Zeichenketten für Sprache '" + sprache + "' konnten nicht geladen werden");
|
||||||
|
console.warn(meldung);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
function uebersetzung_lesen(sprache : string, schluessel : string) : schnittstelle_fehlermonade<string>
|
||||||
|
{
|
||||||
|
if (sprache in _uebersetzung_daten)
|
||||||
|
{
|
||||||
|
let satz : {[schluessel : string] : string} = _uebersetzung_daten[sprache];
|
||||||
|
if (schluessel in satz)
|
||||||
|
{
|
||||||
|
return (new klasse_schlicht<string>(satz[schluessel]));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let meldung : string = ("keine Zeichenketten für Schlüssel '" + schluessel + "' in Sprache '" + sprache + "'");
|
||||||
|
console.warn(meldung);
|
||||||
|
return (new klasse_nichts<string>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let meldung : string = ("keine Zeichenketten für Sprache '" + sprache + "'");
|
||||||
|
console.warn(meldung);
|
||||||
|
return (new klasse_nichts<string>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function uebersetzung_holen(schluessel : string, vars : {[name : string] : string} = {}) : string
|
||||||
|
{
|
||||||
|
let ergebnis : schnittstelle_fehlermonade<string> = (new klasse_nichts<string>());
|
||||||
|
let gefunden : boolean = (
|
||||||
|
_uebersetzung_sprachstapel
|
||||||
|
.some
|
||||||
|
(
|
||||||
|
sprache =>
|
||||||
|
{
|
||||||
|
let ergebnis_ : schnittstelle_fehlermonade<string> = uebersetzung_lesen(sprache, schluessel);
|
||||||
|
if (ergebnis_.ist_schlicht())
|
||||||
|
{
|
||||||
|
ergebnis = ergebnis_;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (gefunden)
|
||||||
|
{
|
||||||
|
let str : string = ergebnis.lesen();
|
||||||
|
for (let name in vars)
|
||||||
|
{
|
||||||
|
let muster : RegExp = (new RegExp("!var:" + name));
|
||||||
|
let wert : string = vars[name];
|
||||||
|
str = str.replace(muster, wert);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ("{" + schluessel + "}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
export function uebersetzung_anwenden(kontext : DocumentFragment) : void
|
||||||
|
{
|
||||||
|
let muster : RegExp = (new RegExp("^!translate:([a-z0-9\.]*)$"));
|
||||||
|
document.querySelectorAll("*")[""+"forEach"]
|
||||||
|
(
|
||||||
|
element =>
|
||||||
|
{
|
||||||
|
if (element.childElementCount === 0)
|
||||||
|
{
|
||||||
|
let inhalt : string = element.textContent;
|
||||||
|
let fund : any = muster.exec(inhalt);
|
||||||
|
if (fund != null)
|
||||||
|
{
|
||||||
|
let schluessel : string = fund[1];
|
||||||
|
let inhalt_ : string = uebersetzung_holen(schluessel);
|
||||||
|
element.textContent = inhalt_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// nichts tun
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// nichts tun
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -107,6 +107,7 @@ module mod_vtm_manifestation
|
||||||
(angaben) =>
|
(angaben) =>
|
||||||
{
|
{
|
||||||
this.erneuern_modus();
|
this.erneuern_modus();
|
||||||
|
this.erneuern_knoepfe();
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
@ -302,7 +303,16 @@ module mod_vtm_manifestation
|
||||||
{
|
{
|
||||||
this.anhalten();
|
this.anhalten();
|
||||||
this.aufbau.zuruecksetzen();
|
this.aufbau.zuruecksetzen();
|
||||||
this.erneuern_knoepfe();
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kcf <vidofnir@folksprak.org>
|
||||||
|
*/
|
||||||
|
private leeren() : void
|
||||||
|
{
|
||||||
|
this.aufbau.welt_leeren();
|
||||||
|
this.aufbau.zuruecksetzen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -427,6 +437,16 @@ module mod_vtm_manifestation
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
// Leeren
|
||||||
|
document.querySelector("#knopf_leeren").addEventListener
|
||||||
|
(
|
||||||
|
"click",
|
||||||
|
event =>
|
||||||
|
{
|
||||||
|
this.leeren();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,11 @@ a:hover
|
||||||
color: hsl(120, 50%, 75%);
|
color: hsl(120, 50%, 75%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
li
|
||||||
|
{
|
||||||
|
list-style-type: "» ";
|
||||||
|
}
|
||||||
|
|
||||||
body > header
|
body > header
|
||||||
{
|
{
|
||||||
font-size: 200%;
|
font-size: 200%;
|
||||||
|
|
@ -105,24 +110,59 @@ body > header
|
||||||
#knoepfe.initial > #knopf_testen {}
|
#knoepfe.initial > #knopf_testen {}
|
||||||
#knoepfe.initial > #knopf_anhalten {display: none;}
|
#knoepfe.initial > #knopf_anhalten {display: none;}
|
||||||
#knoepfe.initial > #knopf_bearbeiten {display: none;}
|
#knoepfe.initial > #knopf_bearbeiten {display: none;}
|
||||||
|
#knoepfe.initial > #knopf_leeren {}
|
||||||
|
|
||||||
#knoepfe.ungewiss_laufend > #knopf_schritt {display: none;}
|
#knoepfe.ungewiss_laufend > #knopf_schritt {display: none;}
|
||||||
#knoepfe.ungewiss_laufend > #knopf_testen {display: none;}
|
#knoepfe.ungewiss_laufend > #knopf_testen {display: none;}
|
||||||
#knoepfe.ungewiss_laufend > #knopf_anhalten {}
|
#knoepfe.ungewiss_laufend > #knopf_anhalten {}
|
||||||
#knoepfe.ungewiss_laufend > #knopf_bearbeiten {display: none;}
|
#knoepfe.ungewiss_laufend > #knopf_bearbeiten {display: none;}
|
||||||
|
#knoepfe.ungewiss_laufend > #knopf_leeren {display: none;}
|
||||||
|
|
||||||
#knoepfe.ungewiss_stehend > #knopf_schritt {}
|
#knoepfe.ungewiss_stehend > #knopf_schritt {}
|
||||||
#knoepfe.ungewiss_stehend > #knopf_testen {}
|
#knoepfe.ungewiss_stehend > #knopf_testen {}
|
||||||
#knoepfe.ungewiss_stehend > #knopf_anhalten {display: none;}
|
#knoepfe.ungewiss_stehend > #knopf_anhalten {display: none;}
|
||||||
#knoepfe.ungewiss_stehend > #knopf_bearbeiten {}
|
#knoepfe.ungewiss_stehend > #knopf_bearbeiten {}
|
||||||
|
#knoepfe.ungewiss_stehend > #knopf_leeren {display: none;}
|
||||||
|
|
||||||
#knoepfe.fertig > #knopf_schritt {display: none;}
|
#knoepfe.fertig > #knopf_schritt {display: none;}
|
||||||
#knoepfe.fertig > #knopf_testen {display: none;}
|
#knoepfe.fertig > #knopf_testen {display: none;}
|
||||||
#knoepfe.fertig > #knopf_anhalten {display: none;}
|
#knoepfe.fertig > #knopf_anhalten {display: none;}
|
||||||
#knoepfe.fertig > #knopf_bearbeiten {}
|
#knoepfe.fertig > #knopf_bearbeiten {}
|
||||||
|
#knoepfe.fertig > #knopf_leeren {display: none;}
|
||||||
|
|
||||||
#aufgabe_status
|
#aufgabe_status
|
||||||
{
|
{
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.hilfe_aktoren_aktor
|
||||||
|
{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hilfe_aktoren_aktor > .hilfe_aktoren_aktor_name
|
||||||
|
{
|
||||||
|
flex-basis: 100%;
|
||||||
|
flex-shrink: 0;
|
||||||
|
flex-grow: 1;
|
||||||
|
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hilfe_aktoren_aktor > .hilfe_aktoren_aktor_bild
|
||||||
|
{
|
||||||
|
flex-basis: 10%;
|
||||||
|
flex-shrink: 1;
|
||||||
|
flex-grow: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hilfe_aktoren_aktor > .hilfe_aktoren_aktor_text
|
||||||
|
{
|
||||||
|
flex-basis: 90%;
|
||||||
|
flex-shrink: 1;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,22 +8,25 @@
|
||||||
<link rel="stylesheet" type="text/css" href="vtm.css"/>
|
<link rel="stylesheet" type="text/css" href="vtm.css"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>Verrückte Turing-Maschinen</header>
|
<header>!translate:allgemein.titel</header>
|
||||||
<label for="radio_hilfe"><a>Hilfe</a></label><input type="radio" name="tab" id="radio_hilfe"/>
|
<label for="radio_hilfe"><a>!translate:allgemein.hilfe</a></label><input type="radio" name="tab" id="radio_hilfe" checked="checked"/>
|
||||||
<label for="radio_spiel"><a>Spiel</a></label><input type="radio" name="tab" id="radio_spiel" checked="checked"/>
|
<label for="radio_spiel"><a>!translate:allgemein.spiel</a></label><input type="radio" name="tab" id="radio_spiel"/>
|
||||||
|
<!--
|
||||||
<hr/>
|
<hr/>
|
||||||
|
-->
|
||||||
<div id="spiel">
|
<div id="spiel">
|
||||||
<div class="bereich" id="bereich_links">
|
<div class="bereich" id="bereich_links">
|
||||||
<label for="aufgabe_auswahl">Aufgabe auswählen</label>
|
<label for="aufgabe_auswahl">!translate:steuerung.auswaehlen</label>
|
||||||
<select id="aufgabe_auswahl"></select>
|
<select id="aufgabe_auswahl"></select>
|
||||||
<p id="aufgabe_text"></p>
|
<p id="aufgabe_text"></p>
|
||||||
<hr/>
|
<hr/>
|
||||||
<div id="aufgabe_status"></div>
|
<div id="aufgabe_status"></div>
|
||||||
<div id="knoepfe">
|
<div id="knoepfe">
|
||||||
<button id="knopf_schritt">Nächster Schritt</button>
|
<button id="knopf_schritt">!translate:steuerung.schritt</button>
|
||||||
<button id="knopf_testen">Ablaufen</button>
|
<button id="knopf_testen">!translate:steuerung.test</button>
|
||||||
<button id="knopf_anhalten">Anhalten</button>
|
<button id="knopf_anhalten">!translate:steuerung.anhalten</button>
|
||||||
<button id="knopf_bearbeiten">Bearbeiten</button>
|
<button id="knopf_bearbeiten">!translate:steuerung.bearbeiten</button>
|
||||||
|
<button id="knopf_leeren">!translate:steuerung.leeren</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bereich" id="bereich_mitte">
|
<div class="bereich" id="bereich_mitte">
|
||||||
|
|
@ -32,62 +35,68 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="hilfe">
|
<div id="hilfe">
|
||||||
<p>Dieses Spiel ist inspiriert von <a href="http://www.kongregate.com/games/PleasingFungus/manufactoria">Manufacturia</a>, <a href="http://www.crazy-machines.com/">Crazy Machines</a>, <a href="http://worldofgoo.com/">World of Goo</a> … und auch von unvergessenen Stunden Hardware-Praktikum im Informatik-Studium :P</p>
|
<p id="hilfe_einleitung"></p>
|
||||||
<section>
|
<section class="bereich">
|
||||||
<header>Steuerung</header>
|
<header id="hilfe_steuerung_titel">!translate:hilfe.steuerung.titel</header>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Links-Klick/Rechts-Klick: Feldtyp wechseln</li>
|
<li id="hilfe_steuerung_eintrag1">!translate:hilfe.steuerung.eintrag1</li>
|
||||||
<li>Mausrad-Drehen: Feld drehen</li>
|
<li id="hilfe_steuerung_eintrag2">!translate:hilfe.steuerung.eintrag2</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section class="bereich">
|
||||||
<header>Figur</header>
|
<header id="hilfe_figur_titel">!translate:aufbau.figur.worter.singular</header>
|
||||||
<p>Die Figur kann durch Aktoren auf dem Spielplan umher bewegt werden und wird als schwarzer Kreis dargestellt.</p>
|
<p id="hilfe_figur_satz1">!translate:hilfe.figur.satz1</p>
|
||||||
<p>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).</p>
|
<p id="hilfe_figur_satz2">!translate:hilfe.figur.satz2</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section class="bereich">
|
||||||
<header>Aktoren</header>
|
<header id="hilfe_aktoren_titel">!translate:aufbau.aktoren.woerter.plural</header>
|
||||||
<p>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:</p>
|
<p id="hilfe_aktoren_einleitung">!translate:hilfe.aktoren.einleitung</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li class="hilfe_aktoren_aktor" id="hilfe_aktoren_aktor_erzeuger">
|
||||||
<header>Erzeuger</header>
|
<header class="hilfe_aktoren_aktor_name">!translate:aufbau.aktoren.arten.erzeuger.name</header>
|
||||||
<p>Der Erzeuger ist fest platziert auf dem ganz linken Feld des Spielplans. An ihm wird die Spielfigur auf den Plan gesetzt und bewegt sich anschließend in die angezeigte Richtung.</p>
|
<div class="hilfe_aktoren_aktor_bild"></div>
|
||||||
|
<div class="hilfe_aktoren_aktor_text">!translate:hilfe.aktoren.erzeuger</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li class="hilfe_aktoren_aktor" id="hilfe_aktoren_aktor_annehmer">
|
||||||
<header>Ausgang</header>
|
<header class="hilfe_aktoren_aktor_name">!translate:aufbau.aktoren.arten.annehmer.name</header>
|
||||||
<p>Ebenfalls fest platziert aber auf dem ganz rechten Feld des Spielplans wird der Ausgang. Steuert man die Figur zu diesem Feld, so wird der aktuelle Band-Inhalt ausgelesen und akzeptiert.</p>
|
<div class="hilfe_aktoren_aktor_bild"></div>
|
||||||
|
<div class="hilfe_aktoren_aktor_text">!translate:hilfe.aktoren.annehmer</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li class="hilfe_aktoren_aktor" id="hilfe_aktoren_aktor_verwerfer">
|
||||||
<header>Verwerfer</header>
|
<header class="hilfe_aktoren_aktor_name">!translate:aufbau.aktoren.arten.verwerfer.name</header>
|
||||||
<p>Jedes leere Feld beendet den Lauf der Figur mit einer Abweisung des aktuellen Band-Inhalts.</p>
|
<div class="hilfe_aktoren_aktor_bild"></div>
|
||||||
|
<div class="hilfe_aktoren_aktor_text">!translate:hilfe.aktoren.verwerfer</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li class="hilfe_aktoren_aktor" id="hilfe_aktoren_aktor_befoerderer">
|
||||||
<header>Beförderer</header>
|
<header class="hilfe_aktoren_aktor_name">!translate:aufbau.aktoren.arten.befoerderer.name</header>
|
||||||
<p>Dieser Aktor dient dazu die Figur von einem Feld zu einem benachbarten zu befördern ohne dabei den Band-Inhalt zu ändern.</p>
|
<div class="hilfe_aktoren_aktor_bild"></div>
|
||||||
|
<div class="hilfe_aktoren_aktor_text">!translate:hilfe.aktoren.befoerderer</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li class="hilfe_aktoren_aktor" id="hilfe_aktoren_aktor_schreiber">
|
||||||
<header>Schreiber</header>
|
<header class="hilfe_aktoren_aktor_name">!translate:aufbau.aktoren.arten.schreiber.name</header>
|
||||||
<p>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.</p>
|
<div class="hilfe_aktoren_aktor_bild"></div>
|
||||||
|
<div class="hilfe_aktoren_aktor_text">!translate:hilfe.aktoren.schreiber</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li class="hilfe_aktoren_aktor" id="hilfe_aktoren_aktor_leser">
|
||||||
<header>Leser</header>
|
<header class="hilfe_aktoren_aktor_name">!translate:aufbau.aktoren.arten.leser.name</header>
|
||||||
<p>Beim Leser wird das erste Symbol auf dem Band der Figur betrachtet und die übereinstimmende Richtung gewählt, zu welcher die Figur bewegt im Anschluss 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.</p>
|
<div class="hilfe_aktoren_aktor_bild"></div>
|
||||||
|
<div class="hilfe_aktoren_aktor_text">!translate:hilfe.aktoren.leser</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section class="bereich">
|
||||||
<header>Aufgaben</header>
|
<header id="hilfe_aufgaben_titel">!translate:aufbau.aufgaben.woerter.plural</header>
|
||||||
<p>Ziel ist das Lösen von bestimmten Aufgaben. Dabei wird zwischen zwei Arten von Aufgaben unterschieden:</p>
|
<p id="hilfe_aufgaben_einleitung">!translate:hilfe.aufgaben.einleitung</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li id="hilfe_aufgaben_akzeptor">
|
||||||
<header>Akzeptor</header>
|
<header id="hilfe_aufgaben_akzeptor_name">!translate:aufbau.aufgaben.arten.akzeptor.name</header>
|
||||||
<p>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.</p>
|
<p id="hilfe_aufgaben_akzeptor_erklaerung">!translate:hilfe.aufgaben.akzeptor.erklaerung</p>
|
||||||
<p>Beispiel: Genau dann akzeptieren, wenn das Band mindestens zwei mal rot enthält.</p>
|
<p id="hilfe_aufgaben_akzeptor_beispiel">!translate:hilfe.aufgaben.akzeptor.beispiel</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li id="hilfe_aufgaben_transduktor">
|
||||||
<header>Transduktor</header>
|
<header id="hilfe_aufgaben_akzeptor_name">!translate:aufbau.aufgaben.arten.transduktor.name</header>
|
||||||
<p>Bei einer Transduktor-Aufgabe soll eine Ausgabe erzeugt werden, die in einer bestimmten Beziehung zur vorgefundenen Eingabe steht, also sozusagen eine Funktion angewendet werden.</p>
|
<p id="hilfe_aufgaben_transduktor_erklaerung">!translate:hilfe.aufgaben.transduktor.erklaerung</p>
|
||||||
<p>Beispiel: Die Eingabe zwei mal wiederholt.</p>
|
<p id="hilfe_aufgaben_transduktor_beispiel">!translate:hilfe.aufgaben.transduktor.beispiel</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
7
todo.md
7
todo.md
|
|
@ -1,6 +1,5 @@
|
||||||
- reset-button
|
|
||||||
- automatisch zu "bearbeiten" wechseln wenn fehlerhaft
|
- automatisch zu "bearbeiten" wechseln wenn fehlerhaft
|
||||||
- test schrittweise ablaufen
|
- Tests anzeigen?
|
||||||
- Tests anzeigen
|
- zufällige Tests?
|
||||||
- zufällige Tests
|
- Drehung beibehalten?
|
||||||
|
|
||||||
|
|
|
||||||
4
werkzeuge/bauen.sh
Executable file
4
werkzeuge/bauen.sh
Executable file
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
Loading…
Reference in a new issue