sicherung

This commit is contained in:
Christian Fraß 2017-11-09 18:42:09 +01:00
parent 13e34a6f42
commit 880d5dc708
17 changed files with 1040 additions and 578 deletions

View file

@ -1,20 +1,20 @@
alles: erzeugnis/vtm.html erzeugnis/vtm.css erzeugnis/aufgaben.dat.js erzeugnis/vtm.js alles: erzeugnis/vtm.html erzeugnis/vtm.css erzeugnis/aufgaben.dat.js erzeugnis/vtm.js
.PHONY: alles .PHONY: alles
erzeugnis/vtm.html: quelldatein/manifestation/vtm.html erzeugnis/vtm.html: quelldatein/manifestation/web/vtm.html
@ echo "-- Struktur …" @ echo "-- Struktur …"
@ mkdir -p erzeugnis @ mkdir -p erzeugnis
@ cp quelldatein/manifestation/vtm.html erzeugnis/vtm.html @ cp quelldatein/manifestation/web/vtm.html erzeugnis/vtm.html
erzeugnis/vtm.css: quelldatein/manifestation/vtm.css quelldatein/manifestation/partie.css erzeugnis/vtm.css: quelldatein/manifestation/web/vtm.css quelldatein/manifestation/web/partie.css
@ echo "-- Gestaltung …" @ echo "-- Gestaltung …"
@ mkdir -p erzeugnis @ mkdir -p erzeugnis
@ cat quelldatein/manifestation/vtm.css quelldatein/manifestation/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
@ 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 > erzeugnis/daten.js
erzeugnis/vtm.js: \ erzeugnis/vtm.js: \
quelldatein/basis/typen.ts \ quelldatein/basis/typen.ts \
@ -49,7 +49,10 @@ erzeugnis/vtm.js: \
quelldatein/manifestation/manifestation.ts \ quelldatein/manifestation/manifestation.ts \
quelldatein/manifestation/position.ts \ quelldatein/manifestation/position.ts \
quelldatein/manifestation/svg.ts \ quelldatein/manifestation/svg.ts \
quelldatein/manifestation/partie.ts \ quelldatein/manifestation/svg/figur.ts \
quelldatein/manifestation/svg/aktor.ts \
quelldatein/manifestation/svg/partie.ts \
quelldatein/manifestation/web/partie.ts \
quelldatein/haupt.ts quelldatein/haupt.ts
@ echo "-- Logik …" @ echo "-- Logik …"
@ mkdir -p erzeugnis @ mkdir -p erzeugnis
@ -87,7 +90,10 @@ erzeugnis/vtm.js: \
quelldatein/manifestation/manifestation.ts \ quelldatein/manifestation/manifestation.ts \
quelldatein/manifestation/position.ts \ quelldatein/manifestation/position.ts \
quelldatein/manifestation/svg.ts \ quelldatein/manifestation/svg.ts \
quelldatein/manifestation/partie.ts \ quelldatein/manifestation/svg/figur.ts \
quelldatein/manifestation/svg/aktor.ts \
quelldatein/manifestation/svg/partie.ts \
quelldatein/manifestation/web/partie.ts \
quelldatein/haupt.ts \ quelldatein/haupt.ts \
--outFile erzeugnis/vtm.js --outFile erzeugnis/vtm.js

View file

@ -19,6 +19,12 @@
module mod_vtm_aufbau module mod_vtm_aufbau
{ {
/**
* @author kcf <vidofnir@folksprak.org>
*/
var _liste : Array<schnittstelle_aufgabe> = [];
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
@ -65,5 +71,23 @@ module mod_vtm_aufbau
} }
} }
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_registrieren(aufgabe : schnittstelle_aufgabe) : void
{
_liste.push(aufgabe);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_holen(index : int) : schnittstelle_aufgabe
{
return _liste[index];
}
} }

View file

@ -103,13 +103,14 @@ module mod_vtm_aufbau
if (symbol_.ist_schlicht()) if (symbol_.ist_schlicht())
{ {
let symbol : typ_symbol = symbol_.lesen(); let symbol : typ_symbol = symbol_.lesen();
figur.schieben();
if (symbol === this.symbol_links) if (symbol === this.symbol_links)
{ {
figur.schieben();
summand = +2; summand = +2;
} }
else if (symbol === this.symbol_rechts) else if (symbol === this.symbol_rechts)
{ {
figur.schieben();
summand = -2; summand = -2;
} }
else else

View file

@ -76,13 +76,12 @@ module mod_vtm_aufbau
public constructor public constructor
( (
aufgabe : schnittstelle_aufgabe, aufgabe : schnittstelle_aufgabe,
welt : klasse_welt = klasse_welt.blanko(), welt : klasse_welt = klasse_welt.blanko()
figur : schnittstelle_fehlermonade<klasse_figur> = new klasse_nichts<klasse_figur>()
) )
{ {
this.aufgabe = aufgabe; this.aufgabe = aufgabe;
this.welt = welt; this.welt = welt;
this.figur = figur; this.figur = (new klasse_nichts<klasse_figur>());
this.testindex = (new klasse_nichts<int>()); this.testindex = (new klasse_nichts<int>());
this.modus = modus_initial; this.modus = modus_initial;
} }
@ -115,6 +114,17 @@ 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;
}
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */

View file

@ -24,5 +24,14 @@ module mod_vtm_aufbau
*/ */
export type typ_symbol = int; export type typ_symbol = int;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function symbol_vergleichen(symbol1 : typ_symbol, symbol2 : typ_symbol) : boolean
{
return (symbol1 === symbol2);
}
} }

View file

@ -64,9 +64,31 @@ module mod_vtm_aufbau
*/ */
public pruefen(angenommen : boolean, ausgabe : Array<typ_symbol>) : boolean public pruefen(angenommen : boolean, ausgabe : Array<typ_symbol>) : boolean
{ {
console.warn("not implemented"); console.info(this.ausgabe);
console.info(ausgabe);
if (this.ausgabe.length !== ausgabe.length)
{
return false; return false;
} }
else
{
let gleich : boolean = true;
for (let index : int = 0; index < this.ausgabe.length; index += 1)
{
if (! symbol_vergleichen(this.ausgabe[index], ausgabe[index]))
{
console.info("ungleichheit bei Index " + index.toFixed(0));
gleich = false;
break;
}
else
{
// nichts tun
}
}
return gleich;
}
}
} }

View file

@ -65,6 +65,35 @@ jsonp_behandlung(
] ]
} }
}, },
{
"art": "akzeptor",
"parameter": {
"titel": "Abwechslung erfreuet",
"text": "Annehmen genau dann wenn: Die Farben der Eingabe sich immer abwechseln",
"tests": [
{
"eingabe": [],
"annehmen": true
},
{
"eingabe": [0],
"annehmen": true
},
{
"eingabe": [0,0],
"annehmen": false
},
{
"eingabe": [1,0,1],
"annehmen": true
},
{
"eingabe": [0,1,0,1,0,1],
"annehmen": true
}
]
}
},
{ {
"art": "transduktor", "art": "transduktor",
"parameter": { "parameter": {
@ -73,7 +102,7 @@ jsonp_behandlung(
"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],
"ausgabe": [0,1,1,1,0,1,0,1,1,1,0,1,0], "ausgabe": [0,1,1,1,0,1,0,1,1,1,0,1,0]
} }
] ]
} }
@ -86,19 +115,36 @@ jsonp_behandlung(
"tests": [ "tests": [
{ {
"eingabe": [0,0,0,1,0], "eingabe": [0,0,0,1,0],
"ausgabe": [0,0,0,0], "ausgabe": [0,0,0,0]
}, },
{ {
"eingabe": [1,0,1,0,1], "eingabe": [1,0,1,0,1],
"ausgabe": [0,0,0], "ausgabe": [0,0,0]
}, },
{ {
"eingabe": [1,1,1,1,0], "eingabe": [1,1,1,1,0],
"ausgabe": [0], "ausgabe": [0]
}, },
{ {
"eingabe": [0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1], "eingabe": [0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1],
"ausgabe": [0,0,0,0,0,0,0,0,0], "ausgabe": [0,0,0,0,0,0,0,0,0]
}
]
}
},
{
"art": "transduktor",
"parameter": {
"titel": "Tauschen",
"text": "alle ${s0} durch ${s2} ersetzen und alle ${s1} durch ${s3}",
"tests": [
{
"eingabe": [0,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]
} }
] ]
} }

View file

@ -19,7 +19,7 @@
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
function aufgaben_laden(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe)=>void) : void function aufgaben_eintragen(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe)=>void) : void
{ {
let aufgaben_roh_ : schnittstelle_fehlermonade<Array<any>> = mod_vtm_daten.lesen("aufgaben"); let aufgaben_roh_ : schnittstelle_fehlermonade<Array<any>> = mod_vtm_daten.lesen("aufgaben");
if (aufgaben_roh_.ist_schlicht()) if (aufgaben_roh_.ist_schlicht())
@ -29,13 +29,22 @@ function aufgaben_laden(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_aufg
aufgaben_roh.forEach aufgaben_roh.forEach
( (
(aufgabe_roh, index) => (aufgabe_roh, index) =>
{
// Aufgabe registrieren
{
let aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe = mod_vtm_aufbau.aufgabe_erstellen(aufgabe_roh);
mod_vtm_aufbau.aufgabe_registrieren(aufgabe);
}
// Option eintragen
{ {
let titel : string = aufgabe_roh["parameter"]["titel"]; let titel : string = aufgabe_roh["parameter"]["titel"];
let value : string = index.toFixed(0);
let dom_option : Element = document.createElement("option"); let dom_option : Element = document.createElement("option");
dom_option.setAttribute("value", index.toFixed(0)); dom_option.setAttribute("value", value);
dom_option.textContent = titel; dom_option.textContent = titel;
dom_auswahl.appendChild(dom_option); dom_auswahl.appendChild(dom_option);
} }
}
) )
; ;
dom_auswahl.addEventListener dom_auswahl.addEventListener
@ -43,9 +52,9 @@ function aufgaben_laden(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_aufg
"change", "change",
event => event =>
{ {
let index : int = dom_auswahl["value"]; let value : string = dom_auswahl["value"];
let aufgabe_roh : any = aufgaben_roh[index]; let index : int = parseInt(value);
let aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe = mod_vtm_aufbau.aufgabe_erstellen(aufgabe_roh); let aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe = mod_vtm_aufbau.aufgabe_holen(index);
behandler(aufgabe); behandler(aufgabe);
} }
) )
@ -64,79 +73,18 @@ function aufgaben_laden(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_aufg
function haupt() : void function haupt() : void
{ {
let aufbau : mod_vtm_aufbau.klasse_partie; let aufbau : mod_vtm_aufbau.klasse_partie;
let manifestationen : Array<any>; let aufgabe_laden = function (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe) : void
let aktualisieren = function () : void
{
manifestationen.forEach
(
manifestation =>
{
manifestation.darstellen();
}
);
}
;
let intervall : any = null;
aufgaben_laden
(
aufgabe =>
{ {
document.querySelector("#aufgabe_text").textContent = aufgabe.text(); document.querySelector("#aufgabe_text").textContent = aufgabe.text();
aufbau = (new mod_vtm_aufbau.klasse_partie(aufgabe)); aufbau = (new mod_vtm_aufbau.klasse_partie(aufgabe));
manifestationen = ( let manifestation : mod_vtm_manifestation.klasse_manifestation<mod_vtm_aufbau.klasse_partie, void> = (
[ new mod_vtm_manifestation.klasse_web_partie(aufbau, document.querySelector("#bereich_mitte"))
new mod_vtm_manifestation.klasse_web_partie(aufbau, document.querySelector("#bereich_mitte")),
]
); );
manifestationen.forEach
(
manifestation =>
{
manifestation.einrichten(); manifestation.einrichten();
} }
);
aktualisieren();
}
)
;
document.querySelector("#knopf_testen").addEventListener
(
"click",
event =>
{
intervall = setInterval
(
() =>
{
// console.log("-- tick");
aufbau.fortfahren();
let modus : mod_vtm_aufbau.typ_modus = aufbau.modus_lesen();
if (modus <= 1)
{
// nichts tun
}
else
{
clearInterval(intervall); intervall = null;
}
aktualisieren();
}
,
500
)
;
}
)
;
document.querySelector("#knopf_anhalten").addEventListener
(
"click",
event =>
{
clearInterval(intervall); intervall = null;
}
)
; ;
aufgaben_eintragen(aufgabe_laden);
aufgabe_laden(mod_vtm_aufbau.aufgabe_holen(0));
} }

View file

@ -22,7 +22,7 @@ module mod_vtm_manifestation
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
export abstract class klasse_manifestation<typ_aufbau> export abstract class klasse_manifestation<typ_aufbau, typ_ausgabe>
{ {
/** /**
@ -43,7 +43,7 @@ module mod_vtm_manifestation
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
public abstract darstellen() : void; public abstract darstellen() : typ_ausgabe;
/** /**

View file

@ -1,473 +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_manifestation
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_web_partie
extends klasse_manifestation<mod_vtm_aufbau.klasse_partie>
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private bereich : Element;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.klasse_partie, bereich : Element)
{
super(aufbau);
this.bereich = bereich;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : void
{
let knoten_rahmen = function () : mod_vtm_helfer.schnittstelle_xmlknoten
{
return (
svg_pfad
(
mod_vtm_helfer.sequenz(6).map(i => mod_vtm_helfer.vektor_polar(((i+0.5)/6.0) * (2*Math.PI), 0.5)),
true,
{
"class": "rahmen"
}
)
);
}
;
let kinder_welt : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
// felder
{
let kinder_felder : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
this.aufbau.welt_lesen().felder_lesen().forEach
(
({"stelle": stelle, "aktor": aktor}) =>
{
let kinder_feld : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
if (aktor instanceof mod_vtm_aufbau.klasse_erzeuger)
{
kinder_feld.push(knoten_rahmen());
let erzeuger : mod_vtm_aufbau.klasse_erzeuger = <mod_vtm_aufbau.klasse_erzeuger>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = erzeuger.richtung_lesen();
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"erzeuger",
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_befoerderer)
{
kinder_feld.push(knoten_rahmen());
let befoerderer : mod_vtm_aufbau.klasse_befoerderer = <mod_vtm_aufbau.klasse_befoerderer>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = befoerderer.richtung_lesen();
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"neutral",
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_schreiber)
{
kinder_feld.push(knoten_rahmen());
let schreiber : mod_vtm_aufbau.klasse_schreiber = <mod_vtm_aufbau.klasse_schreiber>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = schreiber.richtung_lesen();
let symbol : mod_vtm_aufbau.typ_symbol = schreiber.symbol_lesen();
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"symbol_" + symbol.toFixed(0),
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_leser)
{
kinder_feld.push(knoten_rahmen());
let leser : mod_vtm_aufbau.klasse_leser = <mod_vtm_aufbau.klasse_leser>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = leser.richtung_lesen();
let ausgaenge : Array<{summand : mod_vtm_aufbau.typ_richtung, symbol : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_symbol>;}> =
[
{
"summand": 0,
"symbol": new klasse_nichts<mod_vtm_aufbau.typ_symbol>(),
},
{
"summand": +2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(leser.symbol_links_lesen()),
},
{
"summand": -2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(leser.symbol_rechts_lesen()),
},
]
;
ausgaenge.forEach
(
eintrag =>
{
let winkel : float = ((mod_vtm_aufbau.richtung_addieren(richtung, eintrag.summand) / 6.0) * 360);
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
(
eintrag.symbol.ist_schlicht()
? "symbol_" + eintrag.symbol.lesen().toFixed(0)
: "neutral"
),
].join(" ")
),
"transform": (
[
"rotate(" + winkel.toFixed(svg_float_praezission) + ")",
"translate(0, 0)",
"scale(0.1)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
)
;
}
else if (aktor instanceof mod_vtm_aufbau.klasse_verwerfer)
{
kinder_feld.push(knoten_rahmen());
let verwerfer : mod_vtm_aufbau.klasse_annehmer = <mod_vtm_aufbau.klasse_verwerfer>(aktor);
let knoten_kreis : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": (0.0).toFixed(svg_float_praezission),
"cy": (0.0).toFixed(svg_float_praezission),
"r": (0.25).toFixed(svg_float_praezission),
"class": (
[
"kreis",
"negativ",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_kreis);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_annehmer)
{
kinder_feld.push(knoten_rahmen());
let annehmer : mod_vtm_aufbau.klasse_annehmer = <mod_vtm_aufbau.klasse_annehmer>(aktor);
let knoten_kreis : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": (0.0).toFixed(svg_float_praezission),
"cy": (0.0).toFixed(svg_float_praezission),
"r": (0.25).toFixed(svg_float_praezission),
"class": (
[
"kreis",
"positiv",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_kreis);
}
else
{
let meldung : string = ("unbehandelter Aktor-Typ");
throw (new Error(meldung));
}
let position : typ_position = position_von_stelle(stelle);
let knoten_feld : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "feld",
"rel": mod_vtm_aufbau.stelle_hash(stelle),
"transform": ("translate(" + position.x.toFixed(svg_float_praezission) + ", " + position.y.toFixed(svg_float_praezission) + ")"),
},
kinder_feld
)
);
kinder_felder.push(knoten_feld);
}
)
;
let knoten_felder : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "felder",
},
kinder_felder
)
);
kinder_welt.push(knoten_felder);
}
// Figur
{
let figur_ : schnittstelle_fehlermonade<mod_vtm_aufbau.klasse_figur> = this.aufbau.figur_lesen();
if (figur_.ist_schlicht())
{
let figur : mod_vtm_aufbau.klasse_figur = figur_.lesen();
let kinder_figur : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
// Stein
{
let knoten_stein : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": (0.0).toFixed(svg_float_praezission),
"cy": (0.0).toFixed(svg_float_praezission),
"r": (0.125).toFixed(svg_float_praezission),
"class": "stein",
}
)
);
kinder_figur.push(knoten_stein);
}
// Band
{
let band : Array<mod_vtm_aufbau.typ_symbol> = figur.band_lesen();
let kinder_band : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
band.reduceRight
(
(dummy, symbol, index) =>
{
let r : float = 0.06125;
let x : float = (+0.1+(2*r*1.25)*index);
let y : float = (-0.1);
let knoten_eintrag : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": x.toFixed(svg_float_praezission),
"cy": y.toFixed(svg_float_praezission),
"r": r.toFixed(svg_float_praezission),
/*
"x": (x-r).toFixed(svg_float_praezission),
"y": (y-r).toFixed(svg_float_praezission),
"width": (2*r).toFixed(svg_float_praezission),
"height": (2*r).toFixed(svg_float_praezission),
*/
"class": (
[
"eintrag",
"symbol_" + symbol.toFixed(0),
].join(" ")
),
}
)
);
kinder_band.push(knoten_eintrag);
return null;
}
,
null
)
;
let knoten_band = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "band",
},
kinder_band
)
);
kinder_figur.push(knoten_band);
}
let position : typ_position = position_von_stelle(figur.stelle_lesen());
let knoten_figur = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "figur",
"transform": ("translate(" + position.x.toFixed(svg_float_praezission) + "," + position.y.toFixed(svg_float_praezission) + ")"),
},
kinder_figur
)
);
kinder_welt.push(knoten_figur);
}
else
{
// nichts tun
}
}
let knoten_welt : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "welt",
},
kinder_welt
)
);
let knoten_svg : mod_vtm_helfer.schnittstelle_xmlknoten = mod_vtm_manifestation.svg_wurzel
(
-4, -4,
+4, +4,
800, 800,
[knoten_welt]
)
;
this.bereich.innerHTML = knoten_svg.darstellen();
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
// Links-Klick
this.bereich.addEventListener
(
"click",
event =>
{
event.preventDefault();
let dom_feld : Element = event.target["closest"](".feld");
if (dom_feld == null)
{
console.info("-- kein Feld");
}
else
{
let rel : string = dom_feld.getAttribute("rel")
let stelle : mod_vtm_aufbau.typ_stelle = mod_vtm_aufbau.stelle_von_hash(rel);
this.aufbau.welt_lesen().feld_wechseln(stelle);
this.darstellen();
}
}
)
;
// Rechts-Klick
this.bereich.addEventListener
(
"contextmenu",
event =>
{
event.preventDefault();
let dom_feld : Element = event.target["closest"](".feld");
if (dom_feld == null)
{
console.info("-- kein Feld");
}
else
{
let rel : string = dom_feld.getAttribute("rel")
let stelle : mod_vtm_aufbau.typ_stelle = mod_vtm_aufbau.stelle_von_hash(rel);
this.aufbau.welt_lesen().feld_drehen(stelle);
this.darstellen();
}
}
)
;
}
}
}

View file

@ -0,0 +1,292 @@
/*
* 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_manifestation
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_svg_aktor
extends klasse_manifestation<mod_vtm_aufbau.schnittstelle_aktor, mod_vtm_helfer.schnittstelle_xmlknoten>
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private stelle : mod_vtm_aufbau.typ_stelle;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.schnittstelle_aktor, stelle : mod_vtm_aufbau.typ_stelle)
{
super(aufbau);
this.stelle = stelle;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : mod_vtm_helfer.schnittstelle_xmlknoten
{
let aktor : mod_vtm_aufbau.schnittstelle_aktor = this.aufbau;
let knoten_rahmen = function () : mod_vtm_helfer.schnittstelle_xmlknoten
{
return (
svg_pfad
(
mod_vtm_helfer.sequenz(6).map(i => mod_vtm_helfer.vektor_polar(((i+0.5)/6.0) * (2*Math.PI), 0.5)),
true,
{
"class": "rahmen"
}
)
);
}
;
let kinder_feld : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
if (aktor instanceof mod_vtm_aufbau.klasse_erzeuger)
{
kinder_feld.push(knoten_rahmen());
let erzeuger : mod_vtm_aufbau.klasse_erzeuger = <mod_vtm_aufbau.klasse_erzeuger>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = erzeuger.richtung_lesen();
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"erzeuger",
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_befoerderer)
{
kinder_feld.push(knoten_rahmen());
let befoerderer : mod_vtm_aufbau.klasse_befoerderer = <mod_vtm_aufbau.klasse_befoerderer>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = befoerderer.richtung_lesen();
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"neutral",
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_schreiber)
{
kinder_feld.push(knoten_rahmen());
let schreiber : mod_vtm_aufbau.klasse_schreiber = <mod_vtm_aufbau.klasse_schreiber>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = schreiber.richtung_lesen();
let symbol : mod_vtm_aufbau.typ_symbol = schreiber.symbol_lesen();
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"symbol_" + symbol.toFixed(0),
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_leser)
{
kinder_feld.push(knoten_rahmen());
let leser : mod_vtm_aufbau.klasse_leser = <mod_vtm_aufbau.klasse_leser>(aktor);
let richtung : mod_vtm_aufbau.typ_richtung = leser.richtung_lesen();
let ausgaenge : Array<{summand : mod_vtm_aufbau.typ_richtung, symbol : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_symbol>;}> =
[
{
"summand": 0,
"symbol": new klasse_nichts<mod_vtm_aufbau.typ_symbol>(),
},
{
"summand": +2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(leser.symbol_links_lesen()),
},
{
"summand": -2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(leser.symbol_rechts_lesen()),
},
]
;
ausgaenge.forEach
(
eintrag =>
{
let winkel : float = ((mod_vtm_aufbau.richtung_addieren(richtung, eintrag.summand) / 6.0) * 360);
let knoten_pfeil : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
(
eintrag.symbol.ist_schlicht()
? "symbol_" + eintrag.symbol.lesen().toFixed(0)
: "neutral"
),
].join(" ")
),
"transform": (
[
"rotate(" + winkel.toFixed(svg_float_praezission) + ")",
"translate(0, 0)",
"scale(0.1)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
)
;
}
else if (aktor instanceof mod_vtm_aufbau.klasse_verwerfer)
{
kinder_feld.push(knoten_rahmen());
let verwerfer : mod_vtm_aufbau.klasse_annehmer = <mod_vtm_aufbau.klasse_verwerfer>(aktor);
let knoten_kreis : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": (0.0).toFixed(svg_float_praezission),
"cy": (0.0).toFixed(svg_float_praezission),
"r": (0.25).toFixed(svg_float_praezission),
"class": (
[
"kreis",
"negativ",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_kreis);
}
else if (aktor instanceof mod_vtm_aufbau.klasse_annehmer)
{
kinder_feld.push(knoten_rahmen());
let annehmer : mod_vtm_aufbau.klasse_annehmer = <mod_vtm_aufbau.klasse_annehmer>(aktor);
let knoten_kreis : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": (0.0).toFixed(svg_float_praezission),
"cy": (0.0).toFixed(svg_float_praezission),
"r": (0.25).toFixed(svg_float_praezission),
"class": (
[
"kreis",
"positiv",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_kreis);
}
else
{
let meldung : string = ("unbehandelter Aktor-Typ");
throw (new Error(meldung));
}
let position : typ_position = position_von_stelle(this.stelle);
let knoten_feld : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "feld",
"rel": mod_vtm_aufbau.stelle_hash(this.stelle),
"transform": ("translate(" + position.x.toFixed(svg_float_praezission) + ", " + position.y.toFixed(svg_float_praezission) + ")"),
},
kinder_feld
)
);
return knoten_feld;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
}
}
}

View file

@ -0,0 +1,142 @@
/*
* 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_manifestation
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_svg_figur
extends klasse_manifestation<mod_vtm_aufbau.klasse_figur, mod_vtm_helfer.schnittstelle_xmlknoten>
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.klasse_figur)
{
super(aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : mod_vtm_helfer.schnittstelle_xmlknoten
{
let figur : mod_vtm_aufbau.klasse_figur = this.aufbau;
let kinder_figur : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
// Stein
{
let knoten_stein : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": (0.0).toFixed(svg_float_praezission),
"cy": (0.0).toFixed(svg_float_praezission),
"r": (0.125).toFixed(svg_float_praezission),
"class": "stein",
}
)
);
kinder_figur.push(knoten_stein);
}
// Band
{
let band : Array<mod_vtm_aufbau.typ_symbol> = figur.band_lesen();
let kinder_band : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
band.reduceRight
(
(dummy, symbol, index) =>
{
let r : float = 0.06125;
let x : float = (+0.1+(2*r*1.25)*index);
let y : float = (-0.1);
let knoten_eintrag : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"circle",
{
"cx": x.toFixed(svg_float_praezission),
"cy": y.toFixed(svg_float_praezission),
"r": r.toFixed(svg_float_praezission),
/*
"x": (x-r).toFixed(svg_float_praezission),
"y": (y-r).toFixed(svg_float_praezission),
"width": (2*r).toFixed(svg_float_praezission),
"height": (2*r).toFixed(svg_float_praezission),
*/
"class": (
[
"eintrag",
"symbol_" + symbol.toFixed(0),
].join(" ")
),
}
)
);
kinder_band.push(knoten_eintrag);
return null;
}
,
null
)
;
let knoten_band = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "band",
},
kinder_band
)
);
kinder_figur.push(knoten_band);
}
let position : typ_position = position_von_stelle(figur.stelle_lesen());
let knoten_figur = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "figur",
"transform": ("translate(" + position.x.toFixed(svg_float_praezission) + "," + position.y.toFixed(svg_float_praezission) + ")"),
},
kinder_figur
)
);
return knoten_figur;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
}
}
}

View file

@ -0,0 +1,126 @@
/*
* 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_manifestation
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_svg_partie
extends klasse_manifestation<mod_vtm_aufbau.klasse_partie, mod_vtm_helfer.schnittstelle_xmlknoten>
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.klasse_partie)
{
super(aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : mod_vtm_helfer.schnittstelle_xmlknoten
{
let kinder_partie : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
// Welt
{
let kinder_welt : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
// Felder
{
let kinder_felder : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
this.aufbau.welt_lesen().felder_lesen().forEach
(
({"stelle": stelle, "aktor": aktor}) =>
{
let manifestation_feld : klasse_manifestation<mod_vtm_aufbau.schnittstelle_aktor, mod_vtm_helfer.schnittstelle_xmlknoten> = new klasse_svg_aktor(aktor, stelle);
let knoten_feld : mod_vtm_helfer.schnittstelle_xmlknoten = manifestation_feld.darstellen();
kinder_felder.push(knoten_feld);
}
)
;
let knoten_felder : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "felder",
},
kinder_felder
)
);
kinder_welt.push(knoten_felder);
}
// Figur
{
let figur_ : schnittstelle_fehlermonade<mod_vtm_aufbau.klasse_figur> = this.aufbau.figur_lesen();
if (figur_.ist_schlicht())
{
let figur : mod_vtm_aufbau.klasse_figur = figur_.lesen();
let manifestation_figur : klasse_manifestation<mod_vtm_aufbau.klasse_figur, mod_vtm_helfer.schnittstelle_xmlknoten> = (new klasse_svg_figur(figur));
let knoten_figur : mod_vtm_helfer.schnittstelle_xmlknoten = manifestation_figur.darstellen();
kinder_welt.push(knoten_figur);
}
else
{
// nichts tun
}
}
let knoten_welt : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "welt",
},
kinder_welt
)
);
kinder_partie.push(knoten_welt);
}
let knoten_partie : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
(
"g",
{
"class": "partie",
},
kinder_partie
)
);
return knoten_partie;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
}
}
}

View file

@ -0,0 +1,276 @@
/*
* 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_manifestation
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_web_partie
extends klasse_manifestation<mod_vtm_aufbau.klasse_partie, void>
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private bereich : Element;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private intervall : schnittstelle_fehlermonade<any>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.klasse_partie, bereich : Element)
{
super(aufbau);
this.bereich = bereich;
this.intervall = (new klasse_nichts<any>());
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : void
{
// Zeichnung aktualisieren
{
let knoten_svg : mod_vtm_helfer.schnittstelle_xmlknoten = mod_vtm_manifestation.svg_wurzel
(
-4, -4,
+4, +4,
800, 800,
[new klasse_svg_partie(this.aufbau).darstellen()]
)
;
this.bereich.innerHTML = knoten_svg.darstellen();
}
// Status
{
let status : string;
switch (this.aufbau.modus_lesen())
{
case mod_vtm_aufbau.modus_initial:
{
status = "Rechts 'Testen' drücken zum Prüfen der Maschine";
break;
}
case mod_vtm_aufbau.modus_ungewiss:
{
status = "wird geprüft …";
break;
}
case mod_vtm_aufbau.modus_fehlerhaft:
{
status = "fehlerhaft :/";
break;
}
case mod_vtm_aufbau.modus_korrekt:
{
status = "scheinbar korrekt :)";
break;
}
default:
{
let meldung : string = "unbehandelter Modus";
throw (new Error(meldung));
break;
}
}
document.querySelector("#aufgabe_status").textContent = status;
}
// Knöpfe anzeigen/ausblenden
{
document.querySelector("#knoepfe").setAttribute
(
"class",
(
(this.aufbau.modus_lesen() === mod_vtm_aufbau.modus_initial)
? "initial"
: (
this.intervall.ist_schlicht()
? "testen_laufend"
: "testen_stehend"
)
)
)
;
}
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
// Links-Klick
this.bereich.addEventListener
(
"click",
event =>
{
event.preventDefault();
if (this.aufbau.modus_lesen() === mod_vtm_aufbau.modus_initial)
{
let dom_feld : Element = event.target["closest"](".feld");
if (dom_feld == null)
{
console.info("-- kein Feld");
}
else
{
let rel : string = dom_feld.getAttribute("rel")
let stelle : mod_vtm_aufbau.typ_stelle = mod_vtm_aufbau.stelle_von_hash(rel);
this.aufbau.welt_lesen().feld_wechseln(stelle);
this.darstellen();
}
}
else
{
console.info("-- nicht zur Bearbeitung freigegeben");
}
}
)
;
// Rechts-Klick
this.bereich.addEventListener
(
"contextmenu",
event =>
{
event.preventDefault();
if (this.aufbau.modus_lesen() === mod_vtm_aufbau.modus_initial)
{
let dom_feld : Element = event.target["closest"](".feld");
if (dom_feld == null)
{
console.info("-- kein Feld");
}
else
{
let rel : string = dom_feld.getAttribute("rel")
let stelle : mod_vtm_aufbau.typ_stelle = mod_vtm_aufbau.stelle_von_hash(rel);
this.aufbau.welt_lesen().feld_drehen(stelle);
this.darstellen();
}
}
else
{
console.info("-- nicht zur Bearbeitung freigegeben");
}
}
)
;
// Testen
document.querySelector("#knopf_testen").addEventListener
(
"click",
event =>
{
this.intervall = (
new klasse_schlicht<any>
(
setInterval
(
() =>
{
this.aufbau.fortfahren();
let modus : mod_vtm_aufbau.typ_modus = this.aufbau.modus_lesen();
if (modus <= 1)
{
// nichts tun
}
else
{
if (this.intervall.ist_schlicht())
{
clearInterval(this.intervall.lesen());
this.intervall = (new klasse_nichts<int>());
this.darstellen();
}
else
{
let meldung : string = "kein Intervall gesetzt";
console.warn(meldung);
}
}
this.darstellen();
}
,
500
)
)
);
}
)
;
// Anhalten
document.querySelector("#knopf_anhalten").addEventListener
(
"click",
event =>
{
if (this.intervall.ist_schlicht())
{
clearInterval(this.intervall.lesen());
this.intervall = (new klasse_nichts<int>());
this.darstellen();
}
else
{
let meldung : string = "kein Intervall gesetzt";
console.warn(meldung);
}
}
)
;
// Bearbeiten
document.querySelector("#knopf_bearbeiten").addEventListener
(
"click",
event =>
{
if (this.intervall.ist_schlicht())
{
clearInterval(this.intervall.lesen());
this.intervall = (new klasse_nichts<int>());
}
else
{
// nichts tun
}
this.aufbau.zuruecksetzen();
this.darstellen();
}
)
;
}
}
}

View file

@ -12,7 +12,7 @@ html
body body
{ {
margin: 0; margin: 0;
padding: 0; padding: 8px;
height: 100%; height: 100%;
background-color: hsl(120, 0%, 6.125%); background-color: hsl(120, 0%, 6.125%);
@ -23,6 +23,12 @@ a
{ {
color: hsl(120, 50%, 50%); color: hsl(120, 50%, 50%);
text-decoration: none; text-decoration: none;
cursor: pointer;
}
a:hover
{
color: hsl(120, 50%, 75%);
} }
body > header body > header
@ -31,7 +37,19 @@ body > header
margin: 8px; margin: 8px;
} }
#inhalt #radio_hilfe,
#radio_spiel
{
display: none;
}
#radio_hilfe:checked ~ #hilfe {}
#radio_hilfe:checked ~ #spiel {display: none;}
#radio_spiel:checked ~ #hilfe {display: none;}
#radio_spiel:checked ~ #spiel {}
#spiel
{ {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@ -77,3 +95,15 @@ body > header
font-size: 150%; font-size: 150%;
} }
#knoepfe.initial > #knopf_testen {}
#knoepfe.initial > #knopf_anhalten {display: none;}
#knoepfe.initial > #knopf_bearbeiten {display: none;}
#knoepfe.testen_laufend > #knopf_testen {display: none;}
#knoepfe.testen_laufend > #knopf_anhalten {}
#knoepfe.testen_laufend > #knopf_bearbeiten {}
#knoepfe.testen_stehend > #knopf_testen {}
#knoepfe.testen_stehend > #knopf_anhalten {display: none;}
#knoepfe.testen_stehend > #knopf_bearbeiten {}

View file

@ -3,30 +3,33 @@
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<script type="text/javascript" src="vtm.js"></script> <script type="text/javascript" src="vtm.js"></script>
<script type="text/javascript" src="aufgaben.dat.js"></script> <script type="text/javascript" src="daten.js"></script>
<script type="text/javascript">eingang_web();</script> <script type="text/javascript">eingang_web();</script>
<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>Verrückte Turing-Maschinen</header>
<div id="inhalt"> <label for="radio_hilfe"><a>Hilfe</a></label><input type="radio" name="tab" id="radio_hilfe"/>
<label for="radio_spiel"><a>Spiel</a></label><input type="radio" name="tab" id="radio_spiel" checked="checked"/>
<hr/>
<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">Aufgabe auswählen</label>
<select id="aufgabe_auswahl"></select> <select id="aufgabe_auswahl"></select>
<p id="aufgabe_text"></p> <p id="aufgabe_text"></p>
<span id="aufgabe_status"></span>
</div> </div>
<div class="bereich" id="bereich_mitte"> <div class="bereich" id="bereich_mitte">
</div> </div>
<div class="bereich" id="bereich_rechts"> <div class="bereich" id="bereich_rechts">
<div id="knoepfe"> <div id="knoepfe">
<button id="knopf_bearbeiten">Bearbeiten</button>
<button id="knopf_testen">Testen</button> <button id="knopf_testen">Testen</button>
<button id="knopf_anhalten">Anhalten</button> <button id="knopf_anhalten">Anhalten</button>
<button id="knopf_bearbeiten">Bearbeiten</button>
</div> </div>
</div> </div>
</div> </div>
<div id="hilfe"> <div id="hilfe">
<header>Erklärung</header>
<p>Dieses Spiel ist inspiriert von <a href="http://www.kongregate.com/games/PleasingFungus/manufactoria">Manufacturia</a> und <a href="http://www.crazy-machines.com/">Crazy Machines</a>.</p> <p>Dieses Spiel ist inspiriert von <a href="http://www.kongregate.com/games/PleasingFungus/manufactoria">Manufacturia</a> und <a href="http://www.crazy-machines.com/">Crazy Machines</a>.</p>
<section> <section>
<header>Steuerung</header> <header>Steuerung</header>