sicherung
This commit is contained in:
parent
13e34a6f42
commit
880d5dc708
20
makefile
20
makefile
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
292
quelldatein/manifestation/svg/aktor.ts
Normal file
292
quelldatein/manifestation/svg/aktor.ts
Normal 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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
142
quelldatein/manifestation/svg/figur.ts
Normal file
142
quelldatein/manifestation/svg/figur.ts
Normal 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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
126
quelldatein/manifestation/svg/partie.ts
Normal file
126
quelldatein/manifestation/svg/partie.ts
Normal 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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
276
quelldatein/manifestation/web/partie.ts
Normal file
276
quelldatein/manifestation/web/partie.ts
Normal 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();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -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 {}
|
||||||
|
|
||||||
|
|
@ -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>
|
||||||
Loading…
Reference in a new issue