fast fertig

This commit is contained in:
Christian Fraß 2018-03-26 00:41:10 +02:00
parent 6012730288
commit 74a9792bbf
32 changed files with 2688 additions and 2083 deletions

View file

@ -52,11 +52,14 @@ ${dir_erzeugnis}/vtm.dat.js: \
${dir_erzeugnis}/vtm.js: \
${dir_quelldatein}/basis/typen.ts \
${dir_quelldatein}/basis/fehlermonade.ts \
${dir_quelldatein}/basis/aufruf.ts \
${dir_quelldatein}/helfer/verschiedenes.ts \
${dir_quelldatein}/helfer/mathematik.ts \
${dir_quelldatein}/helfer/vektor.ts \
${dir_quelldatein}/helfer/hashmap.ts \
${dir_quelldatein}/helfer/xmlknoten.ts \
${dir_quelldatein}/helfer/xmlknoten/_xmlknoten.ts \
${dir_quelldatein}/helfer/xmlknoten/text.ts \
${dir_quelldatein}/helfer/xmlknoten/normal.ts \
${dir_quelldatein}/helfer/uebersetzung.ts \
${dir_quelldatein}/daten.ts \
${dir_quelldatein}/aufbau/richtung.ts \
@ -64,21 +67,20 @@ ${dir_erzeugnis}/vtm.js: \
${dir_quelldatein}/aufbau/stelle.ts \
${dir_quelldatein}/aufbau/zustand.ts \
${dir_quelldatein}/aufbau/figur.ts \
${dir_quelldatein}/aufbau/aktoren/_aktor.ts \
${dir_quelldatein}/aufbau/aktoren/erzeuger.ts \
${dir_quelldatein}/aufbau/aktoren/annehmer.ts \
${dir_quelldatein}/aufbau/aktoren/verwerfer.ts \
${dir_quelldatein}/aufbau/aktoren/befoerderer.ts \
${dir_quelldatein}/aufbau/aktoren/schreiber.ts \
${dir_quelldatein}/aufbau/aktoren/leser.ts \
${dir_quelldatein}/aufbau/aktoren/aktor.ts \
${dir_quelldatein}/aufbau/welt.ts \
${dir_quelldatein}/aufbau/aufgaben/test.ts \
${dir_quelldatein}/aufbau/aufgaben/akzeptortest.ts \
${dir_quelldatein}/aufbau/aufgaben/transduktortest.ts \
${dir_quelldatein}/aufbau/aufgaben/aufgabe.ts \
${dir_quelldatein}/aufbau/aufgaben/akzeptoraufgabe.ts \
${dir_quelldatein}/aufbau/aufgaben/transduktoraufgabe.ts \
${dir_quelldatein}/aufbau/aufgaben/aufgabe_.ts \
${dir_quelldatein}/aufbau/aufgaben/aufgabe.ts \
${dir_quelldatein}/aufbau/modus.ts \
${dir_quelldatein}/aufbau/partie.ts \
${dir_quelldatein}/manifestation/manifestation.ts \
@ -95,11 +97,14 @@ ${dir_erzeugnis}/vtm.js: \
@ ${cmd_tsc} \
${dir_quelldatein}/basis/typen.ts \
${dir_quelldatein}/basis/fehlermonade.ts \
${dir_quelldatein}/basis/aufruf.ts \
${dir_quelldatein}/helfer/verschiedenes.ts \
${dir_quelldatein}/helfer/mathematik.ts \
${dir_quelldatein}/helfer/vektor.ts \
${dir_quelldatein}/helfer/hashmap.ts \
${dir_quelldatein}/helfer/xmlknoten.ts \
${dir_quelldatein}/helfer/xmlknoten/_xmlknoten.ts \
${dir_quelldatein}/helfer/xmlknoten/text.ts \
${dir_quelldatein}/helfer/xmlknoten/normal.ts \
${dir_quelldatein}/helfer/uebersetzung.ts \
${dir_quelldatein}/daten.ts \
${dir_quelldatein}/aufbau/richtung.ts \
@ -107,21 +112,20 @@ ${dir_erzeugnis}/vtm.js: \
${dir_quelldatein}/aufbau/stelle.ts \
${dir_quelldatein}/aufbau/zustand.ts \
${dir_quelldatein}/aufbau/figur.ts \
${dir_quelldatein}/aufbau/aktoren/_aktor.ts \
${dir_quelldatein}/aufbau/aktoren/erzeuger.ts \
${dir_quelldatein}/aufbau/aktoren/annehmer.ts \
${dir_quelldatein}/aufbau/aktoren/verwerfer.ts \
${dir_quelldatein}/aufbau/aktoren/befoerderer.ts \
${dir_quelldatein}/aufbau/aktoren/schreiber.ts \
${dir_quelldatein}/aufbau/aktoren/leser.ts \
${dir_quelldatein}/aufbau/aktoren/aktor.ts \
${dir_quelldatein}/aufbau/welt.ts \
${dir_quelldatein}/aufbau/aufgaben/test.ts \
${dir_quelldatein}/aufbau/aufgaben/akzeptortest.ts \
${dir_quelldatein}/aufbau/aufgaben/transduktortest.ts \
${dir_quelldatein}/aufbau/aufgaben/aufgabe.ts \
${dir_quelldatein}/aufbau/aufgaben/akzeptoraufgabe.ts \
${dir_quelldatein}/aufbau/aufgaben/transduktoraufgabe.ts \
${dir_quelldatein}/aufbau/aufgaben/aufgabe_.ts \
${dir_quelldatein}/aufbau/aufgaben/aufgabe.ts \
${dir_quelldatein}/aufbau/modus.ts \
${dir_quelldatein}/aufbau/partie.ts \
${dir_quelldatein}/manifestation/manifestation.ts \

View file

@ -0,0 +1,103 @@
/*
* 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_aufbau
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor = typ_komplex<any>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type schnittstelle_aktor =
{
beispiel : ()=>typ_aktor;
drehen : (aktor : typ_aktor, inkrement : int)=>void;
verwenden : (aktor : typ_aktor, figur : typ_figur)=>void;
exportieren : (aktor : typ_aktor)=>any;
importieren : (roh : any)=>typ_aktor;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export var implementierung_aktor : {[art : string] : schnittstelle_aktor} = {};
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erstellen(art : string, kern : any) : typ_aktor
{
return {"art": art, "angaben": kern};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_beispiel(art : string) : typ_aktor
{
return implementierung_aktor[art].beispiel();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_drehen(aktor : typ_aktor, inkrement ?: int) : void
{
return implementierung_aktor[aktor.art].drehen(aktor, inkrement);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_verwenden(aktor : typ_aktor, figur : typ_figur) : void
{
return implementierung_aktor[aktor.art].verwenden(aktor, figur);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_exportieren(aktor : typ_aktor) : any
{
return implementierung_aktor[aktor.art].exportieren(aktor);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_importieren(roh : any) : typ_aktor
{
return implementierung_aktor[roh.art].importieren(roh);
}
}

View file

@ -1,329 +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_aufbau
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor =
{
art : string;
angaben ?: any;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erstellen
(
art : string,
angaben : any = {}
)
: typ_aktor
{
switch (art)
{
case "erzeuger":
{
return {
"art": art,
"angaben": aktor_erzeuger_erstellen(angaben["richtung"]),
};
break;
}
case "annehmer":
{
return {
"art": art,
"angaben": aktor_annehmer_erstellen(),
};
break;
}
case "verwerfer":
{
return {
"art": art,
"angaben": aktor_verwerfer_erstellen(),
};
break;
}
case "befoerderer":
{
return {
"art": art,
"angaben": aktor_befoerderer_erstellen(angaben["richtung"]),
};
break;
}
case "schreiber":
{
return {
"art": art,
"angaben": aktor_schreiber_erstellen(angaben["richtung"], angaben["symbol"]),
};
break;
}
case "leser":
{
return {
"art": art,
"angaben": aktor_leser_erstellen(angaben["richtung"], angaben["symbol_links"], angaben["symbol_rechts"]),
};
break;
}
default:
{
let meldung : string = "unbehandelte Art";
throw (new Error(meldung));
break;
}
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_drehen
(
aktor : typ_aktor,
inkrement ?: int
)
: void
{
switch (aktor.art)
{
case "erzeuger":
{
return aktor_erzeuger_drehen(aktor.angaben, inkrement);
break;
}
case "annehmer":
{
return aktor_annehmer_drehen(aktor.angaben, inkrement);
break;
}
case "verwerfer":
{
return aktor_verwerfer_drehen(aktor.angaben, inkrement);
break;
}
case "befoerderer":
{
return aktor_befoerderer_drehen(aktor.angaben, inkrement);
break;
}
case "schreiber":
{
return aktor_schreiber_drehen(aktor.angaben, inkrement);
break;
}
case "leser":
{
return aktor_leser_drehen(aktor.angaben, inkrement);
break;
}
default:
{
let meldung : string = "unbehandelt";
throw (new Error(meldung));
break;
}
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_verwenden
(
aktor : typ_aktor,
figur : typ_figur
)
: void
{
switch (aktor.art)
{
case "erzeuger":
{
return aktor_erzeuger_verwenden(aktor.angaben, figur);
break;
}
case "annehmer":
{
return aktor_annehmer_verwenden(aktor.angaben, figur);
break;
}
case "verwerfer":
{
return aktor_verwerfer_verwenden(aktor.angaben, figur);
break;
}
case "befoerderer":
{
return aktor_befoerderer_verwenden(aktor.angaben, figur);
break;
}
case "schreiber":
{
return aktor_schreiber_verwenden(aktor.angaben, figur);
break;
}
case "leser":
{
return aktor_leser_verwenden(aktor.angaben, figur);
break;
}
default:
{
let meldung : string = "unbehandelt";
throw (new Error(meldung));
break;
}
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_exportieren
(
aktor : typ_aktor
)
: any
{
switch (aktor.art)
{
case "erzeuger":
{
return aktor_erzeuger_exportieren(aktor.angaben);
break;
}
case "annehmer":
{
return aktor_annehmer_exportieren(aktor.angaben);
break;
}
case "verwerfer":
{
return aktor_verwerfer_exportieren(aktor.angaben);
break;
}
case "befoerderer":
{
return aktor_befoerderer_exportieren(aktor.angaben);
break;
}
case "schreiber":
{
return aktor_schreiber_exportieren(aktor.angaben);
break;
}
case "leser":
{
return aktor_leser_exportieren(aktor.angaben);
break;
}
default:
{
let meldung : string = "unbehandelt";
throw (new Error(meldung));
break;
}
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_importieren
(
roh : any
)
: typ_aktor
{
switch (roh["art"])
{
case "erzeuger":
{
return {
"art": roh["art"],
"angaben": aktor_erzeuger_importieren(roh["angaben"]),
};
break;
}
case "annehmer":
{
return {
"art": roh["art"],
"angaben": aktor_annehmer_importieren(roh["angaben"]),
};
break;
}
case "verwerfer":
{
return {
"art": roh["art"],
"angaben": aktor_verwerfer_importieren(roh["angaben"]),
};
break;
}
case "befoerderer":
{
return {
"art": roh["art"],
"angaben": aktor_befoerderer_importieren(roh["angaben"]),
};
break;
}
case "schreiber":
{
return {
"art": roh["art"],
"angaben": aktor_schreiber_importieren(roh["angaben"]),
};
break;
}
case "leser":
{
return {
"art": roh["art"],
"angaben": aktor_leser_importieren(roh["angaben"]),
};
break;
}
default:
{
let meldung : string = "unbehandelte Art";
throw (new Error(meldung));
break;
}
}
}
}

View file

@ -3,16 +3,16 @@
* 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 export function aktor_annehmer_License as published by
* 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 export function aktor_annehmer_License for more details.
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General export function aktor_annehmer_License
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@ -22,7 +22,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor_annehmer =
export type typ_annehmer =
{
}
;
@ -31,10 +31,10 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_annehmer_erstellen
function annehmer_erstellen
(
)
: typ_aktor_annehmer
: typ_annehmer
{
return {
};
@ -44,7 +44,36 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_annehmer_drehen(aktor_annehmer : typ_aktor_annehmer, inkrement ?: int) : void
export function annehmer_erstellen_aktor
(
)
: typ_aktor
{
return {"art": "annehmer", "angaben": annehmer_erstellen()};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function annehmer_beispiel
(
)
: typ_annehmer
{
return annehmer_erstellen();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function annehmer_drehen
(
annehmer : typ_annehmer,
inkrement ?: int
)
: void
{
}
@ -52,7 +81,12 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_annehmer_verwenden(aktor_annehmer : typ_aktor_annehmer, figur : typ_figur) : void
function annehmer_verwenden
(
annehmer : typ_annehmer,
figur : typ_figur
)
: void
{
figur_annehmen(figur);
}
@ -61,7 +95,11 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_annehmer_exportieren(aktor_annehmer : typ_aktor_annehmer) : any
function annehmer_exportieren
(
annehmer : typ_annehmer
)
: any
{
return {
};
@ -71,15 +109,35 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_annehmer_importieren(roh : any) : typ_aktor_annehmer
function annehmer_importieren
(
roh : any
)
: typ_annehmer
{
return (
aktor_annehmer_erstellen
annehmer_erstellen
(
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
let wrap = (angaben => ({"art": "annehmer", "angaben": angaben}));
let unwrap = (aktor => aktor.angaben);
implementierung_aktor["annehmer"] =
{
"beispiel": () => wrap(annehmer_beispiel()),
"drehen": (aktor, inkrement) => annehmer_drehen(unwrap(aktor), inkrement),
"verwenden": (aktor, figur) => annehmer_verwenden(unwrap(aktor), figur),
"exportieren": (aktor) => ({"art": "annehmer_", "angaben": annehmer_exportieren(aktor.angaben)}),
"importieren": (roh) => wrap(annehmer_importieren(roh)),
}
;
}

View file

@ -3,16 +3,16 @@
* 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 export function aktor_befoerderer_License as published by
* 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 export function aktor_befoerderer_License for more details.
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General export function aktor_befoerderer_License
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@ -22,7 +22,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor_befoerderer =
export type typ_befoerderer =
{
richtung : typ_richtung;
}
@ -32,7 +32,11 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_befoerderer_erstellen(richtung : typ_richtung = 0) : typ_aktor_befoerderer
function befoerderer_erstellen
(
richtung : typ_richtung
)
: typ_befoerderer
{
return {
"richtung": richtung,
@ -43,37 +47,80 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_befoerderer_richtung_lesen(aktor_befoerderer : typ_aktor_befoerderer) : typ_richtung
export function befoerderer_erstellen_aktor
(
richtung : typ_richtung
)
: typ_aktor
{
return aktor_befoerderer.richtung;
return {"art": "befoerderer", "angaben": befoerderer_erstellen(richtung)};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_befoerderer_drehen(aktor_befoerderer : typ_aktor_befoerderer, inkrement : int = +1) : void
function befoerderer_beispiel
(
)
: typ_befoerderer
{
aktor_befoerderer.richtung = richtung_addieren(aktor_befoerderer.richtung, inkrement);
return befoerderer_erstellen(0);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_befoerderer_verwenden(aktor_befoerderer : typ_aktor_befoerderer, figur : typ_figur) : void
export function befoerderer_richtung_lesen
(
befoerderer : typ_befoerderer
)
: typ_richtung
{
figur_bewegen(figur, aktor_befoerderer.richtung);
return befoerderer.richtung;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_befoerderer_exportieren(aktor_befoerderer : typ_aktor_befoerderer) : any
function befoerderer_drehen
(
befoerderer : typ_befoerderer,
inkrement : int = +1
)
: void
{
befoerderer.richtung = richtung_addieren(befoerderer.richtung, inkrement);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function befoerderer_verwenden
(
befoerderer : typ_befoerderer,
figur : typ_figur
)
: void
{
figur_bewegen(figur, befoerderer.richtung);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function befoerderer_exportieren
(
befoerderer : typ_befoerderer
)
: any
{
return {
"richtung": richtung_exportieren(aktor_befoerderer.richtung),
"richtung": richtung_exportieren(befoerderer.richtung),
};
}
@ -81,16 +128,36 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_befoerderer_importieren(roh : any) : typ_aktor_befoerderer
function befoerderer_importieren
(
roh : any
)
: typ_befoerderer
{
return (
aktor_befoerderer_erstellen
befoerderer_erstellen
(
richtung_importieren(roh["richtung"])
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
let wrap = (angaben => ({"art": "befoerderer", "angaben": angaben}));
let unwrap = (aktor => aktor.angaben);
implementierung_aktor["befoerderer"] =
{
"beispiel": () => wrap(befoerderer_beispiel()),
"drehen": (aktor, inkrement) => befoerderer_drehen(unwrap(aktor), inkrement),
"verwenden": (aktor, figur) => befoerderer_verwenden(unwrap(aktor), figur),
"exportieren": (aktor) => ({"art": "befoerderer", "angaben": befoerderer_exportieren(aktor.angaben)}),
"importieren": (roh) => wrap(befoerderer_importieren(roh)),
}
;
}

View file

@ -22,7 +22,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor_erzeuger =
export type typ_erzeuger =
{
richtung : typ_richtung;
}
@ -32,11 +32,11 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erzeuger_erstellen
function erzeuger_erstellen
(
richtung : typ_richtung = 0
richtung : typ_richtung
)
: typ_aktor_erzeuger
: typ_erzeuger
{
return {
"richtung": richtung,
@ -47,55 +47,80 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erzeuger_richtung_lesen
export function erzeuger_erstellen_aktor
(
aktor_erzeuger : typ_aktor_erzeuger
richtung : typ_richtung
)
: typ_richtung
: typ_aktor
{
return aktor_erzeuger.richtung;
return {"art": "erzeuger", "angaben": erzeuger_erstellen(richtung)};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erzeuger_drehen
function erzeuger_beispiel
(
aktor_erzeuger : typ_aktor_erzeuger,
)
: typ_erzeuger
{
return erzeuger_erstellen(0);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function erzeuger_richtung_lesen
(
erzeuger : typ_erzeuger
)
: typ_richtung
{
return erzeuger.richtung;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function erzeuger_drehen
(
erzeuger : typ_erzeuger,
inkrement : int = +1
)
: void
{
aktor_erzeuger.richtung = richtung_addieren(aktor_erzeuger.richtung, inkrement);
erzeuger.richtung = richtung_addieren(erzeuger.richtung, inkrement);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erzeuger_verwenden
function erzeuger_verwenden
(
aktor_erzeuger : typ_aktor_erzeuger,
erzeuger : typ_erzeuger,
figur : typ_figur
)
: void
{
figur_bewegen(figur, aktor_erzeuger.richtung);
figur_bewegen(figur, erzeuger.richtung);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erzeuger_exportieren
function erzeuger_exportieren
(
aktor_erzeuger : typ_aktor_erzeuger
erzeuger : typ_erzeuger
)
: any
{
return {
"richtung": richtung_exportieren(aktor_erzeuger.richtung),
"richtung": richtung_exportieren(erzeuger.richtung),
};
}
@ -103,20 +128,36 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_erzeuger_importieren
function erzeuger_importieren
(
roh : any
)
: typ_aktor_erzeuger
: typ_erzeuger
{
return (
aktor_erzeuger_erstellen
erzeuger_erstellen
(
richtung_importieren(roh["richtung"])
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
let wrap = (angaben => ({"art": "erzeuger", "angaben": angaben}));
let unwrap = (aktor => aktor.angaben);
implementierung_aktor["erzeuger"] =
{
"beispiel": () => wrap(erzeuger_beispiel()),
"drehen": (aktor, inkrement) => erzeuger_drehen(unwrap(aktor), inkrement),
"verwenden": (aktor, figur) => erzeuger_verwenden(unwrap(aktor), figur),
"exportieren": (aktor) => ({"art": "erzeuger", "angaben": erzeuger_exportieren(aktor.angaben)}),
"importieren": (roh) => wrap(erzeuger_importieren(roh)),
}
;
}

View file

@ -3,16 +3,16 @@
* 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 export function aktor_leser_License as published by
* 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 export function aktor_leser_License for more details.
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General export function aktor_leser_License
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@ -22,7 +22,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor_leser =
export type typ_leser =
{
"richtung": typ_richtung,
"symbol_links": typ_symbol,
@ -34,7 +34,13 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_erstellen(richtung : typ_richtung = 0, symbol_links : typ_symbol = 0, symbol_rechts : typ_symbol = 1) : typ_aktor_leser
function leser_erstellen
(
richtung : typ_richtung,
symbol_links : typ_symbol,
symbol_rechts : typ_symbol
)
: typ_leser
{
return {
"richtung": richtung,
@ -47,55 +53,104 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_richtung_lesen(aktor_leser : typ_aktor_leser) : typ_richtung
export function leser_erstellen_aktor
(
richtung : typ_richtung,
symbol_links : typ_symbol,
symbol_rechts : typ_symbol
)
: typ_aktor
{
return aktor_leser.richtung;
return {"art": "leser", "angaben": leser_erstellen(richtung, symbol_links, symbol_rechts)};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_symbol_links_lesen(aktor_leser : typ_aktor_leser) : typ_symbol
function leser_beispiel
(
)
: typ_leser
{
return aktor_leser.symbol_links;
return leser_erstellen(0, 0, 1);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_symbol_rechts_lesen(aktor_leser : typ_aktor_leser) : typ_symbol
export function leser_richtung_lesen
(
leser : typ_leser
)
: typ_richtung
{
return aktor_leser.symbol_rechts;
return leser.richtung;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_drehen(aktor_leser : typ_aktor_leser, inkrement : int = +1) : void
export function leser_symbol_links_lesen
(
leser : typ_leser
)
: typ_symbol
{
aktor_leser.richtung = richtung_addieren(aktor_leser.richtung, inkrement);
return leser.symbol_links;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_verwenden(aktor_leser : typ_aktor_leser, figur : typ_figur) : void
export function leser_symbol_rechts_lesen
(
leser : typ_leser
)
: typ_symbol
{
return leser.symbol_rechts;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function leser_drehen
(
leser : typ_leser,
inkrement : int = +1
)
: void
{
leser.richtung = richtung_addieren(leser.richtung, inkrement);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function leser_verwenden
(
leser : typ_leser,
figur : typ_figur
)
: void
{
let symbol_ : schnittstelle_fehlermonade<typ_symbol> = figur_lesen(figur);
let summand : typ_richtung;
if (symbol_.ist_schlicht())
{
let symbol : typ_symbol = symbol_.lesen();
if (symbol === aktor_leser.symbol_links)
if (symbol === leser.symbol_links)
{
figur_schieben(figur);
summand = +2;
}
else if (symbol === aktor_leser.symbol_rechts)
else if (symbol === leser.symbol_rechts)
{
figur_schieben(figur);
summand = -2;
@ -109,7 +164,7 @@ module mod_vtm_aufbau
{
summand = 0;
}
let richtung : typ_richtung = richtung_addieren(aktor_leser.richtung, summand);
let richtung : typ_richtung = richtung_addieren(leser.richtung, summand);
figur_bewegen(figur, richtung);
}
@ -117,12 +172,16 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_exportieren(aktor_leser : typ_aktor_leser) : any
function leser_exportieren
(
leser : typ_leser
)
: any
{
return {
"richtung": richtung_exportieren(aktor_leser.richtung),
"symbol_links": symbol_exportieren(aktor_leser.symbol_links),
"symbol_rechts": symbol_exportieren(aktor_leser.symbol_rechts),
"richtung": richtung_exportieren(leser.richtung),
"symbol_links": symbol_exportieren(leser.symbol_links),
"symbol_rechts": symbol_exportieren(leser.symbol_rechts),
};
}
@ -130,10 +189,14 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_leser_importieren(roh : any) : typ_aktor_leser
function leser_importieren
(
roh : any
)
: typ_leser
{
return (
aktor_leser_erstellen
leser_erstellen
(
richtung_importieren(roh["richtung"]),
symbol_importieren(roh["symbol_links"]),
@ -142,6 +205,22 @@ module mod_vtm_aufbau
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
let wrap = (angaben => ({"art": "leser", "angaben": angaben}));
let unwrap = (aktor => aktor.angaben);
implementierung_aktor["leser"] =
{
"beispiel": () => wrap(leser_beispiel()),
"drehen": (aktor, inkrement) => leser_drehen(unwrap(aktor), inkrement),
"verwenden": (aktor, figur) => leser_verwenden(unwrap(aktor), figur),
"exportieren": (aktor) => ({"art": "leser", "angaben": leser_exportieren(aktor.angaben)}),
"importieren": (roh) => wrap(leser_importieren(roh)),
}
;
}

View file

@ -3,16 +3,16 @@
* 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 export function aktor_schreiber_License as published by
* 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 export function aktor_schreiber_License for more details.
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General export function aktor_schreiber_License
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@ -22,7 +22,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor_schreiber =
export type typ_schreiber =
{
richtung : typ_richtung;
symbol : typ_symbol;
@ -33,60 +33,16 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_schreiber_erstellen(richtung : typ_richtung = 0, symbol : typ_symbol = 0) : typ_aktor_schreiber
function schreiber_erstellen
(
richtung : typ_richtung,
symbol : typ_symbol
)
: typ_schreiber
{
return {
"richtung": richtung,
"symbol": symbol,
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_schreiber_richtung_lesen(aktor_schreiber : typ_aktor_schreiber) : typ_richtung
{
return aktor_schreiber.richtung;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_schreiber_symbol_lesen(aktor_schreiber : typ_aktor_schreiber) : typ_symbol
{
return aktor_schreiber.symbol;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_schreiber_drehen(aktor_schreiber : typ_aktor_schreiber, inkrement : int = +1) : void
{
aktor_schreiber.richtung = richtung_addieren(aktor_schreiber.richtung, inkrement);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_schreiber_verwenden(aktor_schreiber : typ_aktor_schreiber, figur : typ_figur) : void
{
figur_schreiben(figur, aktor_schreiber.symbol);
figur_bewegen(figur, aktor_schreiber.richtung);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_schreiber_exportieren(aktor_schreiber : typ_aktor_schreiber) : any
{
return {
"richtung": richtung_exportieren(aktor_schreiber.richtung),
"symbol": symbol_exportieren(aktor_schreiber.symbol),
};
}
@ -94,10 +50,111 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_schreiber_importieren(roh : any) : typ_aktor_schreiber
export function schreiber_erstellen_aktor
(
richtung : typ_richtung,
symbol : typ_symbol
)
: typ_aktor
{
return {"art": "schreiber", "angaben": schreiber_erstellen(richtung, symbol)};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function schreiber_beispiel
(
)
: typ_schreiber
{
return schreiber_erstellen(0, 0);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function schreiber_richtung_lesen
(
schreiber : typ_schreiber
)
: typ_richtung
{
return schreiber.richtung;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function schreiber_symbol_lesen
(
schreiber : typ_schreiber
)
: typ_symbol
{
return schreiber.symbol;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function schreiber_drehen
(
schreiber : typ_schreiber,
inkrement : int = +1
)
: void
{
schreiber.richtung = richtung_addieren(schreiber.richtung, inkrement);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function schreiber_verwenden
(
schreiber : typ_schreiber,
figur : typ_figur
)
: void
{
figur_schreiben(figur, schreiber.symbol);
figur_bewegen(figur, schreiber.richtung);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function schreiber_exportieren
(
schreiber : typ_schreiber
)
: any
{
return {
"richtung": richtung_exportieren(schreiber.richtung),
"symbol": symbol_exportieren(schreiber.symbol),
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function schreiber_importieren
(
roh : any
)
: typ_schreiber
{
return (
aktor_schreiber_erstellen
schreiber_erstellen
(
richtung_importieren(roh["richtung"]),
symbol_importieren(roh["symbol"])
@ -105,6 +162,22 @@ module mod_vtm_aufbau
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
let wrap = (angaben => ({"art": "schreiber", "angaben": angaben}));
let unwrap = (aktor => aktor.angaben);
implementierung_aktor["schreiber"] =
{
"beispiel": () => wrap(schreiber_beispiel()),
"drehen": (aktor, inkrement) => schreiber_drehen(unwrap(aktor), inkrement),
"verwenden": (aktor, figur) => schreiber_verwenden(unwrap(aktor), figur),
"exportieren": (aktor) => ({"art": "schreiber", "angaben": schreiber_exportieren(aktor.angaben)}),
"importieren": (roh) => wrap(schreiber_importieren(roh)),
}
;
}

View file

@ -3,16 +3,16 @@
* 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 export function aktor_verwerfer_License as published by
* 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 export function aktor_verwerfer_License for more details.
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General export function aktor_verwerfer_License
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@ -22,7 +22,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_aktor_verwerfer =
export type typ_verwerfer =
{
}
;
@ -31,7 +31,10 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_verwerfer_erstellen() : typ_aktor_verwerfer
function verwerfer_erstellen
(
)
: typ_verwerfer
{
return {
};
@ -41,7 +44,36 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_verwerfer_drehen(aktor_verwerfer : typ_aktor_verwerfer, inkrement ?: int) : void
export function verwerfer_erstellen_aktor
(
)
: typ_aktor
{
return {"art": "verwerfer", "angaben": verwerfer_erstellen()};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function verwerfer_beispiel
(
)
: typ_verwerfer
{
return verwerfer_erstellen();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function verwerfer_drehen
(
verwerfer : typ_verwerfer,
inkrement ?: int
)
: void
{
}
@ -49,7 +81,12 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_verwerfer_verwenden(aktor_verwerfer : typ_aktor_verwerfer, figur : typ_figur) : void
function verwerfer_verwenden
(
verwerfer : typ_verwerfer,
figur : typ_figur
)
: void
{
figur_verwerfen(figur);
}
@ -58,7 +95,11 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_verwerfer_exportieren(aktor_verwerfer : typ_aktor_verwerfer) : any
function verwerfer_exportieren
(
verwerfer : typ_verwerfer
)
: any
{
return {
};
@ -68,15 +109,35 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aktor_verwerfer_importieren(roh : any) : typ_aktor_verwerfer
function verwerfer_importieren
(
roh : any
)
: typ_verwerfer
{
return (
aktor_verwerfer_erstellen
verwerfer_erstellen
(
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
let wrap = (angaben => ({"art": "verwerfer", "angaben": angaben}));
let unwrap = (aktor => aktor.angaben);
implementierung_aktor["verwerfer"] =
{
"beispiel": () => wrap(verwerfer_beispiel()),
"drehen": (aktor, inkrement) => verwerfer_drehen(unwrap(aktor), inkrement),
"verwenden": (aktor, figur) => verwerfer_verwenden(unwrap(aktor), figur),
"exportieren": (aktor) => ({"art": "verwerfer", "angaben": verwerfer_exportieren(aktor.angaben)}),
"importieren": (roh) => wrap(verwerfer_importieren(roh)),
}
;
}

View file

@ -22,85 +22,86 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_akzeptoraufgabe
implements schnittstelle_aufgabe
export type typ_akzeptoraufgabe =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private id : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private titel_ : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private text_ : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private tests_ : Array<schnittstelle_test>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(id : string, titel : string, text : string, tests : Array<klasse_akzeptortest>)
{
this.id = id;
this.titel_ = titel;
this.text_ = text;
this.tests_ = tests;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public id_lesen() : string
{
return this.id;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public titel() : string
{
return this.titel_;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public text() : string
{
return this.text_;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public tests() : Array<schnittstelle_test>
{
return this.tests_;
}
id : string;
titel : string;
text : string;
tests : Array<typ_akzeptortest>;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptoraufgabe_erstellen
(
id : string,
titel : string,
text : string,
tests : Array<typ_akzeptortest>
)
: typ_akzeptoraufgabe
{
return {
"id": id,
"titel": titel,
"text": text,
"tests": tests,
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptoraufgabe_id
(
akzeptoraufgabe : typ_akzeptoraufgabe
)
: string
{
return akzeptoraufgabe.id;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptoraufgabe_titel
(
akzeptoraufgabe : typ_akzeptoraufgabe
)
: string
{
return akzeptoraufgabe.titel;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptoraufgabe_text
(
akzeptoraufgabe : typ_akzeptoraufgabe
)
: string
{
return akzeptoraufgabe.text;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptoraufgabe_tests
(
akzeptoraufgabe : typ_akzeptoraufgabe
)
: Array<typ_akzeptortest>
{
return akzeptoraufgabe.tests;
}
}

View file

@ -22,51 +22,56 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_akzeptortest
implements schnittstelle_test
export type typ_akzeptortest =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private eingabe_ : Array<typ_symbol>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private annehmen : boolean;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(eingabe : Array<typ_symbol>, annehmen : boolean)
{
this.eingabe_ = eingabe;
this.annehmen = annehmen;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public eingabe() : Array<typ_symbol>
{
return this.eingabe_;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public pruefen(angenommen : boolean, ausgabe : Array<typ_symbol>) : boolean
{
return (this.annehmen === angenommen);
}
eingabe : Array<typ_symbol>;
annehmen : boolean;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptortest_erstellen
(
eingabe : Array<typ_symbol>,
annehmen : boolean
)
: typ_akzeptortest
{
return {
"eingabe": eingabe,
"annehmen": annehmen,
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptortest_eingabe
(
akzeptortest : typ_akzeptortest
)
: Array<typ_symbol>
{
return akzeptortest.eingabe;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function akzeptortest_pruefen
(
akzeptortest : typ_akzeptortest,
angenommen : boolean,
ausgabe : Array<typ_symbol>
)
: boolean
{
return (akzeptortest.annehmen === angenommen);
}
}

View file

@ -22,32 +22,191 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export interface schnittstelle_aufgabe
export type typ_aufgabe = typ_komplex<Object>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
var _liste : Array<typ_aufgabe> = [];
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_id
(
aufgabe : typ_aufgabe
)
: string
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
id_lesen() : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
titel() : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
text() : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
tests() : Array<schnittstelle_test>;
return (
fallunterscheidung<string>
(
aufgabe,
{
"akzeptoraufgabe": (angaben) => akzeptoraufgabe_id(angaben),
"transduktoraufgabe": (angaben) => transduktoraufgabe_id(angaben),
}
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_titel
(
aufgabe : typ_aufgabe
)
: string
{
return (
fallunterscheidung<string>
(
aufgabe,
{
"akzeptoraufgabe": (angaben) => akzeptoraufgabe_titel(angaben),
"transduktoraufgabe": (angaben) => transduktoraufgabe_titel(angaben),
}
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_text
(
aufgabe : typ_aufgabe
)
: string
{
return (
fallunterscheidung<string>
(
aufgabe,
{
"akzeptoraufgabe": (angaben) => akzeptoraufgabe_text(angaben),
"transduktoraufgabe": (angaben) => transduktoraufgabe_text(angaben),
}
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_tests
(
aufgabe : typ_aufgabe
)
: Array<typ_test>
{
return (
fallunterscheidung<Array<typ_test>>
(
aufgabe,
{
"akzeptoraufgabe": (angaben) => (
akzeptoraufgabe_tests(angaben)
.map(angaben_ => ({"art": "akzeptortest", "angaben": angaben_}))
),
"transduktoraufgabe": (angaben) => (
transduktoraufgabe_tests(angaben)
.map(angaben_ => ({"art": "transduktortest", "angaben": angaben_}))
),
}
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_importieren(aufgabe_roh : any) : typ_aufgabe
{
switch (aufgabe_roh["art"])
{
case "akzeptor":
{
return {
"art": "akzeptoraufgabe",
"angaben": (
akzeptoraufgabe_erstellen
(
aufgabe_roh["id"],
aufgabe_roh["parameter"]["titel"],
aufgabe_roh["parameter"]["text"],
aufgabe_roh["parameter"]["tests"].map
(
test_roh => (
akzeptortest_erstellen
(
test_roh["eingabe"],
test_roh["annehmen"]
)
)
)
)
)
};
break;
}
case "transduktor":
{
return {
"art": "transduktoraufgabe",
"angaben": (
transduktoraufgabe_erstellen
(
aufgabe_roh["id"],
aufgabe_roh["parameter"]["titel"],
aufgabe_roh["parameter"]["text"],
aufgabe_roh["parameter"]["tests"].map
(
test_roh => (
transduktortest_erstellen
(
test_roh["eingabe"],
test_roh["ausgabe"]
)
)
)
)
)
};
break;
}
default:
{
let meldung : string = "unbehandelte Art";
throw (new Error(meldung));
break;
}
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_registrieren(aufgabe : typ_aufgabe) : void
{
_liste.push(aufgabe);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_holen(index : int) : typ_aufgabe
{
return _liste[index];
}
}

View file

@ -1,95 +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_aufbau
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
var _liste : Array<schnittstelle_aufgabe> = [];
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function aufgabe_erstellen(aufgabe_roh : any) : schnittstelle_aufgabe
{
switch (aufgabe_roh["art"])
{
case "akzeptor":
{
return (
new klasse_akzeptoraufgabe
(
aufgabe_roh["id"],
aufgabe_roh["parameter"]["titel"],
aufgabe_roh["parameter"]["text"],
aufgabe_roh["parameter"]["tests"].map
(
test_roh => (new klasse_akzeptortest(test_roh["eingabe"], test_roh["annehmen"]))
)
)
);
break;
}
case "transduktor":
{
return (
new klasse_transduktoraufgabe
(
aufgabe_roh["id"],
aufgabe_roh["parameter"]["titel"],
aufgabe_roh["parameter"]["text"],
aufgabe_roh["parameter"]["tests"].map
(
test_roh => (new klasse_transduktortest(test_roh["eingabe"], test_roh["ausgabe"]))
)
)
);
break;
}
default:
{
let meldung : string = "unbehandelte Art";
throw (new Error(meldung));
break;
}
}
}
/**
* @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

@ -22,21 +22,100 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export interface schnittstelle_test
export type typ_test = typ_komplex<Object>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function test_eingabe
(
test : typ_test
)
: Array<typ_symbol>
{
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
eingabe() : Array<typ_symbol>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
pruefen(angenommen : boolean, ausgabe : Array<typ_symbol>) : boolean;
return (
fallunterscheidung<Array<typ_symbol>>
(
test,
{
"akzeptortest": (angaben) => akzeptortest_eingabe(angaben),
"transduktortest": (angaben) => transduktortest_eingabe(angaben),
}
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function test_pruefen
(
test : typ_test,
angenommen : boolean,
ausgabe : Array<typ_symbol>
)
: boolean
{
return (
fallunterscheidung<boolean>
(
test,
{
"akzeptortest": (angaben) => akzeptortest_pruefen(angaben, angenommen, ausgabe),
"transduktortest": (angaben) => transduktortest_pruefen(angaben, angenommen, ausgabe),
}
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function test_importieren
(
test_roh : any
)
: typ_test
{
switch (test_roh["art"])
{
case "akzeptortest":
{
return {
"art": "akzeptortest",
"angaben": (
akzeptortest_erstellen
(
test_roh["angaben"]["eingabe"],
test_roh["angaben"]["annehmen"]
)
),
};
break;
}
case "transduktortest":
{
return {
"art": "transduktortest",
"angaben": (
transduktortest_erstellen
(
test_roh["angaben"]["eingabe"],
test_roh["angaben"]["ausgabe"]
)
),
};
break;
}
default:
{
throw (new Error("unbehandelt"));
break;
}
}
}
}

View file

@ -22,85 +22,86 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_transduktoraufgabe
implements schnittstelle_aufgabe
export type typ_transduktoraufgabe =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private id : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private titel_ : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private text_ : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private tests_ : Array<schnittstelle_test>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(id : string, titel : string, text : string, tests : Array<klasse_transduktortest>)
{
this.id = id;
this.titel_ = titel;
this.text_ = text;
this.tests_ = tests;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public id_lesen() : string
{
return this.id;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public titel() : string
{
return this.titel_;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public text() : string
{
return this.text_;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public tests() : Array<schnittstelle_test>
{
return this.tests_;
}
id : string;
titel : string;
text : string;
tests : Array<typ_transduktortest>;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktoraufgabe_erstellen
(
id : string,
titel : string,
text : string,
tests : Array<typ_transduktortest>
)
: typ_transduktoraufgabe
{
return {
"id": id,
"titel": titel,
"text": text,
"tests": tests,
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktoraufgabe_id
(
transduktoraufgabe : typ_transduktoraufgabe
)
: string
{
return transduktoraufgabe.id;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktoraufgabe_titel
(
transduktoraufgabe : typ_transduktoraufgabe
)
: string
{
return transduktoraufgabe.titel;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktoraufgabe_text
(
transduktoraufgabe : typ_transduktoraufgabe
)
: string
{
return transduktoraufgabe.text;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktoraufgabe_tests
(
transduktoraufgabe : typ_transduktoraufgabe
)
: Array<typ_transduktortest>
{
return transduktoraufgabe.tests;
}
}

View file

@ -22,72 +22,77 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_transduktortest
implements schnittstelle_test
export type typ_transduktortest =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private eingabe_ : Array<typ_symbol>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private ausgabe : Array<typ_symbol>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(eingabe : Array<typ_symbol>, ausgabe : Array<typ_symbol>)
{
this.eingabe_ = eingabe;
this.ausgabe = ausgabe;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public eingabe() : Array<typ_symbol>
{
return this.eingabe_;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public pruefen(angenommen : boolean, ausgabe : Array<typ_symbol>) : boolean
{
if (this.ausgabe.length !== ausgabe.length)
{
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]))
{
gleich = false;
break;
}
else
{
// nichts tun
}
}
return gleich;
}
}
eingabe : Array<typ_symbol>;
ausgabe : Array<typ_symbol>;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktortest_erstellen
(
eingabe : Array<typ_symbol>,
ausgabe : Array<typ_symbol>
)
: typ_transduktortest
{
return {
"eingabe": eingabe,
"ausgabe": ausgabe,
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktortest_eingabe
(
transduktortest : typ_transduktortest
)
: Array<typ_symbol>
{
return transduktortest.eingabe;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function transduktortest_pruefen
(
transduktortest : typ_transduktortest,
angenommen : boolean,
ausgabe : Array<typ_symbol>
)
: boolean
{
if (transduktortest.ausgabe.length !== ausgabe.length)
{
return false;
}
else
{
let gleich : boolean = true;
for (let index : int = 0; index < transduktortest.ausgabe.length; index += 1)
{
if (! symbol_vergleichen(transduktortest.ausgabe[index], ausgabe[index]))
{
gleich = false;
break;
}
else
{
// nichts tun
}
}
return gleich;
}
}
}

View file

@ -26,7 +26,7 @@ module mod_vtm_aufbau
{
welt : typ_welt;
figur : schnittstelle_fehlermonade<typ_figur>;
aufgabe : schnittstelle_aufgabe;
aufgabe : typ_aufgabe;
testindex : schnittstelle_fehlermonade<int>;
modus : typ_modus;
lauscher : {[ereignis : string] : Array<(angaben ?: any)=>void>};
@ -39,7 +39,7 @@ module mod_vtm_aufbau
*/
export function partie_erstellen
(
aufgabe : schnittstelle_aufgabe
aufgabe : typ_aufgabe
)
: typ_partie
{
@ -127,7 +127,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function partie_aufgabe_lesen(partie : typ_partie) : schnittstelle_aufgabe
export function partie_aufgabe_lesen(partie : typ_partie) : typ_aufgabe
{
return partie.aufgabe;
}
@ -136,7 +136,7 @@ module mod_vtm_aufbau
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function partie_aufgabe_setzen(partie : typ_partie, aufgabe : schnittstelle_aufgabe) : void
export function partie_aufgabe_setzen(partie : typ_partie, aufgabe : typ_aufgabe) : void
{
partie.aufgabe = aufgabe;
// partie.welt_leeren();
@ -272,8 +272,8 @@ module mod_vtm_aufbau
{
if (! partie.figur.ist_schlicht())
{
let test : schnittstelle_test = partie.aufgabe.tests()[partie.testindex.lesen()];
let band : Array<typ_symbol> = mod_vtm_helfer.liste_kopieren<typ_symbol>(test.eingabe());
let test : typ_test = aufgabe_tests(partie.aufgabe)[partie.testindex.lesen()];
let band : Array<typ_symbol> = mod_vtm_helfer.liste_kopieren<typ_symbol>(test_eingabe(test));
let stelle : typ_stelle = welt_erzeuger_finden(partie.welt);
partie.figur = (
new klasse_schlicht<typ_figur>
@ -291,7 +291,7 @@ module mod_vtm_aufbau
let figur : typ_figur = partie.figur.lesen();
let stelle : typ_stelle = figur_stelle_lesen(figur);
let aktor_ : schnittstelle_fehlermonade<typ_aktor> = welt_feld_holen(partie.welt, stelle);
let aktor : typ_aktor = (aktor_.ist_schlicht() ? aktor_.lesen() : aktor_erstellen("verwerfer", {}));
let aktor : typ_aktor = (aktor_.ist_schlicht() ? aktor_.lesen() : verwerfer_erstellen_aktor());
aktor_verwenden(aktor, figur);
let zustand : typ_zustand = figur_zustand_lesen(figur);
if (zustand === zustand_laufend)
@ -304,9 +304,9 @@ module mod_vtm_aufbau
let ausgabe : Array<typ_symbol> = figur_band_lesen(figur);
partie.figur = (new klasse_nichts<typ_figur>());
let testindex : int = partie.testindex.lesen();
let tests : Array<schnittstelle_test> = partie.aufgabe.tests();
let test : schnittstelle_test = tests[testindex];
if (! test.pruefen(angenommen, ausgabe))
let tests : Array<typ_test> = aufgabe_tests(partie.aufgabe);
let test : typ_test = tests[testindex];
if (! test_pruefen(test, angenommen, ausgabe))
{
partie.modus = modus_fehlerhaft;
partie_benachrichtigen(partie, "aenderung_modus", {});

View file

@ -90,7 +90,7 @@ module mod_vtm_aufbau
[
{
"pruefer": (aktor) => (aktor.art === "befoerderer"),
"ersteller": () => aktor_erstellen("befoerderer"),
"ersteller": () => befoerderer_erstellen_aktor(0),
},
]
)
@ -104,7 +104,7 @@ module mod_vtm_aufbau
{
if (aktor.art === "schreiber")
{
return (aktor_schreiber_symbol_lesen(aktor.angaben) === symbol);
return (schreiber_symbol_lesen(aktor.angaben) === symbol);
}
else
{
@ -112,7 +112,7 @@ module mod_vtm_aufbau
}
}
,
"ersteller": () => aktor_erstellen("schreiber", {"richtung": 0, "symbol": symbol})
"ersteller": () => schreiber_erstellen_aktor(0, symbol)
}
)
)
@ -132,9 +132,9 @@ module mod_vtm_aufbau
if (aktor.art === "leser")
{
return (
(aktor_leser_symbol_links_lesen(aktor.angaben) === symbol_links)
(leser_symbol_links_lesen(aktor.angaben) === symbol_links)
&&
(aktor_leser_symbol_links_lesen(aktor.angaben) === symbol_rechts)
(leser_symbol_rechts_lesen(aktor.angaben) === symbol_rechts)
);
}
else
@ -143,7 +143,7 @@ module mod_vtm_aufbau
}
}
,
"ersteller": () => aktor_erstellen("leser", {"richtung": 0, "symbol_links": symbol_links, "symbol_rechts": (2*index+1)}),
"ersteller": () => leser_erstellen_aktor(0, symbol_links, symbol_rechts)
}
);
}
@ -154,32 +154,33 @@ module mod_vtm_aufbau
[
{
"pruefer": (aktor) => (aktor.art === "verwerfer"),
"ersteller": () => aktor_erstellen("verwerfer"),
"ersteller": () => verwerfer_erstellen_aktor(),
},
]
)
);
let index_alt : schnittstelle_fehlermonade<int>;
let aktor_alt_ : schnittstelle_fehlermonade<typ_aktor> = welt.felder.holen(stelle);
if (aktor_alt_.ist_schlicht)
if (aktor_alt_.ist_schlicht())
{
let aktor_alt : typ_aktor = aktor_alt_.lesen();
let gefunden : boolean = liste.some
(
(eintrag, index) =>
{
if (eintrag.pruefer(aktor_alt))
{
index_alt = (new klasse_schlicht<int>(index));
return true;
}
else
{
return false;
}
}
)
;
let gefunden : boolean = (
liste.some
(
(eintrag, index) =>
{
if (eintrag.pruefer(aktor_alt))
{
index_alt = (new klasse_schlicht<int>(index));
return true;
}
else
{
return false;
}
}
)
);
if (! gefunden)
{
index_alt = (new klasse_nichts<int>());
@ -281,15 +282,15 @@ module mod_vtm_aufbau
let aktor : typ_aktor;
if ((u === -groesse) && (v === 0))
{
aktor = aktor_erstellen("erzeuger", {"richtung": 0});
aktor = erzeuger_erstellen_aktor(0);
}
else if ((u === +groesse) && (v === 0))
{
aktor = aktor_erstellen("annehmer", {});
aktor = annehmer_erstellen_aktor();
}
else
{
aktor = aktor_erstellen("verwerfer", {});
aktor = verwerfer_erstellen_aktor();
}
welt.felder.setzen(stelle, aktor);
}

View file

@ -0,0 +1,58 @@
/*
* 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/>.
*/
/**
* @author kcf <vidofnir@folksprak.org>
*/
type typ_komplex<typ_angaben> = {art : string; angaben ?: typ_angaben;};
/**
* @author kcf <vidofnir@folksprak.org>
*/
function fallunterscheidung<typ_ergebnis>
(
komplex : typ_komplex<any>,
faelle : {[art : string] : (angaben ?: any)=>typ_ergebnis},
ersatz : schnittstelle_fehlermonade<(komplex : typ_komplex<any>)=>typ_ergebnis> = (new klasse_nichts<(komplex : typ_komplex<any>)=>typ_ergebnis>())
)
: typ_ergebnis
{
if (komplex.art in faelle)
{
let funktion : (angaben ?: any)=>typ_ergebnis = faelle[komplex.art];
let ergebnis : typ_ergebnis = funktion(komplex.angaben);
return ergebnis;
}
else
{
let meldung : string = ("unbehandelte Art '" + komplex.art + "'");
console.warn(meldung);
if (ersatz.ist_schlicht())
{
let ergebnis : typ_ergebnis = ersatz.lesen()(komplex);
return ergebnis;
}
else
{
throw (new Error("unbehandelt"));
}
}
}

View file

@ -19,7 +19,7 @@
/**
* @author kcf <vidofnir@folksprak.org>
*/
function aufgaben_eintragen(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe)=>void) : void
function aufgaben_eintragen(behandler : (aufgabe : mod_vtm_aufbau.typ_aufgabe)=>void) : void
{
let aufgaben_roh_ : schnittstelle_fehlermonade<Array<any>> = mod_vtm_daten.lesen("aufgaben");
if (aufgaben_roh_.ist_schlicht())
@ -32,7 +32,7 @@ function aufgaben_eintragen(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_
{
// Aufgabe registrieren
{
let aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe = mod_vtm_aufbau.aufgabe_erstellen(aufgabe_roh);
let aufgabe : mod_vtm_aufbau.typ_aufgabe = mod_vtm_aufbau.aufgabe_importieren(aufgabe_roh);
mod_vtm_aufbau.aufgabe_registrieren(aufgabe);
}
// Option eintragen
@ -60,7 +60,7 @@ function aufgaben_eintragen(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_
{
let value : string = dom_auswahl["value"];
let index : int = parseInt(value);
let aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe = mod_vtm_aufbau.aufgabe_holen(index);
let aufgabe : mod_vtm_aufbau.typ_aufgabe = mod_vtm_aufbau.aufgabe_holen(index);
behandler(aufgabe);
}
)
@ -115,27 +115,27 @@ function haupt() : void
let hoehe : float = 80;
[
{
"aufbau": mod_vtm_aufbau.aktor_erstellen("erzeuger"),
"aufbau": mod_vtm_aufbau.aktor_beispiel("erzeuger"),
"bereich": document.querySelector("#hilfe_aktoren_aktor_erzeuger"),
},
{
"aufbau": mod_vtm_aufbau.aktor_erstellen("annehmer"),
"aufbau": mod_vtm_aufbau.aktor_beispiel("annehmer"),
"bereich": document.querySelector("#hilfe_aktoren_aktor_annehmer"),
},
{
"aufbau": mod_vtm_aufbau.aktor_erstellen("verwerfer"),
"aufbau": mod_vtm_aufbau.aktor_beispiel("verwerfer"),
"bereich": document.querySelector("#hilfe_aktoren_aktor_verwerfer"),
},
{
"aufbau": mod_vtm_aufbau.aktor_erstellen("befoerderer"),
"aufbau": mod_vtm_aufbau.aktor_beispiel("befoerderer"),
"bereich": document.querySelector("#hilfe_aktoren_aktor_befoerderer"),
},
{
"aufbau": mod_vtm_aufbau.aktor_erstellen("schreiber"),
"aufbau": mod_vtm_aufbau.aktor_beispiel("schreiber"),
"bereich": document.querySelector("#hilfe_aktoren_aktor_schreiber"),
},
{
"aufbau": mod_vtm_aufbau.aktor_erstellen("leser"),
"aufbau": mod_vtm_aufbau.aktor_beispiel("leser"),
"bereich": document.querySelector("#hilfe_aktoren_aktor_leser"),
},
]
@ -143,9 +143,23 @@ function haupt() : void
(
eintrag =>
{
let manifestor = (new mod_vtm_manifestation.klasse_svg_aktor(eintrag.aufbau, mod_vtm_aufbau.stelle_null()));
let xmlknoten : mod_vtm_helfer.schnittstelle_xmlknoten = mod_vtm_manifestation.svg_wurzel(von_x, von_y, bis_x, bis_y, breite, hoehe, [manifestor.darstellen()]);
eintrag.bereich.querySelector(".hilfe_aktoren_aktor_bild").innerHTML = xmlknoten.darstellen();
let manifestor = (
mod_vtm_manifestation.svg_aktor_erstellen_manifestation
(
eintrag.aufbau,
mod_vtm_aufbau.stelle_null()
)
);
let xmlknoten : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_manifestation.svg_wurzel
(
von_x, von_y,
bis_x, bis_y,
breite, hoehe,
[mod_vtm_manifestation.manifestation_darstellen(manifestor)]
)
);
eintrag.bereich.querySelector(".hilfe_aktoren_aktor_bild").innerHTML = mod_vtm_helfer.xmlknoten_darstellen(xmlknoten);
}
)
;
@ -154,17 +168,33 @@ function haupt() : void
}
// Spiel
{
let aufbau : mod_vtm_aufbau.typ_partie;
// let aufbau : mod_vtm_aufbau.typ_partie;
aufgaben_eintragen
(
function (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe) : void {mod_vtm_aufbau.partie_aufgabe_setzen(aufbau, aufgabe);}
function (aufgabe : mod_vtm_aufbau.typ_aufgabe) : void {mod_vtm_aufbau.partie_aufgabe_setzen(aufbau, aufgabe);}
)
;
aufbau = mod_vtm_aufbau.partie_erstellen(mod_vtm_aufbau.aufgabe_holen(0));
(new mod_vtm_manifestation.klasse_web_partie(aufbau, document.querySelector("#bereich_mitte"))).einrichten();
(new mod_vtm_manifestation.klasse_speicher_partie(aufbau)).einrichten();
mod_vtm_manifestation.manifestation_einrichten
(
mod_vtm_manifestation.web_partie_erstellen_erweitert
(
aufbau,
document.querySelector("#bereich_mitte")
)
)
;
mod_vtm_manifestation.manifestation_einrichten
(
mod_vtm_manifestation.speicher_partie_erstellen_erweitert
(
aufbau
)
)
;
}
}
var aufbau : mod_vtm_aufbau.typ_partie = null;
/**

View file

@ -1,160 +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_helfer
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
function einrueckung(tiefe : int, zeichen : string = "\t") : string
{
return ((tiefe === 0) ? "" : (zeichen + einrueckung(tiefe-1)));
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export interface schnittstelle_xmlknoten
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
darstellen(tiefe ?: int) : string;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_xmlknoten_text
implements schnittstelle_xmlknoten
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private inhalt : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(inhalt : string)
{
this.inhalt = inhalt;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen(tiefe : int = 0) : string
{
return this.inhalt;
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_xmlknoten_normal
implements schnittstelle_xmlknoten
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private name : string;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private attribute : {[schluessel : string] : string} = {};
/**
* @author kcf <vidofnir@folksprak.org>
*/
private kinder : Array<schnittstelle_xmlknoten> = [];
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(name : string, attribute : {[schluessel : string] : string} = {}, kinder : Array<schnittstelle_xmlknoten> = [])
{
this.name = name;
this.attribute = attribute;
this.kinder = kinder;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen(tiefe : int = 0) : string
{
let str : string = "";
// anfang
{
let str_anfang : string = "";
str_anfang += this.name;
// attribute
{
let str_attribute : string = "";
Object.keys(this.attribute).forEach
(
schluessel =>
{
let wert : string = this.attribute[schluessel];
str_attribute += (" " + schluessel + "=" + "\"" + wert + "\"");
}
)
;
str_anfang += str_attribute;
}
str_anfang = (einrueckung(tiefe) + "<" + str_anfang + ">" + "\n");
str += str_anfang;
}
// kinder
{
this.kinder.forEach(kind => (str += kind.darstellen(tiefe+1)));
}
// ende
{
let str_ende : string = "";
str_ende += this.name;
str_ende = (einrueckung(tiefe) + "<" + "/" + str_ende + ">" + "\n");
str += str_ende;
}
return str;
}
}
}

View file

@ -0,0 +1,53 @@
/*
* Verrückte Turing-Maschinen A turing complete game
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
module mod_vtm_helfer
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_xmlknoten = typ_komplex<any>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type schnittstelle_xmlknoten =
{
darstellen : (xmlknoten : typ_xmlknoten, tiefe : int)=>string;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export var implementierung_xmlknoten : {[art : string] : schnittstelle_xmlknoten} = {};
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function xmlknoten_darstellen(xmlknoten : typ_xmlknoten, tiefe : int = 0) : string
{
return implementierung_xmlknoten[xmlknoten.art].darstellen(xmlknoten, tiefe);
}
}

View file

@ -0,0 +1,132 @@
/*
* Verrückte Turing-Maschinen A turing complete game
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
module mod_vtm_helfer
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
function einrueckung(tiefe : int, zeichen : string = "\t") : string
{
return ((tiefe === 0) ? "" : (zeichen + einrueckung(tiefe-1)));
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_xmlknoten_normal =
{
name : string;
attribute : {[schluessel : string] : string};
kinder : Array<typ_xmlknoten>;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
function xmlknoten_normal_erstellen
(
name : string,
attribute : {[schluessel : string] : string} = {},
kinder : Array<typ_xmlknoten> = []
)
: typ_xmlknoten_normal
{
return {
"name": name,
"attribute": attribute,
"kinder": kinder
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function xmlknoten_normal_erstellen_erweitert
(
name : string,
attribute : {[schluessel : string] : string} = {},
kinder : Array<typ_xmlknoten> = []
)
: typ_xmlknoten
{
return {
"art": "normal",
"angaben": xmlknoten_normal_erstellen(name, attribute, kinder)
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function xmlknoten_normal_darstellen(xmlknoten_normal : typ_xmlknoten_normal, tiefe : int) : string
{
let str : string = "";
// anfang
{
let str_anfang : string = "";
str_anfang += xmlknoten_normal.name;
// attribute
{
let str_attribute : string = "";
Object.keys(xmlknoten_normal.attribute).forEach
(
schluessel =>
{
let wert : string = xmlknoten_normal.attribute[schluessel];
str_attribute += (" " + schluessel + "=" + "\"" + wert + "\"");
}
)
;
str_anfang += str_attribute;
}
str_anfang = (einrueckung(tiefe) + "<" + str_anfang + ">" + "\n");
str += str_anfang;
}
// kinder
{
xmlknoten_normal.kinder.forEach(kind => (str += xmlknoten_darstellen(kind, tiefe+1)));
}
// ende
{
let str_ende : string = "";
str_ende += xmlknoten_normal.name;
str_ende = (einrueckung(tiefe) + "<" + "/" + str_ende + ">" + "\n");
str += str_ende;
}
return str;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
implementierung_xmlknoten["normal"] =
{
"darstellen": (xmlknoten, tiefe) => xmlknoten_normal_darstellen(xmlknoten.angaben, tiefe),
}
;
}

View file

@ -0,0 +1,69 @@
/*
* Verrückte Turing-Maschinen A turing complete game
* Copyright (C) 2016 Christian Fraß <vidofnir@folksprak.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
module mod_vtm_helfer
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_xmlknoten_text =
{
inhalt : string
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
function xmlknoten_text_erstellen(inhalt : string) : typ_xmlknoten_text
{
return {"inhalt": inhalt};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function xmlknoten_text_erstellen_erweitert(inhalt : string) : typ_xmlknoten
{
return {"art": "text", "angaben": xmlknoten_text_erstellen(inhalt)};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function xmlknoten_text_darstellen(xmlknoten_text : typ_xmlknoten_text, tiefe : int) : string
{
return xmlknoten_text.inhalt;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
implementierung_xmlknoten["text"] =
{
"darstellen": (xmlknoten, tiefe) => xmlknoten_text_darstellen(xmlknoten.angaben, tiefe),
}
;
}

View file

@ -22,46 +22,52 @@ module mod_vtm_manifestation
/**
* @author kcf <vidofnir@folksprak.org>
*/
export abstract class klasse_manifestation<typ_aufbau, typ_ausgabe>
export type typ_manifestation<typ_aufbau> = typ_komplex<any>;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type schnittstelle_manifestation<typ_aufbau, typ_ausgabe> =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
protected aufbau : typ_aufbau;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : typ_aufbau)
{
this.aufbau = aufbau;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public abstract darstellen() : typ_ausgabe;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public abstract binden() : void;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public einrichten() : void
{
this.darstellen();
this.binden();
}
darstellen : (manifestation : typ_manifestation<typ_aufbau>)=>typ_ausgabe;
binden : (manifestation : typ_manifestation<typ_aufbau>)=>void;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export var implementierung_manifestation : {[art : string] : schnittstelle_manifestation<any, any>} = {};
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function manifestation_darstellen<typ_aufbau, typ_ausgabe>(manifestation : typ_manifestation<typ_aufbau>) : typ_ausgabe
{
return implementierung_manifestation[manifestation.art].darstellen(manifestation);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function manifestation_binden<typ_aufbau, typ_ausgabe>(manifestation : typ_manifestation<typ_aufbau>) : void
{
return implementierung_manifestation[manifestation.art].binden(manifestation);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function manifestation_einrichten<typ_aufbau, typ_ausgabe>(manifestation : typ_manifestation<typ_aufbau>) : void
{
manifestation_darstellen<typ_aufbau, typ_ausgabe>(manifestation);
manifestation_binden<typ_aufbau, typ_ausgabe>(manifestation);
}
}

View file

@ -28,8 +28,8 @@ module mod_vtm_manifestation
/**
* @author kcf <vidofnir@folksprak.org>
*/
var position_basis1 : typ_position = mod_vtm_helfer.vektor_polar(0/6.0 * (2*Math.PI));
var position_basis2 : typ_position = mod_vtm_helfer.vektor_polar(2/6.0 * (2*Math.PI));
var position_basis1 : typ_position = mod_vtm_helfer.vektor_polar((0/6) * (2*Math.PI));
var position_basis2 : typ_position = mod_vtm_helfer.vektor_polar((2/6) * (2*Math.PI));
/**

View file

@ -22,107 +22,125 @@ module mod_vtm_manifestation
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_speicher_partie
extends klasse_manifestation<mod_vtm_aufbau.typ_partie, void>
export type typ_speicher_partie =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.typ_partie)
{
super(aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
* @override
*/
public einrichten() : void
{
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_aufgabe",
(angaben) =>
{
// console.info("aenderung_aufgabe", angaben);
let id : string = mod_vtm_aufbau.partie_aufgabe_lesen(this.aufbau).id_lesen();
let key : string = ("vtm_" + id);
if (key in localStorage)
{
let item : string = localStorage.getItem(key);
let welt : mod_vtm_aufbau.typ_welt = mod_vtm_aufbau.welt_importieren(JSON.parse(item));
mod_vtm_aufbau.partie_welt_setzen(this.aufbau, welt, false);
}
else
{
mod_vtm_aufbau.partie_welt_leeren(this.aufbau);
// nichts tun
}
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_welt",
(angaben) =>
{
let id : string = mod_vtm_aufbau.partie_aufgabe_lesen(this.aufbau).id_lesen();
let key : string = ("vtm_" + id);
let item : string = JSON.stringify(mod_vtm_aufbau.welt_exportieren(mod_vtm_aufbau.partie_welt_lesen(this.aufbau)));
localStorage.setItem(key, item);
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_figur",
(angaben) =>
{
// console.info("aenderung_figur", angaben);
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_modus",
(angaben) =>
{
// console.info("aenderung_modus", angaben);
}
)
;
this.darstellen();
this.binden();
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : void
{
console.warn("empty");
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
console.warn("empty");
}
aufbau : mod_vtm_aufbau.typ_partie;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function speicher_partie_erstellen
(
aufbau : mod_vtm_aufbau.typ_partie
)
: typ_speicher_partie
{
return {
"aufbau": aufbau
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function speicher_partie_erstellen_erweitert
(
aufbau : mod_vtm_aufbau.typ_partie
)
: typ_manifestation<mod_vtm_aufbau.typ_partie>
{
return {
"art": "speicher_partie",
"angaben": speicher_partie_erstellen(aufbau)
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function speicher_partie_darstellen(speicher_partie : typ_speicher_partie) : void
{
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function speicher_partie_binden(speicher_partie : typ_speicher_partie) : void
{
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_aufgabe",
(angaben) =>
{
// console.info("aenderung_aufgabe", angaben);
let id : string = mod_vtm_aufbau.aufgabe_id(mod_vtm_aufbau.partie_aufgabe_lesen(this.aufbau))
let key : string = ("vtm_" + id);
if (key in localStorage)
{
let item : string = localStorage.getItem(key);
let welt : mod_vtm_aufbau.typ_welt = mod_vtm_aufbau.welt_importieren(JSON.parse(item));
mod_vtm_aufbau.partie_welt_setzen(this.aufbau, welt, false);
}
else
{
mod_vtm_aufbau.partie_welt_leeren(this.aufbau);
// nichts tun
}
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_welt",
(angaben) =>
{
let id : string = mod_vtm_aufbau.aufgabe_id(mod_vtm_aufbau.partie_aufgabe_lesen(this.aufbau))
let key : string = ("vtm_" + id);
let item : string = JSON.stringify(mod_vtm_aufbau.welt_exportieren(mod_vtm_aufbau.partie_welt_lesen(this.aufbau)));
localStorage.setItem(key, item);
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_figur",
(angaben) =>
{
// console.info("aenderung_figur", angaben);
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_modus",
(angaben) =>
{
// console.info("aenderung_modus", angaben);
}
)
;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
implementierung_manifestation["speicher_partie"] =
{
"darstellen": (manifestation) => speicher_partie_darstellen(manifestation.angaben),
"binden": (manifestation) => speicher_partie_binden(manifestation.angaben),
}
;
}

View file

@ -22,277 +22,296 @@ module mod_vtm_manifestation
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_svg_aktor
extends klasse_manifestation<mod_vtm_aufbau.typ_aktor, mod_vtm_helfer.schnittstelle_xmlknoten>
export type typ_svg_aktor =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
private stelle : mod_vtm_aufbau.typ_stelle;
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.typ_aktor, stelle : mod_vtm_aufbau.typ_stelle)
aufbau : mod_vtm_aufbau.typ_aktor;
stelle : mod_vtm_aufbau.typ_stelle;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
function svg_aktor_erstellen
(
aufbau : mod_vtm_aufbau.typ_aktor,
stelle : mod_vtm_aufbau.typ_stelle
)
: typ_svg_aktor
{
return {
"aufbau": aufbau,
"stelle": stelle
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function svg_aktor_erstellen_manifestation
(
aufbau : mod_vtm_aufbau.typ_aktor,
stelle : mod_vtm_aufbau.typ_stelle
)
: typ_manifestation<mod_vtm_aufbau.typ_aktor>
{
return {
"art": "svg_aktor",
"angaben": svg_aktor_erstellen(aufbau, stelle),
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function svg_aktor_darstellen(svg_aktor : typ_svg_aktor) : mod_vtm_helfer.typ_xmlknoten
{
let aktor : mod_vtm_aufbau.typ_aktor = svg_aktor.aufbau;
let knoten_rahmen = function () : mod_vtm_helfer.typ_xmlknoten
{
super(aufbau);
this.stelle = stelle;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : mod_vtm_helfer.schnittstelle_xmlknoten
{
let aktor : mod_vtm_aufbau.typ_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> = [];
switch (aktor.art)
{
case "erzeuger":
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.aktor_erzeuger_richtung_lesen(aktor.angaben);
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);
break;
}
case "befoerderer":
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.aktor_befoerderer_richtung_lesen(aktor.angaben);
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);
break;
}
case "schreiber":
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.aktor_schreiber_richtung_lesen(aktor.angaben);
let symbol : mod_vtm_aufbau.typ_symbol = mod_vtm_aufbau.aktor_schreiber_symbol_lesen(aktor.angaben);
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);
break;
}
case "leser":
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.aktor_leser_richtung_lesen(aktor.angaben);
let symbol_links : mod_vtm_aufbau.typ_symbol = mod_vtm_aufbau.aktor_leser_symbol_links_lesen(aktor.angaben);
let symbol_rechts : mod_vtm_aufbau.typ_symbol = mod_vtm_aufbau.aktor_leser_symbol_rechts_lesen(aktor.angaben);
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>(symbol_links),
},
{
"summand": -2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(symbol_rechts),
},
]
;
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.1, 0)",
"scale(0.075)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
)
;
break;
}
case "verwerfer":
{
kinder_feld.push(knoten_rahmen());
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);
break;
}
case "annehmer":
{
kinder_feld.push(knoten_rahmen());
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);
break;
}
default:
{
let meldung : string = ("unbehandelter Aktor-Typ");
throw (new Error(meldung));
break;
}
}
let position : typ_position = position_von_stelle(this.stelle);
let knoten_feld : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
return (
svg_pfad
(
"g",
mod_vtm_helfer.sequenz(6).map(i => mod_vtm_helfer.vektor_polar(((i+0.5)/6) * (2*Math.PI), 0.5)),
true,
{
"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
"class": "rahmen"
}
)
);
return knoten_feld;
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
}
;
let kinder_feld : Array<mod_vtm_helfer.typ_xmlknoten> = [];
fallunterscheidung<void>
(
aktor,
{
"erzeuger": (angaben) =>
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.erzeuger_richtung_lesen(angaben);
let knoten_pfeil : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"erzeuger",
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
,
"befoerderer": (angaben) =>
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.befoerderer_richtung_lesen(angaben);
let knoten_pfeil : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"neutral",
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
,
"schreiber": (angaben) =>
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.schreiber_richtung_lesen(angaben);
let symbol : mod_vtm_aufbau.typ_symbol = mod_vtm_aufbau.schreiber_symbol_lesen(angaben);
let knoten_pfeil : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"path",
{
"d": svg_form_pfeil,
"class": (
[
"pfeil",
"symbol_" + symbol.toFixed(0),
].join(" ")
),
"transform": (
[
"rotate(" + ((richtung/6) * 360).toFixed(svg_float_praezission) + ")",
"translate(-0.2, 0)",
"scale(0.12)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
,
"leser": (angaben) =>
{
kinder_feld.push(knoten_rahmen());
let richtung : mod_vtm_aufbau.typ_richtung = mod_vtm_aufbau.leser_richtung_lesen(angaben);
let symbol_links : mod_vtm_aufbau.typ_symbol = mod_vtm_aufbau.leser_symbol_links_lesen(angaben);
let symbol_rechts : mod_vtm_aufbau.typ_symbol = mod_vtm_aufbau.leser_symbol_rechts_lesen(angaben);
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>(symbol_links),
},
{
"summand": -2,
"symbol": new klasse_schlicht<mod_vtm_aufbau.typ_symbol>(symbol_rechts),
},
]
;
ausgaenge.forEach
(
eintrag =>
{
let winkel : float = ((mod_vtm_aufbau.richtung_addieren(richtung, eintrag.summand) / 6) * 360);
let knoten_pfeil : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"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.1, 0)",
"scale(0.075)",
].join(" ")
),
}
)
);
kinder_feld.push(knoten_pfeil);
}
)
;
}
,
"verwerfer": (angaben) =>
{
kinder_feld.push(knoten_rahmen());
let knoten_kreis : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"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);
}
,
"annehmer": (angaben) =>
{
kinder_feld.push(knoten_rahmen());
let knoten_kreis : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"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);
}
,
}
)
;
let position : typ_position = position_von_stelle(svg_aktor.stelle);
let knoten_feld : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"g",
{
"class": "feld",
"rel": mod_vtm_aufbau.stelle_hash(svg_aktor.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>
*/
implementierung_manifestation["svg_aktor"] =
{
"darstellen": (manifestation) => svg_aktor_darstellen(manifestation.angaben),
"binden": (manifestation) => {},
}
;
}

View file

@ -22,118 +22,154 @@ module mod_vtm_manifestation
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_svg_figur
extends klasse_manifestation<mod_vtm_aufbau.typ_figur, mod_vtm_helfer.schnittstelle_xmlknoten>
export type typ_svg_figur =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.typ_figur)
{
super(aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : mod_vtm_helfer.schnittstelle_xmlknoten
{
let figur : mod_vtm_aufbau.typ_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> = mod_vtm_aufbau.figur_band_lesen(figur);
let kinder_band : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
band.forEach
(
(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);
}
)
;
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(mod_vtm_aufbau.figur_stelle_lesen(figur));
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
{
}
aufbau : mod_vtm_aufbau.typ_figur;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
function svg_figur_erstellen
(
aufbau : mod_vtm_aufbau.typ_figur
)
: typ_svg_figur
{
return {
"aufbau": aufbau,
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function svg_figur_erstellen_manifestation
(
aufbau : mod_vtm_aufbau.typ_figur
)
: typ_manifestation<mod_vtm_aufbau.typ_figur>
{
return {
"art": "svg_figur",
"angaben": svg_figur_erstellen(aufbau),
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function svg_figur_darstellen
(
svg_figur : typ_svg_figur
)
: mod_vtm_helfer.typ_xmlknoten
{
let figur : mod_vtm_aufbau.typ_figur = svg_figur.aufbau;
let kinder_figur : Array<mod_vtm_helfer.typ_xmlknoten> = [];
// Stein
{
let knoten_stein : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"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> = mod_vtm_aufbau.figur_band_lesen(figur);
let kinder_band : Array<mod_vtm_helfer.typ_xmlknoten> = [];
band.forEach
(
(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.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"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);
}
)
;
let knoten_band = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"g",
{
"class": "band",
},
kinder_band
)
);
kinder_figur.push(knoten_band);
}
let position : typ_position = position_von_stelle(mod_vtm_aufbau.figur_stelle_lesen(figur));
let knoten_figur = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"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>
*/
function svg_figur_binden(svg_figur : typ_svg_figur) : void
{
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
implementierung_manifestation["svg_figur"] =
{
"darstellen": (manifestation) => svg_figur_darstellen(manifestation.angaben),
"binden": (manifestation) => svg_figur_binden(manifestation.angaben),
}
;
}

View file

@ -22,105 +22,129 @@ module mod_vtm_manifestation
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_svg_partie
extends klasse_manifestation<mod_vtm_aufbau.typ_partie, mod_vtm_helfer.schnittstelle_xmlknoten>
export type typ_svg_partie =
{
/**
* @author kcf <vidofnir@folksprak.org>
*/
public constructor(aufbau : mod_vtm_aufbau.typ_partie)
aufbau : mod_vtm_aufbau.typ_partie;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
function svg_partie_erstellen(aufbau : mod_vtm_aufbau.typ_partie) : typ_svg_partie
{
return {
"aufbau": aufbau
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function svg_partie_erstellen_manifestation(aufbau : mod_vtm_aufbau.typ_partie) : typ_manifestation<mod_vtm_aufbau.typ_partie>
{
return {
"art": "svg_partie",
"angaben": svg_partie_erstellen(aufbau)
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function svg_partie_darstellen(svg_partie : typ_svg_partie) : mod_vtm_helfer.typ_xmlknoten
{
let kinder_partie : Array<mod_vtm_helfer.typ_xmlknoten> = [];
// Welt
{
let kinder_welt : Array<mod_vtm_helfer.typ_xmlknoten> = [];
// Felder
{
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> = [];
mod_vtm_aufbau.welt_felder_lesen(mod_vtm_aufbau.partie_welt_lesen(this.aufbau)).forEach
(
({"stelle": stelle, "aktor": aktor}) =>
{
let manifestation_feld : klasse_manifestation<mod_vtm_aufbau.typ_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);
}
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);
}
// Figur
{
let figur_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_figur> = mod_vtm_aufbau.partie_figur_lesen(this.aufbau);
if (figur_.ist_schlicht())
{
let figur : mod_vtm_aufbau.typ_figur = figur_.lesen();
let manifestation_figur : klasse_manifestation<mod_vtm_aufbau.typ_figur, mod_vtm_helfer.schnittstelle_xmlknoten> = (new klasse_svg_figur(figur));
let knoten_figur : mod_vtm_helfer.schnittstelle_xmlknoten = manifestation_figur.darstellen();
kinder_partie.push(knoten_figur);
}
else
{
// nichts tun
}
}
let knoten_partie : mod_vtm_helfer.schnittstelle_xmlknoten = (
new mod_vtm_helfer.klasse_xmlknoten_normal
let kinder_felder : Array<mod_vtm_helfer.typ_xmlknoten> = [];
mod_vtm_aufbau.welt_felder_lesen(mod_vtm_aufbau.partie_welt_lesen(svg_partie.aufbau)).forEach
(
({"stelle": stelle, "aktor": aktor}) =>
{
let manifestation_feld : typ_manifestation<mod_vtm_aufbau.typ_aktor> = svg_aktor_erstellen_manifestation(aktor, stelle);
let knoten_feld : mod_vtm_helfer.typ_xmlknoten = manifestation_darstellen(manifestation_feld);
kinder_felder.push(knoten_feld);
}
)
;
let knoten_felder : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"g",
{
"class": "partie",
"class": "felder",
},
kinder_partie
kinder_felder
)
);
return knoten_partie;
kinder_welt.push(knoten_felder);
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
}
let knoten_welt : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"g",
{
"class": "welt",
},
kinder_welt
)
);
kinder_partie.push(knoten_welt);
}
// Figur
{
let figur_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_figur> = mod_vtm_aufbau.partie_figur_lesen(svg_partie.aufbau);
if (figur_.ist_schlicht())
{
let figur : mod_vtm_aufbau.typ_figur = figur_.lesen();
let manifestation_figur : typ_manifestation<mod_vtm_aufbau.typ_figur> = svg_figur_erstellen_manifestation(figur);
let knoten_figur : mod_vtm_helfer.typ_xmlknoten = manifestation_darstellen(manifestation_figur);
kinder_partie.push(knoten_figur);
}
else
{
// nichts tun
}
}
let knoten_partie : mod_vtm_helfer.typ_xmlknoten = (
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"g",
{
"class": "partie",
},
kinder_partie
)
);
return knoten_partie;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function svg_partie_binden(svg_partie : typ_svg_partie) : void
{
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
implementierung_manifestation["svg_partie"] =
{
"darstellen": (manifestation) => svg_partie_darstellen(manifestation.angaben),
"binden": (manifestation) => svg_partie_binden(manifestation.angaben),
}
;
}

View file

@ -40,7 +40,7 @@ module mod_vtm_manifestation
schliessen : boolean = true,
attribute : {[schlussel : string] : string} = {},
)
: mod_vtm_helfer.schnittstelle_xmlknoten
: mod_vtm_helfer.typ_xmlknoten
{
let d : string = "";
vertices.forEach
@ -57,7 +57,7 @@ module mod_vtm_manifestation
if (schliessen)
d += "Z";
attribute["d"] = d;
return (new mod_vtm_helfer.klasse_xmlknoten_normal("path", attribute));
return (mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert("path", attribute));
}
@ -72,12 +72,12 @@ module mod_vtm_manifestation
bis_y : float,
hoehe : int = 500,
breite : int = 500,
kinder : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = []
kinder : Array<mod_vtm_helfer.typ_xmlknoten> = []
)
: mod_vtm_helfer.schnittstelle_xmlknoten
: mod_vtm_helfer.typ_xmlknoten
{
return (
new mod_vtm_helfer.klasse_xmlknoten_normal
mod_vtm_helfer.xmlknoten_normal_erstellen_erweitert
(
"svg",
{

View file

@ -32,431 +32,438 @@ module mod_vtm_manifestation
/**
* @author kcf <vidofnir@folksprak.org>
*/
export class klasse_web_partie
extends klasse_manifestation<mod_vtm_aufbau.typ_partie, void>
export type typ_web_partie =
{
/**
* @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.typ_partie, bereich : Element)
aufbau : mod_vtm_aufbau.typ_partie;
bereich : Element;
intervall : schnittstelle_fehlermonade<any>;
}
;
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_erstellen
(
aufbau : mod_vtm_aufbau.typ_partie,
bereich : Element
)
: typ_web_partie
{
return {
"aufbau": aufbau,
"bereich": bereich,
"intervall": (new klasse_nichts<any>()),
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function web_partie_erstellen_erweitert
(
aufbau : mod_vtm_aufbau.typ_partie,
bereich : Element
)
: typ_manifestation<mod_vtm_aufbau.typ_partie>
{
return {
"art": "web_partie",
"angaben": web_partie_erstellen(aufbau, bereich)
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_erneuern_aufgabe(web_partie : typ_web_partie) : void
{
document.querySelector("#aufgabe_text").innerHTML = (
text_nachbearbeiten
(
mod_vtm_aufbau.aufgabe_text
(
mod_vtm_aufbau.partie_aufgabe_lesen(web_partie.aufbau)
)
)
);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_erneuern_welt(web_partie : typ_web_partie) : void
{
let knoten_svg : mod_vtm_helfer.typ_xmlknoten = mod_vtm_manifestation.svg_wurzel
(
-4, -4,
+4, +4,
800, 800,
[manifestation_darstellen(svg_partie_erstellen_manifestation(web_partie.aufbau))]
)
;
web_partie.bereich.innerHTML = mod_vtm_helfer.xmlknoten_darstellen(knoten_svg);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_erneuern_figur(web_partie : typ_web_partie) : void
{
let knoten_svg : mod_vtm_helfer.typ_xmlknoten = mod_vtm_manifestation.svg_wurzel
(
-4, -4,
+4, +4,
800, 800,
[manifestation_darstellen(svg_partie_erstellen_manifestation(web_partie.aufbau))]
)
;
web_partie.bereich.innerHTML = mod_vtm_helfer.xmlknoten_darstellen(knoten_svg);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_erneuern_modus(web_partie : typ_web_partie) : void
{
let status : string;
switch (mod_vtm_aufbau.partie_modus_lesen(web_partie.aufbau))
{
super(aufbau);
this.bereich = bereich;
this.intervall = (new klasse_nichts<any>());
/*
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_welt",
(angaben) =>
{
this.erneuern_welt();
}
)
;
*/
}
/**
* @author kcf <vidofnir@folksprak.org>
* @override
*/
public einrichten() : void
{
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_aufgabe",
(angaben) =>
{
this.erneuern_aufgabe();
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_welt",
(angaben) =>
{
this.erneuern_welt();
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_figur",
(angaben) =>
{
this.erneuern_figur();
}
)
;
mod_vtm_aufbau.partie_lauschen
(
this.aufbau,
"aenderung_modus",
(angaben) =>
{
this.erneuern_modus();
this.erneuern_knoepfe();
}
)
;
this.darstellen();
this.binden();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private erneuern_aufgabe() : void
{
document.querySelector("#aufgabe_text").innerHTML = text_nachbearbeiten(mod_vtm_aufbau.partie_aufgabe_lesen(this.aufbau).text());
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private erneuern_welt() : void
{
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();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private erneuern_figur() : void
{
/*
*/
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();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private erneuern_modus() : void
{
let status : string;
switch (mod_vtm_aufbau.partie_modus_lesen(this.aufbau))
case mod_vtm_aufbau.modus_initial:
{
case mod_vtm_aufbau.modus_initial:
{
status = "Maschine aufbauen";
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 = "anscheinend korrekt :)";
break;
}
default:
{
let meldung : string = "unbehandelter Modus";
throw (new Error(meldung));
break;
}
status = "Maschine aufbauen";
break;
}
document.querySelector("#aufgabe_status").textContent = status;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public erneuern_knoepfe() : void
{
let modus : mod_vtm_aufbau.typ_modus = mod_vtm_aufbau.partie_modus_lesen(this.aufbau);
let klasse : string;
switch (modus)
case mod_vtm_aufbau.modus_ungewiss:
{
case mod_vtm_aufbau.modus_initial:
{
klasse = "initial";
break;
}
case mod_vtm_aufbau.modus_ungewiss:
{
klasse = (
this.intervall.ist_schlicht()
? "ungewiss_laufend"
: "ungewiss_stehend"
);
break;
}
case mod_vtm_aufbau.modus_fehlerhaft:
case mod_vtm_aufbau.modus_korrekt:
{
klasse = "fertig";
break;
}
status = "wird geprüft …";
break;
}
document.querySelector("#knoepfe").setAttribute("class", klasse);
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public darstellen() : void
{
this.erneuern_aufgabe();
this.erneuern_welt();
this.erneuern_figur();
this.erneuern_modus();
this.erneuern_knoepfe();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private anhalten() : void
{
if (this.intervall.ist_schlicht())
case mod_vtm_aufbau.modus_fehlerhaft:
{
clearInterval(this.intervall.lesen());
this.intervall = (new klasse_nichts<any>());
status = "fehlerhaft :/";
break;
}
case mod_vtm_aufbau.modus_korrekt:
{
status = "anscheinend korrekt :)";
break;
}
default:
{
let meldung : string = "unbehandelter Modus";
throw (new Error(meldung));
break;
}
}
document.querySelector("#aufgabe_status").textContent = status;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_erneuern_knoepfe(web_partie : typ_web_partie) : void
{
let modus : mod_vtm_aufbau.typ_modus = mod_vtm_aufbau.partie_modus_lesen(web_partie.aufbau);
let klasse : string;
switch (modus)
{
case mod_vtm_aufbau.modus_initial:
{
klasse = "initial";
break;
}
case mod_vtm_aufbau.modus_ungewiss:
{
klasse = (
web_partie.intervall.ist_schlicht()
? "ungewiss_laufend"
: "ungewiss_stehend"
);
break;
}
case mod_vtm_aufbau.modus_fehlerhaft:
case mod_vtm_aufbau.modus_korrekt:
{
klasse = "fertig";
break;
}
}
document.querySelector("#knoepfe").setAttribute("class", klasse);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_darstellen(web_partie : typ_web_partie) : void
{
web_partie_erneuern_aufgabe(web_partie);
web_partie_erneuern_welt(web_partie);
web_partie_erneuern_figur(web_partie);
web_partie_erneuern_modus(web_partie);
web_partie_erneuern_knoepfe(web_partie);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_anhalten(web_partie : typ_web_partie) : void
{
if (web_partie.intervall.ist_schlicht())
{
clearInterval(web_partie.intervall.lesen());
web_partie.intervall = (new klasse_nichts<any>());
}
else
{
let meldung : string = "kein Intervall gesetzt";
console.warn(meldung);
}
web_partie_erneuern_knoepfe(web_partie);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_fortfahren(web_partie : typ_web_partie) : void
{
mod_vtm_aufbau.partie_fortfahren(web_partie.aufbau);
let modus : mod_vtm_aufbau.typ_modus = mod_vtm_aufbau.partie_modus_lesen(web_partie.aufbau);
if (modus <= 1)
{
// nichts tun
}
else
{
web_partie_anhalten(web_partie);
}
web_partie_erneuern_knoepfe(web_partie);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_testen(web_partie : typ_web_partie) : void
{
let handle : any = setInterval(() => web_partie_fortfahren(web_partie), 500);
web_partie.intervall = (new klasse_schlicht<any>(handle));
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_bearbeiten(web_partie : typ_web_partie) : void
{
web_partie_anhalten(web_partie);
mod_vtm_aufbau.partie_zuruecksetzen(web_partie.aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_leeren(web_partie : typ_web_partie) : void
{
mod_vtm_aufbau.partie_welt_leeren(web_partie.aufbau);
mod_vtm_aufbau.partie_zuruecksetzen(web_partie.aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
function web_partie_binden(web_partie : typ_web_partie) : void
{
let stelle_ermitteln = (target : EventTarget) =>
{
let stelle : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle>;
let dom_feld : Element = target["closest"](".feld");
if (dom_feld == null)
{
stelle = (new klasse_nichts<mod_vtm_aufbau.typ_stelle>());
}
else
{
let meldung : string = "kein Intervall gesetzt";
console.warn(meldung);
let rel : string = dom_feld.getAttribute("rel")
stelle = (new klasse_schlicht<mod_vtm_aufbau.typ_stelle>(mod_vtm_aufbau.stelle_von_hash(rel)));
}
this.erneuern_knoepfe();
return stelle;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private fortfahren() : void
{
mod_vtm_aufbau.partie_fortfahren(this.aufbau);
let modus : mod_vtm_aufbau.typ_modus = mod_vtm_aufbau.partie_modus_lesen(this.aufbau);
if (modus <= 1)
;
mod_vtm_aufbau.partie_lauschen
(
web_partie.aufbau,
"aenderung_aufgabe",
(angaben) =>
{
// nichts tun
web_partie_erneuern_aufgabe(web_partie);
}
else
)
;
mod_vtm_aufbau.partie_lauschen
(
web_partie.aufbau,
"aenderung_welt",
(angaben) =>
{
this.anhalten();
web_partie_erneuern_welt(web_partie);
}
this.erneuern_knoepfe();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private testen() : void
{
let handle : any = setInterval(() => this.fortfahren(), 500);
this.intervall = (new klasse_schlicht<any>(handle));
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private bearbeiten() : void
{
this.anhalten();
mod_vtm_aufbau.partie_zuruecksetzen(this.aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private leeren() : void
{
mod_vtm_aufbau.partie_welt_leeren(this.aufbau);
mod_vtm_aufbau.partie_zuruecksetzen(this.aufbau);
}
/**
* @author kcf <vidofnir@folksprak.org>
* @implementation
*/
public binden() : void
{
let stelle_ermitteln = (target : EventTarget) =>
)
;
mod_vtm_aufbau.partie_lauschen
(
web_partie.aufbau,
"aenderung_figur",
(angaben) =>
{
let stelle : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle>;
let dom_feld : Element = target["closest"](".feld");
if (dom_feld == null)
web_partie_erneuern_figur(web_partie);
}
)
;
mod_vtm_aufbau.partie_lauschen
(
web_partie.aufbau,
"aenderung_modus",
(angaben) =>
{
web_partie_erneuern_modus(web_partie);
web_partie_erneuern_knoepfe(web_partie);
}
)
;
// Links-Klick
web_partie.bereich.addEventListener
(
"click",
event =>
{
event.preventDefault();
let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{
stelle = (new klasse_nichts<mod_vtm_aufbau.typ_stelle>());
mod_vtm_aufbau.partie_welt_feld_wechseln(web_partie.aufbau, stelle_.lesen(), false);
}
else
{
let rel : string = dom_feld.getAttribute("rel")
stelle = (new klasse_schlicht<mod_vtm_aufbau.typ_stelle>(mod_vtm_aufbau.stelle_von_hash(rel)));
console.info("-- kein Feld");
}
return stelle;
}
;
// Links-Klick
this.bereich.addEventListener
(
"click",
event =>
)
;
// Rechts-Klick
web_partie.bereich.addEventListener
(
"contextmenu",
event =>
{
event.preventDefault();
let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{
event.preventDefault();
let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{
mod_vtm_aufbau.partie_welt_feld_wechseln(this.aufbau, stelle_.lesen(), false);
}
else
{
console.info("-- kein Feld");
}
mod_vtm_aufbau.partie_welt_feld_wechseln(web_partie.aufbau, stelle_.lesen(), true);
}
)
;
// Rechts-Klick
this.bereich.addEventListener
(
"contextmenu",
event =>
else
{
event.preventDefault();
let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{
mod_vtm_aufbau.partie_welt_feld_wechseln(this.aufbau, stelle_.lesen(), true);
}
else
{
console.info("-- kein Feld");
}
console.info("-- kein Feld");
}
)
;
// Mausrad
this.bereich.addEventListener
(
"wheel",
event =>
}
)
;
// Mausrad
web_partie.bereich.addEventListener
(
"wheel",
event =>
{
event.preventDefault();
let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{
event.preventDefault();
let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{
let inkrement : int = ((event["deltaY"] < 0) ? -1 : +1);
mod_vtm_aufbau.partie_welt_feld_drehen(this.aufbau, stelle_.lesen(), inkrement);
}
else
{
console.info("-- kein Feld");
}
let inkrement : int = ((event["deltaY"] < 0) ? -1 : +1);
mod_vtm_aufbau.partie_welt_feld_drehen(web_partie.aufbau, stelle_.lesen(), inkrement);
}
)
;
// Schritt
document.querySelector("#knopf_schritt").addEventListener
(
"click",
event =>
else
{
this.anhalten();
this.fortfahren();
console.info("-- kein Feld");
}
)
;
// Testen
document.querySelector("#knopf_testen").addEventListener
(
"click",
event =>
{
this.testen();
}
)
;
// Anhalten
document.querySelector("#knopf_anhalten").addEventListener
(
"click",
event =>
{
this.anhalten();
}
)
;
// Bearbeiten
document.querySelector("#knopf_bearbeiten").addEventListener
(
"click",
event =>
{
this.bearbeiten();
}
)
;
// Leeren
document.querySelector("#knopf_leeren").addEventListener
(
"click",
event =>
{
this.leeren();
}
)
;
}
}
)
;
// Schritt
document.querySelector("#knopf_schritt").addEventListener
(
"click",
event =>
{
web_partie_anhalten(web_partie);
web_partie_fortfahren(web_partie);
}
)
;
// Testen
document.querySelector("#knopf_testen").addEventListener
(
"click",
event =>
{
web_partie_testen(web_partie);
}
)
;
// Anhalten
document.querySelector("#knopf_anhalten").addEventListener
(
"click",
event =>
{
web_partie_anhalten(web_partie);
}
)
;
// Bearbeiten
document.querySelector("#knopf_bearbeiten").addEventListener
(
"click",
event =>
{
web_partie_bearbeiten(web_partie);
}
)
;
// Leeren
document.querySelector("#knopf_leeren").addEventListener
(
"click",
event =>
{
web_partie_leeren(web_partie);
}
)
;
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
implementierung_manifestation["web_partie"] =
{
"darstellen": (manifestation) => web_partie_darstellen(manifestation.angaben),
"binden": (manifestation) => web_partie_binden(manifestation.angaben),
}
;
}