diff --git a/quelldatein/aufbau/aktoren/_aktor.ts b/quelldatein/aufbau/aktoren/_aktor.ts index 252042a..2e17fbf 100644 --- a/quelldatein/aufbau/aktoren/_aktor.ts +++ b/quelldatein/aufbau/aktoren/_aktor.ts @@ -16,88 +16,99 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - - /** - * @author kcf - */ - export type typ_aktor = typ_komplex; - - /** - * @author kcf - */ - export type schnittstelle_aktor = + export module mod_aufbau { - 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 - */ - export var implementierung_aktor : {[art : string] : schnittstelle_aktor} = {}; - - - /** - * @author kcf - */ - export function aktor_erstellen(art : string, kern : any) : typ_aktor - { - return {"art": art, "angaben": kern}; - } - - - /** - * @author kcf - */ - export function aktor_beispiel(art : string) : typ_aktor - { - return implementierung_aktor[art].beispiel(); - } - - - /** - * @author kcf - */ - export function aktor_drehen(aktor : typ_aktor, inkrement ?: int) : void - { - return implementierung_aktor[aktor.art].drehen(aktor, inkrement); - } - - - /** - * @author kcf - */ - export function aktor_verwenden(aktor : typ_aktor, figur : typ_figur) : void - { - return implementierung_aktor[aktor.art].verwenden(aktor, figur); - } - - - /** - * @author kcf - */ - export function aktor_exportieren(aktor : typ_aktor) : any - { - return implementierung_aktor[aktor.art].exportieren(aktor); - } - - - /** - * @author kcf - */ - export function aktor_importieren(roh : any) : typ_aktor - { - return implementierung_aktor[roh.art].importieren(roh); + + export module mod_aktor + { + + /** + * @author kcf + */ + export type typ_aktor = typ_komplex; + + + /** + * @author kcf + */ + export type schnittstelle_aktor = + { + beispiel : ()=>typ_aktor; + drehen : (aktor : typ_aktor, inkrement : int)=>void; + verwenden : (aktor : typ_aktor, figur : mod_figur.typ_figur)=>void; + exportieren : (aktor : typ_aktor)=>any; + importieren : (roh : any)=>typ_aktor; + } + ; + + + /** + * @author kcf + */ + export var implementierung_aktor : {[art : string] : schnittstelle_aktor} = {}; + + + /** + * @author kcf + */ + /* + export function erstellen(art : string, kern : any) : typ_aktor + { + return einpacken(art, kern); + } + */ + + + /** + * @author kcf + */ + export function beispiel(art : string) : typ_aktor + { + return implementierung_aktor[art].beispiel(); + } + + + /** + * @author kcf + */ + export function drehen(aktor : typ_aktor, inkrement ?: int) : void + { + return implementierung_aktor[aktor.art].drehen(aktor, inkrement); + } + + + /** + * @author kcf + */ + export function verwenden(aktor : typ_aktor, figur : mod_figur.typ_figur) : void + { + return implementierung_aktor[aktor.art].verwenden(aktor, figur); + } + + + /** + * @author kcf + */ + export function exportieren(aktor : typ_aktor) : any + { + return implementierung_aktor[aktor.art].exportieren(aktor); + } + + + /** + * @author kcf + */ + export function importieren(roh : any) : typ_aktor + { + return implementierung_aktor[roh.art].importieren(roh); + } + + } + } } - diff --git a/quelldatein/aufbau/aktoren/annehmer.ts b/quelldatein/aufbau/aktoren/annehmer.ts index 552c29f..3bcf81b 100644 --- a/quelldatein/aufbau/aktoren/annehmer.ts +++ b/quelldatein/aufbau/aktoren/annehmer.ts @@ -16,128 +16,141 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_annehmer = + export module mod_aufbau { + + export module mod_aktor_annehmer + { + + /** + * @author kcf + */ + let art : string = "annehmer"; + + + /** + * @author kcf + */ + export type typ_annehmer = + { + } + ; + + + /** + * @author kcf + */ + function erstellen + ( + ) + : typ_annehmer + { + return { + }; + } + + + /** + * @author kcf + */ + export function erstellen_aktor + ( + ) + : mod_aktor.typ_aktor + { + return einpacken(art, erstellen()); + } + + + /** + * @author kcf + */ + function beispiel + ( + ) + : typ_annehmer + { + return erstellen(); + } + + + /** + * @author kcf + */ + function drehen + ( + annehmer : typ_annehmer, + inkrement ?: int + ) + : void + { + } + + + /** + * @author kcf + */ + function verwenden + ( + annehmer : typ_annehmer, + figur : mod_figur.typ_figur + ) + : void + { + mod_figur.annehmen(figur); + } + + + /** + * @author kcf + */ + function exportieren + ( + annehmer : typ_annehmer + ) + : any + { + return { + }; + } + + + /** + * @author kcf + */ + function importieren + ( + roh : any + ) + : typ_annehmer + { + return ( + erstellen + ( + ) + ); + } + + + /** + * @author kcf + */ + mod_aktor.implementierung_aktor[art] = + { + "beispiel": () => einpacken(art, beispiel()), + "drehen": (aktor, inkrement) => drehen(auspacken(aktor), inkrement), + "verwenden": (aktor, figur) => verwenden(auspacken(aktor), figur), + "exportieren": (aktor) => ({"art": art, "angaben": exportieren(aktor.angaben)}), + "importieren": (roh) => einpacken(art, importieren(roh)), + } + ; + + } + } - ; - - - /** - * @author kcf - */ - function annehmer_erstellen - ( - ) - : typ_annehmer - { - return { - }; - } - - - /** - * @author kcf - */ - export function annehmer_erstellen_aktor - ( - ) - : typ_aktor - { - return {"art": "annehmer", "angaben": annehmer_erstellen()}; - } - - - /** - * @author kcf - */ - function annehmer_beispiel - ( - ) - : typ_annehmer - { - return annehmer_erstellen(); - } - - - /** - * @author kcf - */ - function annehmer_drehen - ( - annehmer : typ_annehmer, - inkrement ?: int - ) - : void - { - } - - - /** - * @author kcf - */ - function annehmer_verwenden - ( - annehmer : typ_annehmer, - figur : typ_figur - ) - : void - { - figur_annehmen(figur); - } - - - /** - * @author kcf - */ - function annehmer_exportieren - ( - annehmer : typ_annehmer - ) - : any - { - return { - }; - } - - - /** - * @author kcf - */ - function annehmer_importieren - ( - roh : any - ) - : typ_annehmer - { - return ( - annehmer_erstellen - ( - ) - ); - } - - - /** - * @author kcf - */ - 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)), - } - ; } - diff --git a/quelldatein/aufbau/aktoren/befoerderer.ts b/quelldatein/aufbau/aktoren/befoerderer.ts index 388450c..d75bf2a 100644 --- a/quelldatein/aufbau/aktoren/befoerderer.ts +++ b/quelldatein/aufbau/aktoren/befoerderer.ts @@ -16,148 +16,161 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_befoerderer = + export module mod_aufbau { - richtung : typ_richtung; + + export module mod_aktor_befoerderer + { + + /** + * @author kcf + */ + let art : string = "befoerderer"; + + + /** + * @author kcf + */ + export type typ_befoerderer = + { + richtung : mod_richtung.typ_richtung; + } + ; + + + /** + * @author kcf + */ + function erstellen + ( + richtung : mod_richtung.typ_richtung + ) + : typ_befoerderer + { + return { + "richtung": richtung, + }; + } + + + /** + * @author kcf + */ + export function erstellen_aktor + ( + richtung : mod_richtung.typ_richtung + ) + : mod_aktor.typ_aktor + { + return einpacken(art, erstellen(richtung)); + } + + + /** + * @author kcf + */ + function beispiel + ( + ) + : typ_befoerderer + { + return erstellen(0); + } + + + /** + * @author kcf + */ + export function richtung_lesen + ( + befoerderer : typ_befoerderer + ) + : mod_richtung.typ_richtung + { + return befoerderer.richtung; + } + + + /** + * @author kcf + */ + function drehen + ( + befoerderer : typ_befoerderer, + inkrement : int = +1 + ) + : void + { + befoerderer.richtung = mod_richtung.addieren(befoerderer.richtung, inkrement); + } + + + /** + * @author kcf + */ + function verwenden + ( + befoerderer : typ_befoerderer, + figur : mod_figur.typ_figur + ) + : void + { + mod_figur.bewegen(figur, befoerderer.richtung); + } + + + /** + * @author kcf + */ + function exportieren + ( + befoerderer : typ_befoerderer + ) + : any + { + return { + "richtung": mod_richtung.exportieren(befoerderer.richtung), + }; + } + + + /** + * @author kcf + */ + function importieren + ( + roh : any + ) + : typ_befoerderer + { + return ( + erstellen + ( + mod_richtung.importieren(roh["richtung"]) + ) + ); + } + + + /** + * @author kcf + */ + mod_aktor.implementierung_aktor[art] = + { + "beispiel": () => einpacken(art, beispiel()), + "drehen": (aktor, inkrement) => drehen(auspacken(aktor), inkrement), + "verwenden": (aktor, figur) => verwenden(auspacken(aktor), figur), + "exportieren": (aktor) => ({"art": art, "angaben": exportieren(aktor.angaben)}), + "importieren": (roh) => einpacken(art, importieren(roh)), + } + ; + + } + } - ; - - - /** - * @author kcf - */ - function befoerderer_erstellen - ( - richtung : typ_richtung - ) - : typ_befoerderer - { - return { - "richtung": richtung, - }; - } - - - /** - * @author kcf - */ - export function befoerderer_erstellen_aktor - ( - richtung : typ_richtung - ) - : typ_aktor - { - return {"art": "befoerderer", "angaben": befoerderer_erstellen(richtung)}; - } - - - /** - * @author kcf - */ - function befoerderer_beispiel - ( - ) - : typ_befoerderer - { - return befoerderer_erstellen(0); - } - - - /** - * @author kcf - */ - export function befoerderer_richtung_lesen - ( - befoerderer : typ_befoerderer - ) - : typ_richtung - { - return befoerderer.richtung; - } - - - /** - * @author kcf - */ - function befoerderer_drehen - ( - befoerderer : typ_befoerderer, - inkrement : int = +1 - ) - : void - { - befoerderer.richtung = richtung_addieren(befoerderer.richtung, inkrement); - } - - - /** - * @author kcf - */ - function befoerderer_verwenden - ( - befoerderer : typ_befoerderer, - figur : typ_figur - ) - : void - { - figur_bewegen(figur, befoerderer.richtung); - } - - - /** - * @author kcf - */ - function befoerderer_exportieren - ( - befoerderer : typ_befoerderer - ) - : any - { - return { - "richtung": richtung_exportieren(befoerderer.richtung), - }; - } - - - /** - * @author kcf - */ - function befoerderer_importieren - ( - roh : any - ) - : typ_befoerderer - { - return ( - befoerderer_erstellen - ( - richtung_importieren(roh["richtung"]) - ) - ); - } - - - /** - * @author kcf - */ - 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)), - } - ; } - diff --git a/quelldatein/aufbau/aktoren/erzeuger.ts b/quelldatein/aufbau/aktoren/erzeuger.ts index 2ff8b9f..87e97f0 100644 --- a/quelldatein/aufbau/aktoren/erzeuger.ts +++ b/quelldatein/aufbau/aktoren/erzeuger.ts @@ -16,148 +16,161 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_erzeuger = + export module mod_aufbau { - richtung : typ_richtung; + + export module mod_aktor_erzeuger + { + + /** + * @author kcf + */ + let art : string = "erzeuger"; + + + /** + * @author kcf + */ + export type typ_erzeuger = + { + richtung : mod_richtung.typ_richtung; + } + ; + + + /** + * @author kcf + */ + function erstellen + ( + richtung : mod_richtung.typ_richtung + ) + : typ_erzeuger + { + return { + "richtung": richtung, + }; + } + + + /** + * @author kcf + */ + export function erstellen_aktor + ( + richtung : mod_richtung.typ_richtung + ) + : mod_aktor.typ_aktor + { + return einpacken(art, erstellen(richtung)); + } + + + /** + * @author kcf + */ + function beispiel + ( + ) + : typ_erzeuger + { + return erstellen(0); + } + + + /** + * @author kcf + */ + export function richtung_lesen + ( + erzeuger : typ_erzeuger + ) + : mod_richtung.typ_richtung + { + return erzeuger.richtung; + } + + + /** + * @author kcf + */ + function drehen + ( + erzeuger : typ_erzeuger, + inkrement : int = +1 + ) + : void + { + erzeuger.richtung = mod_richtung.addieren(erzeuger.richtung, inkrement); + } + + + /** + * @author kcf + */ + function verwenden + ( + erzeuger : typ_erzeuger, + figur : mod_figur.typ_figur + ) + : void + { + mod_figur.bewegen(figur, erzeuger.richtung); + } + + + /** + * @author kcf + */ + function exportieren + ( + erzeuger : typ_erzeuger + ) + : any + { + return { + "richtung": mod_richtung.exportieren(erzeuger.richtung), + }; + } + + + /** + * @author kcf + */ + function importieren + ( + roh : any + ) + : typ_erzeuger + { + return ( + erstellen + ( + mod_richtung.importieren(roh["richtung"]) + ) + ); + } + + + /** + * @author kcf + */ + mod_aktor.implementierung_aktor[art] = + { + "beispiel": () => einpacken(art, beispiel()), + "drehen": (aktor, inkrement) => drehen(auspacken(aktor), inkrement), + "verwenden": (aktor, figur) => verwenden(auspacken(aktor), figur), + "exportieren": (aktor) => ({"art": art, "angaben": exportieren(auspacken(aktor))}), + "importieren": (roh) => einpacken(art, importieren(roh)), + } + ; + + } + } - ; - - - /** - * @author kcf - */ - function erzeuger_erstellen - ( - richtung : typ_richtung - ) - : typ_erzeuger - { - return { - "richtung": richtung, - }; - } - - - /** - * @author kcf - */ - export function erzeuger_erstellen_aktor - ( - richtung : typ_richtung - ) - : typ_aktor - { - return {"art": "erzeuger", "angaben": erzeuger_erstellen(richtung)}; - } - - - /** - * @author kcf - */ - function erzeuger_beispiel - ( - ) - : typ_erzeuger - { - return erzeuger_erstellen(0); - } - - - /** - * @author kcf - */ - export function erzeuger_richtung_lesen - ( - erzeuger : typ_erzeuger - ) - : typ_richtung - { - return erzeuger.richtung; - } - - - /** - * @author kcf - */ - function erzeuger_drehen - ( - erzeuger : typ_erzeuger, - inkrement : int = +1 - ) - : void - { - erzeuger.richtung = richtung_addieren(erzeuger.richtung, inkrement); - } - - - /** - * @author kcf - */ - function erzeuger_verwenden - ( - erzeuger : typ_erzeuger, - figur : typ_figur - ) - : void - { - figur_bewegen(figur, erzeuger.richtung); - } - - - /** - * @author kcf - */ - function erzeuger_exportieren - ( - erzeuger : typ_erzeuger - ) - : any - { - return { - "richtung": richtung_exportieren(erzeuger.richtung), - }; - } - - - /** - * @author kcf - */ - function erzeuger_importieren - ( - roh : any - ) - : typ_erzeuger - { - return ( - erzeuger_erstellen - ( - richtung_importieren(roh["richtung"]) - ) - ); - } - - - /** - * @author kcf - */ - 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)), - } - ; } - diff --git a/quelldatein/aufbau/aktoren/leser.ts b/quelldatein/aufbau/aktoren/leser.ts index 49dbe53..8436f97 100644 --- a/quelldatein/aufbau/aktoren/leser.ts +++ b/quelldatein/aufbau/aktoren/leser.ts @@ -16,211 +16,224 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_leser = + export module mod_aufbau { - "richtung": typ_richtung, - "symbol_links": typ_symbol, - "symbol_rechts": typ_symbol, - } - ; - - - /** - * @author kcf - */ - function leser_erstellen - ( - richtung : typ_richtung, - symbol_links : typ_symbol, - symbol_rechts : typ_symbol - ) - : typ_leser - { - return { - "richtung": richtung, - "symbol_links": symbol_links, - "symbol_rechts": symbol_rechts, - }; - } - - - /** - * @author kcf - */ - export function leser_erstellen_aktor - ( - richtung : typ_richtung, - symbol_links : typ_symbol, - symbol_rechts : typ_symbol - ) - : typ_aktor - { - return {"art": "leser", "angaben": leser_erstellen(richtung, symbol_links, symbol_rechts)}; - } - - - /** - * @author kcf - */ - function leser_beispiel - ( - ) - : typ_leser - { - return leser_erstellen(0, 0, 1); - } - - - /** - * @author kcf - */ - export function leser_richtung_lesen - ( - leser : typ_leser - ) - : typ_richtung - { - return leser.richtung; - } - - - /** - * @author kcf - */ - export function leser_symbol_links_lesen - ( - leser : typ_leser - ) - : typ_symbol - { - return leser.symbol_links; - } - - - /** - * @author kcf - */ - export function leser_symbol_rechts_lesen - ( - leser : typ_leser - ) - : typ_symbol - { - return leser.symbol_rechts; - } - - - /** - * @author kcf - */ - function leser_drehen - ( - leser : typ_leser, - inkrement : int = +1 - ) - : void - { - leser.richtung = richtung_addieren(leser.richtung, inkrement); - } - - - /** - * @author kcf - */ - function leser_verwenden - ( - leser : typ_leser, - figur : typ_figur - ) - : void - { - let symbol_ : schnittstelle_fehlermonade = figur_lesen(figur); - let summand : typ_richtung; - if (symbol_.ist_schlicht()) + + export module mod_aktor_leser { - let symbol : typ_symbol = symbol_.lesen(); - if (symbol === leser.symbol_links) + + /** + * @author kcf + */ + let art : string = "leser"; + + + /** + * @author kcf + */ + export type typ_leser = { - figur_schieben(figur); - summand = +2; + "richtung": mod_richtung.typ_richtung, + "symbol_links": mod_symbol.typ_symbol, + "symbol_rechts": mod_symbol.typ_symbol, } - else if (symbol === leser.symbol_rechts) + ; + + + /** + * @author kcf + */ + function erstellen + ( + richtung : mod_richtung.typ_richtung, + symbol_links : mod_symbol.typ_symbol, + symbol_rechts : mod_symbol.typ_symbol + ) + : typ_leser { - figur_schieben(figur); - summand = -2; + return { + "richtung": richtung, + "symbol_links": symbol_links, + "symbol_rechts": symbol_rechts, + }; } - else + + + /** + * @author kcf + */ + export function erstellen_aktor + ( + richtung : mod_richtung.typ_richtung, + symbol_links : mod_symbol.typ_symbol, + symbol_rechts : mod_symbol.typ_symbol + ) + : mod_aktor.typ_aktor { - summand = 0; + return einpacken(art, erstellen(richtung, symbol_links, symbol_rechts)); } + + + /** + * @author kcf + */ + function beispiel + ( + ) + : typ_leser + { + return erstellen(0, 0, 1); + } + + + /** + * @author kcf + */ + export function richtung_lesen + ( + leser : typ_leser + ) + : mod_richtung.typ_richtung + { + return leser.richtung; + } + + + /** + * @author kcf + */ + export function symbol_links_lesen + ( + leser : typ_leser + ) + : mod_symbol.typ_symbol + { + return leser.symbol_links; + } + + + /** + * @author kcf + */ + export function symbol_rechts_lesen + ( + leser : typ_leser + ) + : mod_symbol.typ_symbol + { + return leser.symbol_rechts; + } + + + /** + * @author kcf + */ + function drehen + ( + leser : typ_leser, + inkrement : int = +1 + ) + : void + { + leser.richtung = mod_richtung.addieren(leser.richtung, inkrement); + } + + + /** + * @author kcf + */ + function verwenden + ( + leser : typ_leser, + figur : mod_figur.typ_figur + ) + : void + { + let symbol_ : schnittstelle_fehlermonade = mod_figur.lesen(figur); + let summand : mod_richtung.typ_richtung; + if (symbol_.ist_schlicht()) + { + let symbol : mod_symbol.typ_symbol = symbol_.lesen(); + if (symbol === leser.symbol_links) + { + mod_figur.schieben(figur); + summand = +2; + } + else if (symbol === leser.symbol_rechts) + { + mod_figur.schieben(figur); + summand = -2; + } + else + { + summand = 0; + } + } + else + { + summand = 0; + } + let richtung : mod_richtung.typ_richtung = mod_richtung.addieren(leser.richtung, summand); + mod_figur.bewegen(figur, richtung); + } + + + /** + * @author kcf + */ + function exportieren + ( + leser : typ_leser + ) + : any + { + return { + "richtung": mod_richtung.exportieren(leser.richtung), + "symbol_links": mod_symbol.exportieren(leser.symbol_links), + "symbol_rechts": mod_symbol.exportieren(leser.symbol_rechts), + }; + } + + + /** + * @author kcf + */ + function importieren + ( + roh : any + ) + : typ_leser + { + return ( + erstellen + ( + mod_richtung.importieren(roh["richtung"]), + mod_symbol.importieren(roh["symbol_links"]), + mod_symbol.importieren(roh["symbol_rechts"]) + ) + ); + } + + + /** + * @author kcf + */ + mod_aktor.implementierung_aktor[art] = + { + "beispiel": () => einpacken(art, beispiel()), + "drehen": (aktor, inkrement) => drehen(auspacken(aktor), inkrement), + "verwenden": (aktor, figur) => verwenden(auspacken(aktor), figur), + "exportieren": (aktor) => ({"art": "leser", "angaben": exportieren(aktor.angaben)}), + "importieren": (roh) => einpacken(art, importieren(roh)), + } + ; + } - else - { - summand = 0; - } - let richtung : typ_richtung = richtung_addieren(leser.richtung, summand); - figur_bewegen(figur, richtung); + } - - /** - * @author kcf - */ - function leser_exportieren - ( - leser : typ_leser - ) - : any - { - return { - "richtung": richtung_exportieren(leser.richtung), - "symbol_links": symbol_exportieren(leser.symbol_links), - "symbol_rechts": symbol_exportieren(leser.symbol_rechts), - }; - } - - - /** - * @author kcf - */ - function leser_importieren - ( - roh : any - ) - : typ_leser - { - return ( - leser_erstellen - ( - richtung_importieren(roh["richtung"]), - symbol_importieren(roh["symbol_links"]), - symbol_importieren(roh["symbol_rechts"]) - ) - ); - } - - - /** - * @author kcf - */ - 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)), - } - ; - } - diff --git a/quelldatein/aufbau/aktoren/schreiber.ts b/quelldatein/aufbau/aktoren/schreiber.ts index 90c222c..808df3a 100644 --- a/quelldatein/aufbau/aktoren/schreiber.ts +++ b/quelldatein/aufbau/aktoren/schreiber.ts @@ -16,168 +16,181 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_schreiber = + export module mod_aufbau { - richtung : typ_richtung; - symbol : typ_symbol; + + export module mod_aktor_schreiber + { + + /** + * @author kcf + */ + let art : string = "schreiber"; + + + /** + * @author kcf + */ + export type typ_schreiber = + { + richtung : mod_richtung.typ_richtung; + symbol : mod_symbol.typ_symbol; + } + ; + + + /** + * @author kcf + */ + function erstellen + ( + richtung : mod_richtung.typ_richtung, + symbol : mod_symbol.typ_symbol + ) + : typ_schreiber + { + return { + "richtung": richtung, + "symbol": symbol, + }; + } + + + /** + * @author kcf + */ + export function erstellen_aktor + ( + richtung : mod_richtung.typ_richtung, + symbol : mod_symbol.typ_symbol + ) + : mod_aktor.typ_aktor + { + return einpacken(art, erstellen(richtung, symbol)); + } + + + /** + * @author kcf + */ + function beispiel + ( + ) + : typ_schreiber + { + return erstellen(0, 0); + } + + + /** + * @author kcf + */ + export function richtung_lesen + ( + schreiber : typ_schreiber + ) + : mod_richtung.typ_richtung + { + return schreiber.richtung; + } + + + /** + * @author kcf + */ + export function symbol_lesen + ( + schreiber : typ_schreiber + ) + : mod_symbol.typ_symbol + { + return schreiber.symbol; + } + + + /** + * @author kcf + */ + function drehen + ( + schreiber : typ_schreiber, + inkrement : int = +1 + ) + : void + { + schreiber.richtung = mod_richtung.addieren(schreiber.richtung, inkrement); + } + + + /** + * @author kcf + */ + function verwenden + ( + schreiber : typ_schreiber, + figur : mod_figur.typ_figur + ) + : void + { + mod_figur.schreiben(figur, schreiber.symbol); + mod_figur.bewegen(figur, schreiber.richtung); + } + + + /** + * @author kcf + */ + function exportieren + ( + schreiber : typ_schreiber + ) + : any + { + return { + "richtung": mod_richtung.exportieren(schreiber.richtung), + "symbol": mod_symbol.exportieren(schreiber.symbol), + }; + } + + + /** + * @author kcf + */ + function importieren + ( + roh : any + ) + : typ_schreiber + { + return ( + erstellen + ( + mod_richtung.importieren(roh["richtung"]), + mod_symbol.importieren(roh["symbol"]) + ) + ); + } + + + /** + * @author kcf + */ + mod_aktor.implementierung_aktor["schreiber"] = + { + "beispiel": () => einpacken(art, beispiel()), + "drehen": (aktor, inkrement) => drehen(auspacken(aktor), inkrement), + "verwenden": (aktor, figur) => verwenden(auspacken(aktor), figur), + "exportieren": (aktor) => ({"art": "schreiber", "angaben": exportieren(aktor.angaben)}), + "importieren": (roh) => einpacken(art, importieren(roh)), + } + ; + + } + } - ; - - - /** - * @author kcf - */ - function schreiber_erstellen - ( - richtung : typ_richtung, - symbol : typ_symbol - ) - : typ_schreiber - { - return { - "richtung": richtung, - "symbol": symbol, - }; - } - - - /** - * @author kcf - */ - export function schreiber_erstellen_aktor - ( - richtung : typ_richtung, - symbol : typ_symbol - ) - : typ_aktor - { - return {"art": "schreiber", "angaben": schreiber_erstellen(richtung, symbol)}; - } - - - /** - * @author kcf - */ - function schreiber_beispiel - ( - ) - : typ_schreiber - { - return schreiber_erstellen(0, 0); - } - - - /** - * @author kcf - */ - export function schreiber_richtung_lesen - ( - schreiber : typ_schreiber - ) - : typ_richtung - { - return schreiber.richtung; - } - - - /** - * @author kcf - */ - export function schreiber_symbol_lesen - ( - schreiber : typ_schreiber - ) - : typ_symbol - { - return schreiber.symbol; - } - - - /** - * @author kcf - */ - function schreiber_drehen - ( - schreiber : typ_schreiber, - inkrement : int = +1 - ) - : void - { - schreiber.richtung = richtung_addieren(schreiber.richtung, inkrement); - } - - - /** - * @author kcf - */ - function schreiber_verwenden - ( - schreiber : typ_schreiber, - figur : typ_figur - ) - : void - { - figur_schreiben(figur, schreiber.symbol); - figur_bewegen(figur, schreiber.richtung); - } - - - /** - * @author kcf - */ - function schreiber_exportieren - ( - schreiber : typ_schreiber - ) - : any - { - return { - "richtung": richtung_exportieren(schreiber.richtung), - "symbol": symbol_exportieren(schreiber.symbol), - }; - } - - - /** - * @author kcf - */ - function schreiber_importieren - ( - roh : any - ) - : typ_schreiber - { - return ( - schreiber_erstellen - ( - richtung_importieren(roh["richtung"]), - symbol_importieren(roh["symbol"]) - ) - ); - } - - - /** - * @author kcf - */ - 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)), - } - ; } - diff --git a/quelldatein/aufbau/aktoren/verwerfer.ts b/quelldatein/aufbau/aktoren/verwerfer.ts index cc364f2..e60bbbf 100644 --- a/quelldatein/aufbau/aktoren/verwerfer.ts +++ b/quelldatein/aufbau/aktoren/verwerfer.ts @@ -16,128 +16,141 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_verwerfer = + export module mod_aufbau { + + export module mod_aktor_verwerfer + { + + /** + * @author kcf + */ + let art : string = "verwerfer"; + + + /** + * @author kcf + */ + export type typ_verwerfer = + { + } + ; + + + /** + * @author kcf + */ + function erstellen + ( + ) + : typ_verwerfer + { + return { + }; + } + + + /** + * @author kcf + */ + export function erstellen_aktor + ( + ) + : mod_aktor.typ_aktor + { + return einpacken(art, erstellen()); + } + + + /** + * @author kcf + */ + function beispiel + ( + ) + : typ_verwerfer + { + return erstellen(); + } + + + /** + * @author kcf + */ + function drehen + ( + verwerfer : typ_verwerfer, + inkrement ?: int + ) + : void + { + } + + + /** + * @author kcf + */ + function verwenden + ( + verwerfer : typ_verwerfer, + figur : mod_figur.typ_figur + ) + : void + { + mod_figur.verwerfen(figur); + } + + + /** + * @author kcf + */ + function exportieren + ( + verwerfer : typ_verwerfer + ) + : any + { + return { + }; + } + + + /** + * @author kcf + */ + function importieren + ( + roh : any + ) + : typ_verwerfer + { + return ( + erstellen + ( + ) + ); + } + + + /** + * @author kcf + */ + mod_aktor.implementierung_aktor[art] = + { + "beispiel": () => einpacken(art, beispiel()), + "drehen": (aktor, inkrement) => drehen(auspacken(aktor), inkrement), + "verwenden": (aktor, figur) => verwenden(auspacken(aktor), figur), + "exportieren": (aktor) => ({"art": art, "angaben": exportieren(aktor.angaben)}), + "importieren": (roh) => einpacken(art, importieren(roh)), + } + ; + + } + } - ; - - - /** - * @author kcf - */ - function verwerfer_erstellen - ( - ) - : typ_verwerfer - { - return { - }; - } - - - /** - * @author kcf - */ - export function verwerfer_erstellen_aktor - ( - ) - : typ_aktor - { - return {"art": "verwerfer", "angaben": verwerfer_erstellen()}; - } - - - /** - * @author kcf - */ - function verwerfer_beispiel - ( - ) - : typ_verwerfer - { - return verwerfer_erstellen(); - } - - - /** - * @author kcf - */ - function verwerfer_drehen - ( - verwerfer : typ_verwerfer, - inkrement ?: int - ) - : void - { - } - - - /** - * @author kcf - */ - function verwerfer_verwenden - ( - verwerfer : typ_verwerfer, - figur : typ_figur - ) - : void - { - figur_verwerfen(figur); - } - - - /** - * @author kcf - */ - function verwerfer_exportieren - ( - verwerfer : typ_verwerfer - ) - : any - { - return { - }; - } - - - /** - * @author kcf - */ - function verwerfer_importieren - ( - roh : any - ) - : typ_verwerfer - { - return ( - verwerfer_erstellen - ( - ) - ); - } - - - /** - * @author kcf - */ - 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)), - } - ; } - diff --git a/quelldatein/aufbau/aufgaben/akzeptortest.ts b/quelldatein/aufbau/aufgaben/akzeptortest.ts index daef64f..b30205e 100644 --- a/quelldatein/aufbau/aufgaben/akzeptortest.ts +++ b/quelldatein/aufbau/aufgaben/akzeptortest.ts @@ -24,7 +24,7 @@ module mod_vtm_aufbau */ export type typ_akzeptortest = { - eingabe : Array; + eingabe : Array; annehmen : boolean; } ; @@ -35,7 +35,7 @@ module mod_vtm_aufbau */ export function akzeptortest_erstellen ( - eingabe : Array, + eingabe : Array, annehmen : boolean ) : typ_akzeptortest @@ -54,7 +54,7 @@ module mod_vtm_aufbau ( akzeptortest : typ_akzeptortest ) - : Array + : Array { return akzeptortest.eingabe; } @@ -67,7 +67,7 @@ module mod_vtm_aufbau ( akzeptortest : typ_akzeptortest, angenommen : boolean, - ausgabe : Array + ausgabe : Array ) : boolean { diff --git a/quelldatein/aufbau/aufgaben/test.ts b/quelldatein/aufbau/aufgaben/test.ts index d86953f..b034dc8 100644 --- a/quelldatein/aufbau/aufgaben/test.ts +++ b/quelldatein/aufbau/aufgaben/test.ts @@ -32,10 +32,10 @@ module mod_vtm_aufbau ( test : typ_test ) - : Array + : Array { return ( - fallunterscheidung> + fallunterscheidung> ( test, { @@ -54,7 +54,7 @@ module mod_vtm_aufbau ( test : typ_test, angenommen : boolean, - ausgabe : Array + ausgabe : Array ) : boolean { diff --git a/quelldatein/aufbau/aufgaben/transduktortest.ts b/quelldatein/aufbau/aufgaben/transduktortest.ts index a2701c9..04cfa1d 100644 --- a/quelldatein/aufbau/aufgaben/transduktortest.ts +++ b/quelldatein/aufbau/aufgaben/transduktortest.ts @@ -24,8 +24,8 @@ module mod_vtm_aufbau */ export type typ_transduktortest = { - eingabe : Array; - ausgabe : Array; + eingabe : Array; + ausgabe : Array; } ; @@ -35,8 +35,8 @@ module mod_vtm_aufbau */ export function transduktortest_erstellen ( - eingabe : Array, - ausgabe : Array + eingabe : Array, + ausgabe : Array ) : typ_transduktortest { @@ -54,7 +54,7 @@ module mod_vtm_aufbau ( transduktortest : typ_transduktortest ) - : Array + : Array { return transduktortest.eingabe; } @@ -67,7 +67,7 @@ module mod_vtm_aufbau ( transduktortest : typ_transduktortest, angenommen : boolean, - ausgabe : Array + ausgabe : Array ) : boolean { @@ -80,7 +80,7 @@ module mod_vtm_aufbau let gleich : boolean = true; for (let index : int = 0; index < transduktortest.ausgabe.length; index += 1) { - if (! symbol_vergleichen(transduktortest.ausgabe[index], ausgabe[index])) + if (! mod_vtm.mod_aufbau.mod_symbol.vergleichen(transduktortest.ausgabe[index], ausgabe[index])) { gleich = false; break; diff --git a/quelldatein/aufbau/figur.ts b/quelldatein/aufbau/figur.ts index 92a890c..1547a8a 100644 --- a/quelldatein/aufbau/figur.ts +++ b/quelldatein/aufbau/figur.ts @@ -3,186 +3,196 @@ * Copyright (C) 2016 Christian Fraß * * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General export function figur_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 figur_License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU General export function figur_License + * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_figur = + export module mod_aufbau { - zustand : typ_zustand; - band : Array; - stelle : typ_stelle; - } - ; - - - /** - * @author kcf - */ - export function figur_erstellen - ( - band : Array = [], - stelle : typ_stelle = stelle_null() - ) - : typ_figur - { - return { - "zustand": zustand_laufend, - "band": band, - "stelle": stelle, - }; - } - - - /** - * @author kcf - */ - export function figur_zustand_lesen - ( - figur : typ_figur - ) - : typ_zustand - { - return figur.zustand; - } - - - /** - * @author kcf - */ - export function figur_band_lesen - ( - figur : typ_figur - ) - : Array - { - return figur.band; - } - - - /** - * @author kcf - */ - export function figur_stelle_lesen - ( - figur : typ_figur - ) - : typ_stelle - { - return figur.stelle; - } - - - /** - * @author kcf - */ - export function figur_bewegen - ( - figur : typ_figur, - richtung : typ_richtung - ) - : void - { - let summand : typ_stelle = stelle_von_richtung(richtung); - figur.stelle = stelle_addieren(figur.stelle, summand); - } - - - /** - * @author kcf - */ - export function figur_schreiben - ( - figur : typ_figur, - symbol : typ_symbol - ) - : void - { - figur.band.push(symbol); - } - - - /** - * @author kcf - */ - export function figur_lesen - ( - figur : typ_figur - ) - : schnittstelle_fehlermonade - { - if (figur.band.length <= 0) + + export module mod_figur { - return (new klasse_nichts()); - } - else - { - return (new klasse_schlicht(figur.band[0])); + + /** + * @author kcf + */ + export type typ_figur = + { + zustand : mod_zustand.typ_zustand; + band : Array; + stelle : mod_stelle.typ_stelle; + } + ; + + + /** + * @author kcf + */ + export function erstellen + ( + band : Array = [], + stelle : mod_stelle.typ_stelle = mod_stelle.null_() + ) + : typ_figur + { + return { + "zustand": mod_zustand.laufend, + "band": band, + "stelle": stelle, + }; + } + + + /** + * @author kcf + */ + export function zustand_lesen + ( + figur : typ_figur + ) + : mod_zustand.typ_zustand + { + return figur.zustand; + } + + + /** + * @author kcf + */ + export function band_lesen + ( + figur : typ_figur + ) + : Array + { + return figur.band; + } + + + /** + * @author kcf + */ + export function stelle_lesen + ( + figur : typ_figur + ) + : mod_stelle.typ_stelle + { + return figur.stelle; + } + + + /** + * @author kcf + */ + export function bewegen + ( + figur : typ_figur, + richtung : mod_richtung.typ_richtung + ) + : void + { + let summand : mod_stelle.typ_stelle = mod_stelle.von_richtung(richtung); + figur.stelle = mod_stelle.addieren(figur.stelle, summand); + } + + + /** + * @author kcf + */ + export function schreiben + ( + figur : typ_figur, + symbol : mod_symbol.typ_symbol + ) + : void + { + figur.band.push(symbol); + } + + + /** + * @author kcf + */ + export function lesen + ( + figur : typ_figur + ) + : schnittstelle_fehlermonade + { + if (figur.band.length <= 0) + { + return (new klasse_nichts()); + } + else + { + return (new klasse_schlicht(figur.band[0])); + } + } + + + /** + * @author kcf + */ + export function schieben + ( + figur : typ_figur + ) + : void + { + if (figur.band.length <= 0) + { + let meldung : string = "Band ist leer"; + throw (new Error(meldung)); + } + else + { + figur.band.shift(); + } + } + + + /** + * @author kcf + */ + export function annehmen + ( + figur : typ_figur + ) + : void + { + figur.zustand = mod_zustand.angenommen; + } + + + /** + * @author kcf + */ + export function verwerfen + ( + figur : typ_figur + ) + : void + { + figur.zustand = mod_zustand.abgelehnt; + } + } + } - - - /** - * @author kcf - */ - export function figur_schieben - ( - figur : typ_figur - ) - : void - { - if (figur.band.length <= 0) - { - let meldung : string = "Band ist leer"; - throw (new Error(meldung)); - } - else - { - figur.band.shift(); - } - } - - - /** - * @author kcf - */ - export function figur_annehmen - ( - figur : typ_figur - ) - : void - { - figur.zustand = zustand_angenommen; - } - - - /** - * @author kcf - */ - export function figur_verwerfen - ( - figur : typ_figur - ) - : void - { - figur.zustand = zustand_abgelehnt; - } - + } diff --git a/quelldatein/aufbau/modus.ts b/quelldatein/aufbau/modus.ts index 2d3612d..8e38372 100644 --- a/quelldatein/aufbau/modus.ts +++ b/quelldatein/aufbau/modus.ts @@ -16,22 +16,32 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_modus = int; - - - /** - * @author kcf - */ - export const modus_initial = 0; - export const modus_ungewiss = 1; - export const modus_fehlerhaft = 2; - export const modus_korrekt = 3; + export module mod_aufbau + { + + export module mod_modus + { + + /** + * @author kcf + */ + export type typ_modus = int; + + + /** + * @author kcf + */ + export const initial = 0; + export const ungewiss = 1; + export const fehlerhaft = 2; + export const korrekt = 3; + + } + + } } diff --git a/quelldatein/aufbau/partie.ts b/quelldatein/aufbau/partie.ts index 601e7f3..391c63d 100644 --- a/quelldatein/aufbau/partie.ts +++ b/quelldatein/aufbau/partie.ts @@ -3,358 +3,368 @@ * Copyright (C) 2016 Christian Fraß * * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General export function partie_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 partie_License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU General export function partie_License + * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_partie = + export module mod_aufbau { - welt : typ_welt; - figur : schnittstelle_fehlermonade; - aufgabe : typ_aufgabe; - testindex : schnittstelle_fehlermonade; - modus : typ_modus; - lauscher : {[ereignis : string] : Array<(angaben ?: any)=>void>}; - } - ; - - - /** - * @author kcf - */ - export function partie_erstellen - ( - aufgabe : typ_aufgabe - ) - : typ_partie - { - let partie : typ_partie = { - "welt": undefined, - "figur": undefined, - "aufgabe": aufgabe, - "testindex": undefined, - "modus": undefined, - "lauscher": undefined, - }; - partie.lauscher = { - "aenderung_aufgabe": [], - "aenderung_welt": [], - "aenderung_figur": [], - "aenderung_modus": [], - }; - partie_welt_leeren(partie, false); - partie_zuruecksetzen(partie, false); - return partie; - } - - - /** - * @author kcf - */ - export function partie_lauschen(partie : typ_partie, ereignis : string, prozedur : (angaben ?: any)=>void) : void - { - if (ereignis in partie.lauscher) + + export module mod_partie { - partie.lauscher[ereignis].push(prozedur); - } - else - { - let meldung : string = "kein Ereignis mit diesem Name"; - throw (new Error(meldung)); - } - } - - - /** - * @author kcf - */ - function partie_benachrichtigen(partie : typ_partie, ereignis : string, angaben : any = {}) : void - { - if (ereignis in partie.lauscher) - { - partie.lauscher[ereignis].forEach - ( - prozedur => - { - prozedur(angaben); - } - ) - ; - } - else - { - let meldung : string = "kein Ereignis mit diesem Name"; - throw (new Error(meldung)); - } - } - - - /** - * @author kcf - */ - export function partie_zuruecksetzen(partie : typ_partie, bescheid_geben : boolean = true) : void - { - partie.figur = (new klasse_nichts()); - partie.testindex = (new klasse_nichts()); - partie.modus = modus_initial; - if (bescheid_geben) - { - partie_benachrichtigen(partie, "aenderung_figur", {}); - partie_benachrichtigen(partie, "aenderung_modus", {}); - } - else - { - // nichts tun - } - } - - - /** - * @author kcf - */ - export function partie_aufgabe_lesen(partie : typ_partie) : typ_aufgabe - { - return partie.aufgabe; - } - - - /** - * @author kcf - */ - export function partie_aufgabe_setzen(partie : typ_partie, aufgabe : typ_aufgabe) : void - { - partie.aufgabe = aufgabe; - // partie.welt_leeren(); - partie_benachrichtigen(partie, "aenderung_aufgabe", {}); - partie_zuruecksetzen(partie); - } - - - /** - * @author kcf - */ - export function partie_welt_lesen(partie : typ_partie) : typ_welt - { - return partie.welt; - } - - - /** - * @author kcf - */ - export function partie_welt_setzen(partie : typ_partie, welt : mod_vtm_aufbau.typ_welt, bescheid_geben : boolean = true) : void - { - partie.welt = welt; - if (bescheid_geben) - { - partie_benachrichtigen(partie, "aenderung_welt", {}); - } - else - { - // nichts tun - } - } - - - /** - * @author kcf - */ - export function partie_welt_leeren(partie : typ_partie, bescheid_geben : boolean = true) : void - { - partie.welt = welt_blanko(); - if (bescheid_geben) - { - partie_benachrichtigen(partie, "aenderung_welt", {}); - } - else - { - // nichts tun - } - } - - - /** - * @author kcf - */ - export function partie_figur_lesen(partie : typ_partie) : schnittstelle_fehlermonade - { - return partie.figur; - } - - - /** - * @author kcf - */ - export function partie_modus_lesen(partie : typ_partie) : typ_modus - { - return partie.modus; - } - - - /** - * @author kcf - */ - export function partie_welt_feld_wechseln(partie : typ_partie, stelle : typ_stelle, umgekehrt : boolean = false) : void - { - if (! (partie.modus === mod_vtm_aufbau.modus_initial)) - { - let meldung : string = "gesperrt"; - } - else - { - welt_feld_wechseln(partie.welt, stelle, umgekehrt); - partie_benachrichtigen - ( - partie, - "aenderung_welt", - { - "art": "feld_wechseln", - "angaben": - { - "stelle": stelle, - "umgekehrt": umgekehrt, - "feld": welt_feld_holen(partie.welt, stelle), - } - } - ) - ; - } - } - - - /** - * @author kcf - */ - export function partie_welt_feld_drehen(partie : typ_partie, stelle : typ_stelle, inkrement : int = +1) : void - { - if (! (partie.modus === mod_vtm_aufbau.modus_initial)) - { - let meldung : string = "gesperrt"; - } - else - { - welt_feld_drehen(partie.welt, stelle, inkrement); - partie_benachrichtigen(partie, "aenderung_welt", {}); - } - } - - - /** - * @author kcf - */ - export function partie_fortfahren(partie : typ_partie) : void - { - switch (partie.modus) - { - case modus_initial: + + /** + * @author kcf + */ + export type typ_partie = { - partie.modus = modus_ungewiss; - partie.testindex = (new klasse_schlicht(0)); - partie_benachrichtigen(partie, "aenderung_modus", {}); - break; + welt : mod_welt.typ_welt; + figur : schnittstelle_fehlermonade; + aufgabe : mod_vtm_aufbau.typ_aufgabe; + testindex : schnittstelle_fehlermonade; + modus : mod_modus.typ_modus; + lauscher : {[ereignis : string] : Array<(angaben ?: any)=>void>}; } - case modus_ungewiss: + ; + + + /** + * @author kcf + */ + export function erstellen + ( + aufgabe : mod_vtm_aufbau.typ_aufgabe + ) + : typ_partie { - if (! partie.figur.ist_schlicht()) + let partie : typ_partie = { + "welt": undefined, + "figur": undefined, + "aufgabe": aufgabe, + "testindex": undefined, + "modus": undefined, + "lauscher": undefined, + }; + partie.lauscher = { + "aenderung_aufgabe": [], + "aenderung_welt": [], + "aenderung_figur": [], + "aenderung_modus": [], + }; + welt_leeren(partie, false); + zuruecksetzen(partie, false); + return partie; + } + + + /** + * @author kcf + */ + export function lauschen(partie : typ_partie, ereignis : string, prozedur : (angaben ?: any)=>void) : void + { + if (ereignis in partie.lauscher) { - let test : typ_test = aufgabe_tests(partie.aufgabe)[partie.testindex.lesen()]; - let band : Array = mod_vtm_helfer.liste_kopieren(test_eingabe(test)); - let stelle : typ_stelle = welt_erzeuger_finden(partie.welt); - partie.figur = ( - new klasse_schlicht - ( - figur_erstellen - ( - band, - stelle - ) - ) - ); + partie.lauscher[ereignis].push(prozedur); } else { - let figur : typ_figur = partie.figur.lesen(); - let stelle : typ_stelle = figur_stelle_lesen(figur); - let aktor_ : schnittstelle_fehlermonade = welt_feld_holen(partie.welt, stelle); - 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) - { - // nichts tun - } - else if ((zustand === zustand_angenommen) || (zustand === zustand_abgelehnt)) - { - let angenommen : boolean = (zustand === zustand_angenommen); - let ausgabe : Array = figur_band_lesen(figur); - partie.figur = (new klasse_nichts()); - let testindex : int = partie.testindex.lesen(); - let tests : Array = aufgabe_tests(partie.aufgabe); - let test : typ_test = tests[testindex]; - if (! test_pruefen(test, angenommen, ausgabe)) + let meldung : string = "kein Ereignis mit diesem Name"; + throw (new Error(meldung)); + } + } + + + /** + * @author kcf + */ + function benachrichtigen(partie : typ_partie, ereignis : string, angaben : any = {}) : void + { + if (ereignis in partie.lauscher) + { + partie.lauscher[ereignis].forEach + ( + prozedur => { - partie.modus = modus_fehlerhaft; - partie_benachrichtigen(partie, "aenderung_modus", {}); + prozedur(angaben); + } + ) + ; + } + else + { + let meldung : string = "kein Ereignis mit diesem Name"; + throw (new Error(meldung)); + } + } + + + /** + * @author kcf + */ + export function zuruecksetzen(partie : typ_partie, bescheid_geben : boolean = true) : void + { + partie.figur = (new klasse_nichts()); + partie.testindex = (new klasse_nichts()); + partie.modus = mod_modus.initial; + if (bescheid_geben) + { + benachrichtigen(partie, "aenderung_figur", {}); + benachrichtigen(partie, "aenderung_modus", {}); + } + else + { + // nichts tun + } + } + + + /** + * @author kcf + */ + export function aufgabe_lesen(partie : typ_partie) : mod_vtm_aufbau.typ_aufgabe + { + return partie.aufgabe; + } + + + /** + * @author kcf + */ + export function aufgabe_setzen(partie : typ_partie, aufgabe : mod_vtm_aufbau.typ_aufgabe) : void + { + partie.aufgabe = aufgabe; + // partie.welt_leeren(); + benachrichtigen(partie, "aenderung_aufgabe", {}); + zuruecksetzen(partie); + } + + + /** + * @author kcf + */ + export function welt_lesen(partie : typ_partie) : mod_welt.typ_welt + { + return partie.welt; + } + + + /** + * @author kcf + */ + export function welt_setzen(partie : typ_partie, welt : mod_welt.typ_welt, bescheid_geben : boolean = true) : void + { + partie.welt = welt; + if (bescheid_geben) + { + benachrichtigen(partie, "aenderung_welt", {}); + } + else + { + // nichts tun + } + } + + + /** + * @author kcf + */ + export function welt_leeren(partie : typ_partie, bescheid_geben : boolean = true) : void + { + partie.welt = mod_welt.blanko(); + if (bescheid_geben) + { + benachrichtigen(partie, "aenderung_welt", {}); + } + else + { + // nichts tun + } + } + + + /** + * @author kcf + */ + export function figur_lesen(partie : typ_partie) : schnittstelle_fehlermonade + { + return partie.figur; + } + + + /** + * @author kcf + */ + export function modus_lesen(partie : typ_partie) : mod_modus.typ_modus + { + return partie.modus; + } + + + /** + * @author kcf + */ + export function welt_feld_wechseln(partie : typ_partie, stelle : mod_stelle.typ_stelle, umgekehrt : boolean = false) : void + { + if (! (partie.modus === mod_modus.initial)) + { + let meldung : string = "gesperrt"; + } + else + { + mod_welt.feld_wechseln(partie.welt, stelle, umgekehrt); + benachrichtigen + ( + partie, + "aenderung_welt", + { + "art": "feld_wechseln", + "angaben": + { + "stelle": stelle, + "umgekehrt": umgekehrt, + "feld": mod_welt.feld_holen(partie.welt, stelle), + } + } + ) + ; + } + } + + + /** + * @author kcf + */ + export function welt_feld_drehen(partie : typ_partie, stelle : mod_stelle.typ_stelle, inkrement : int = +1) : void + { + if (! (partie.modus === mod_modus.initial)) + { + let meldung : string = "gesperrt"; + } + else + { + mod_welt.feld_drehen(partie.welt, stelle, inkrement); + benachrichtigen(partie, "aenderung_welt", {}); + } + } + + + /** + * @author kcf + */ + export function fortfahren(partie : typ_partie) : void + { + switch (partie.modus) + { + case mod_modus.initial: + { + partie.modus = mod_modus.ungewiss; + partie.testindex = (new klasse_schlicht(0)); + benachrichtigen(partie, "aenderung_modus", {}); + break; + } + case mod_modus.ungewiss: + { + if (! partie.figur.ist_schlicht()) + { + let test : mod_vtm_aufbau.typ_test = mod_vtm_aufbau.aufgabe_tests(partie.aufgabe)[partie.testindex.lesen()]; + let band : Array = mod_vtm_helfer.liste_kopieren(mod_vtm_aufbau.test_eingabe(test)); + let stelle : mod_stelle.typ_stelle = mod_welt.erzeuger_finden(partie.welt); + partie.figur = ( + new klasse_schlicht + ( + mod_figur.erstellen + ( + band, + stelle + ) + ) + ); } else { - testindex += 1; - if (testindex < tests.length) + let figur : mod_figur.typ_figur = partie.figur.lesen(); + let stelle : mod_stelle.typ_stelle = mod_figur.stelle_lesen(figur); + let aktor_ : schnittstelle_fehlermonade = mod_welt.feld_holen(partie.welt, stelle); + let aktor : mod_aktor.typ_aktor = (aktor_.ist_schlicht() ? aktor_.lesen() : mod_aktor_verwerfer.erstellen_aktor()); + mod_aktor.verwenden(aktor, figur); + let zustand : mod_zustand.typ_zustand = mod_figur.zustand_lesen(figur); + if (zustand === mod_zustand.laufend) { - // nächsten Test auswählen - partie.testindex = (new klasse_schlicht(testindex)); + // nichts tun + } + else if ((zustand === mod_zustand.angenommen) || (zustand === mod_zustand.abgelehnt)) + { + let angenommen : boolean = (zustand === mod_zustand.angenommen); + let ausgabe : Array = mod_figur.band_lesen(figur); + partie.figur = (new klasse_nichts()); + let testindex : int = partie.testindex.lesen(); + let tests : Array = mod_vtm_aufbau.aufgabe_tests(partie.aufgabe); + let test : mod_vtm_aufbau.typ_test = tests[testindex]; + if (! mod_vtm_aufbau.test_pruefen(test, angenommen, ausgabe)) + { + partie.modus = mod_modus.fehlerhaft; + benachrichtigen(partie, "aenderung_modus", {}); + } + else + { + testindex += 1; + if (testindex < tests.length) + { + // nächsten Test auswählen + partie.testindex = (new klasse_schlicht(testindex)); + } + else + { + // auf Modus "korrekt" wechseln + partie.testindex = (new klasse_nichts()); + partie.modus = mod_modus.korrekt; + benachrichtigen(partie, "aenderung_modus", {}); + } + } } else { - // auf Modus "korrekt" wechseln - partie.testindex = (new klasse_nichts()); - partie.modus = modus_korrekt; - partie_benachrichtigen(partie, "aenderung_modus", {}); + let meldung : string = "unbehandelter Zustand"; + throw (new Error(meldung)); } } + benachrichtigen(partie, "aenderung_figur", {}); + break; } - else + case mod_modus.fehlerhaft: { - let meldung : string = "unbehandelter Zustand"; + // nichts tun + break; + } + case mod_modus.korrekt: + { + // nichts tun + break; + } + default: + { + let meldung : string = "unbehandelter Modus"; throw (new Error(meldung)); + break; } } - partie_benachrichtigen(partie, "aenderung_figur", {}); - break; - } - case modus_fehlerhaft: - { - // nichts tun - break; - } - case modus_korrekt: - { - // nichts tun - break; - } - default: - { - let meldung : string = "unbehandelter Modus"; - throw (new Error(meldung)); - break; + } + } - + } } diff --git a/quelldatein/aufbau/richtung.ts b/quelldatein/aufbau/richtung.ts index c02891b..27c2d81 100644 --- a/quelldatein/aufbau/richtung.ts +++ b/quelldatein/aufbau/richtung.ts @@ -16,40 +16,49 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_richtung = int; - - - /** - * @author kcf - */ - export function richtung_addieren(richtung1 : typ_richtung, richtung2 : typ_richtung) : typ_richtung + export module mod_aufbau { - return mod_vtm_helfer.mod(richtung1 + richtung2, 6); + + export module mod_richtung + { + + /** + * @author kcf + */ + export type typ_richtung = int; + + + /** + * @author kcf + */ + export function addieren(richtung1 : typ_richtung, richtung2 : typ_richtung) : typ_richtung + { + return mod_vtm_helfer.mod(richtung1 + richtung2, 6); + } + + + /** + * @author kcf + */ + export function exportieren(richtung : typ_richtung) : int + { + return richtung; + } + + + /** + * @author kcf + */ + export function importieren(richtung_ : int) : typ_richtung + { + return richtung_; + } + + } + } - - - /** - * @author kcf - */ - export function richtung_exportieren(richtung : typ_richtung) : int - { - return richtung; - } - - - /** - * @author kcf - */ - export function richtung_importieren(richtung_ : int) : typ_richtung - { - return richtung_; - } - } diff --git a/quelldatein/aufbau/stelle.ts b/quelldatein/aufbau/stelle.ts index df378d0..5a22190 100644 --- a/quelldatein/aufbau/stelle.ts +++ b/quelldatein/aufbau/stelle.ts @@ -16,86 +16,95 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_stelle = {u : int; v : int;}; - - - /** - * @author kcf - */ - export function stelle_hash(stelle : typ_stelle) : string + export module mod_aufbau { - return (stelle.u.toFixed(0) + "_" + stelle.v.toFixed(0)); - } - - - /** - * @author kcf - */ - export function stelle_von_hash(hash : string) : typ_stelle - { - let teile : Array = hash.split("_"); - return {"u": parseInt(teile[0]), "v": parseInt(teile[1])}; - } - - - /** - * @author kcf - */ - export function stelle_null() : typ_stelle - { - return {"u": 0, "v": 0}; - } - - - /** - * @author kcf - */ - export function stelle_von_richtung(richtung : typ_richtung) : typ_stelle - { - switch (richtung) - { - case 0: {return {"u": +1, "v": 0}; break;} - case 1: {return {"u": +1, "v": +1}; break;} - case 2: {return {"u": 0, "v": +1}; break;} - case 3: {return {"u": -1, "v": 0}; break;} - case 4: {return {"u": -1, "v": -1}; break;} - case 5: {return {"u": 0, "v": -1}; break;} - default: {throw (new Error("ungültige Richtung '" + String(richtung) + "'")); break;} - } - } - - - /** - * @author kcf - */ - export function stelle_addieren(stelle1 : typ_stelle, stelle2 : typ_stelle) : typ_stelle - { - return {"u": (stelle1.u + stelle2.u), "v": (stelle1.v + stelle2.v)}; - } - - - /** - * @author kcf - */ - export function stelle_exportieren(stelle : typ_stelle) : string - { - return stelle_hash(stelle); - } - - - /** - * @author kcf - */ - export function stelle_importieren(stelle_ : string) : typ_stelle - { - return stelle_von_hash(stelle_); - } + export module mod_stelle + { + + /** + * @author kcf + */ + export type typ_stelle = {u : int; v : int;}; + + + /** + * @author kcf + */ + export function hash(stelle : typ_stelle) : string + { + return (stelle.u.toFixed(0) + "_" + stelle.v.toFixed(0)); + } + + + /** + * @author kcf + */ + export function von_hash(hash : string) : typ_stelle + { + let teile : Array = hash.split("_"); + return {"u": parseInt(teile[0]), "v": parseInt(teile[1])}; + } + + + /** + * @author kcf + */ + export function null_() : typ_stelle + { + return {"u": 0, "v": 0}; + } + + + /** + * @author kcf + */ + export function von_richtung(richtung : mod_richtung.typ_richtung) : typ_stelle + { + switch (richtung) + { + case 0: {return {"u": +1, "v": 0}; break;} + case 1: {return {"u": +1, "v": +1}; break;} + case 2: {return {"u": 0, "v": +1}; break;} + case 3: {return {"u": -1, "v": 0}; break;} + case 4: {return {"u": -1, "v": -1}; break;} + case 5: {return {"u": 0, "v": -1}; break;} + default: {throw (new Error("ungültige Richtung '" + String(richtung) + "'")); break;} + } + } + + + /** + * @author kcf + */ + export function addieren(stelle1 : typ_stelle, stelle2 : typ_stelle) : typ_stelle + { + return {"u": (stelle1.u + stelle2.u), "v": (stelle1.v + stelle2.v)}; + } + + + /** + * @author kcf + */ + export function exportieren(stelle : typ_stelle) : string + { + return hash(stelle); + } + + + /** + * @author kcf + */ + export function importieren(stelle_ : string) : typ_stelle + { + return von_hash(stelle_); + } + + } + + } } diff --git a/quelldatein/aufbau/symbol.ts b/quelldatein/aufbau/symbol.ts index e81d5f5..1a70e1b 100644 --- a/quelldatein/aufbau/symbol.ts +++ b/quelldatein/aufbau/symbol.ts @@ -16,40 +16,50 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_symbol = int; - - - /** - * @author kcf - */ - export function symbol_vergleichen(symbol1 : typ_symbol, symbol2 : typ_symbol) : boolean + export module mod_aufbau { - return (symbol1 === symbol2); - } - - - /** - * @author kcf - */ - export function symbol_exportieren(symbol : typ_symbol) : int - { - return symbol; - } - - - /** - * @author kcf - */ - export function symbol_importieren(symbol_ : int) : typ_symbol - { - return symbol_; - } + export module mod_symbol + { + + /** + * @author kcf + */ + export type typ_symbol = int; + + + /** + * @author kcf + */ + export function vergleichen(symbol1 : typ_symbol, symbol2 : typ_symbol) : boolean + { + return (symbol1 === symbol2); + } + + + /** + * @author kcf + */ + export function exportieren(symbol : typ_symbol) : int + { + return symbol; + } + + + /** + * @author kcf + */ + export function importieren(symbol_ : int) : typ_symbol + { + return symbol_; + } + + } + + } + } diff --git a/quelldatein/aufbau/welt.ts b/quelldatein/aufbau/welt.ts index db1902b..564fa2b 100644 --- a/quelldatein/aufbau/welt.ts +++ b/quelldatein/aufbau/welt.ts @@ -3,343 +3,353 @@ * Copyright (C) 2016 Christian Fraß * * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General export function welt_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 welt_License for more details. + * GNU General Public License for more details. * - * You should have received a copy of the GNU General export function welt_License + * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_welt = + export module mod_aufbau { - felder : mod_vtm_helfer.klasse_hashmap; - } - ; - + + export module mod_welt + { + + /** + * @author kcf + */ + export type typ_welt = + { + felder : mod_vtm_helfer.klasse_hashmap; + } + ; + - /** - * @author kcf - */ - export function welt_erstellen - ( - felder : mod_vtm_helfer.klasse_hashmap = (new mod_vtm_helfer.klasse_hashmap(stelle_hash)) - ) - : typ_welt - { - return { - "felder": felder, - }; - } - - - /** - * @author kcf - */ - export function welt_felder_lesen(welt : typ_welt) : Array<{stelle : typ_stelle; aktor : typ_aktor;}> - { - let felder : Array<{stelle : typ_stelle; aktor : typ_aktor;}> = []; - welt.felder.iterieren - ( - (stelle, aktor) => felder.push({"stelle": stelle, "aktor": aktor}) - ) - ; - return felder; - } - - - /** - * @author kcf - */ - export function welt_feld_holen(welt : typ_welt, stelle : typ_stelle) : schnittstelle_fehlermonade - { - return welt.felder.holen(stelle); - } - - - /** - * @author kcf - */ - export function welt_feld_setzen(welt : typ_welt, stelle : typ_stelle, aktor : typ_aktor) : void - { - welt.felder.setzen(stelle, aktor); - } - - - /** - * @author kcf - */ - export function welt_feld_wechseln(welt : typ_welt, stelle : typ_stelle, umgekehrt : boolean = false) : void - { - let erweitert : boolean = true; - let liste : Array<{pruefer : (aktor : typ_aktor)=>boolean; ersteller : ()=>typ_aktor;}> = ( - [] - .concat - ( - [ - { - "pruefer": (aktor) => (aktor.art === "befoerderer"), - "ersteller": () => befoerderer_erstellen_aktor(0), - }, - ] - ) - .concat - ( - mod_vtm_helfer.sequenz(erweitert ? 4 : 2).map - ( - symbol => ( - { - "pruefer": (aktor) => - { - if (aktor.art === "schreiber") - { - return (schreiber_symbol_lesen(aktor.angaben) === symbol); - } - else - { - return false; - } - } - , - "ersteller": () => schreiber_erstellen_aktor(0, symbol) - } + /** + * @author kcf + */ + export function erstellen + ( + felder : mod_vtm_helfer.klasse_hashmap = (new mod_vtm_helfer.klasse_hashmap(mod_stelle.hash)) + ) + : typ_welt + { + return { + "felder": felder, + }; + } + + + /** + * @author kcf + */ + export function felder_lesen(welt : typ_welt) : Array<{stelle : mod_stelle.typ_stelle; aktor : mod_aktor.typ_aktor;}> + { + let felder : Array<{stelle : mod_stelle.typ_stelle; aktor : mod_aktor.typ_aktor;}> = []; + welt.felder.iterieren + ( + (stelle, aktor) => felder.push({"stelle": stelle, "aktor": aktor}) ) - ) - ) - .concat - ( - mod_vtm_helfer.sequenz(erweitert ? 2 : 1).map - ( - index => - { - let symbol_links : typ_symbol = (2*index+0); - let symbol_rechts : typ_symbol = (2*index+1); - return ( + ; + return felder; + } + + + /** + * @author kcf + */ + export function feld_holen(welt : typ_welt, stelle : mod_stelle.typ_stelle) : schnittstelle_fehlermonade + { + return welt.felder.holen(stelle); + } + + + /** + * @author kcf + */ + export function feld_setzen(welt : typ_welt, stelle : mod_stelle.typ_stelle, aktor : mod_aktor.typ_aktor) : void + { + welt.felder.setzen(stelle, aktor); + } + + + /** + * @author kcf + */ + export function feld_wechseln(welt : typ_welt, stelle : mod_stelle.typ_stelle, umgekehrt : boolean = false) : void + { + let erweitert : boolean = true; + let liste : Array<{pruefer : (aktor : mod_aktor.typ_aktor)=>boolean; ersteller : ()=>mod_aktor.typ_aktor;}> = ( + [] + .concat + ( + [ { - "pruefer": (aktor) => + "pruefer": (aktor) => (aktor.art === "befoerderer"), + "ersteller": () => mod_aktor_befoerderer.erstellen_aktor(0), + }, + ] + ) + .concat + ( + mod_vtm_helfer.sequenz(erweitert ? 4 : 2).map + ( + symbol => ( { - if (aktor.art === "leser") + "pruefer": (aktor) => { - return ( - (leser_symbol_links_lesen(aktor.angaben) === symbol_links) - && - (leser_symbol_rechts_lesen(aktor.angaben) === symbol_rechts) - ); + if (aktor.art === "schreiber") + { + return (mod_aktor_schreiber.symbol_lesen(aktor.angaben) === symbol); + } + else + { + return false; + } + } + , + "ersteller": () => mod_aktor_schreiber.erstellen_aktor(0, symbol) + } + ) + ) + ) + .concat + ( + mod_vtm_helfer.sequenz(erweitert ? 2 : 1).map + ( + index => + { + let symbol_links : mod_symbol.typ_symbol = (2*index+0); + let symbol_rechts : mod_symbol.typ_symbol = (2*index+1); + return ( + { + "pruefer": (aktor) => + { + if (aktor.art === "leser") + { + return ( + (mod_aktor_leser.symbol_links_lesen(aktor.angaben) === symbol_links) + && + (mod_aktor_leser.symbol_rechts_lesen(aktor.angaben) === symbol_rechts) + ); + } + else + { + return false; + } + } + , + "ersteller": () => mod_aktor_leser.erstellen_aktor(0, symbol_links, symbol_rechts) + } + ); + } + ) + ) + .concat + ( + [ + { + "pruefer": (aktor) => (aktor.art === "verwerfer"), + "ersteller": () => mod_aktor_verwerfer.erstellen_aktor(), + }, + ] + ) + ); + let index_alt : schnittstelle_fehlermonade; + let aktor_alt_ : schnittstelle_fehlermonade = welt.felder.holen(stelle); + if (aktor_alt_.ist_schlicht()) + { + let aktor_alt : mod_aktor.typ_aktor = aktor_alt_.lesen(); + let gefunden : boolean = ( + liste.some + ( + (eintrag, index) => + { + if (eintrag.pruefer(aktor_alt)) + { + index_alt = (new klasse_schlicht(index)); + return true; } else { return false; } } - , - "ersteller": () => leser_erstellen_aktor(0, symbol_links, symbol_rechts) - } - ); - } - ) - ) - .concat - ( - [ - { - "pruefer": (aktor) => (aktor.art === "verwerfer"), - "ersteller": () => verwerfer_erstellen_aktor(), - }, - ] - ) - ); - let index_alt : schnittstelle_fehlermonade; - let aktor_alt_ : schnittstelle_fehlermonade = welt.felder.holen(stelle); - 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(index)); - return true; - } - else - { - return false; - } - } - ) - ); - if (! gefunden) - { - index_alt = (new klasse_nichts()); + ) + ); + if (! gefunden) + { + index_alt = (new klasse_nichts()); + } + else + { + // nichts tun + } + } + else + { + let meldung : string = "kein Aktor gesetzt"; + // console.warn(meldung); + index_alt = (new klasse_schlicht(0)); + } + if (index_alt.ist_schlicht()) + { + let index_neu : int = mod_vtm_helfer.mod(index_alt.lesen() + (umgekehrt ? -1 : +1), liste.length); + let aktor_neu : mod_aktor.typ_aktor = liste[index_neu].ersteller(); + feld_setzen(welt, stelle, aktor_neu); + } + else + { + let meldung : string = ("Aktor nicht gefunden"); + // throw (new Error(meldung)); + console.warn(meldung); + } } - else + + + /** + * @author kcf + */ + export function feld_drehen(welt : typ_welt, stelle : mod_stelle.typ_stelle, inkrement : int = +1) : void { - // nichts tun + let aktor_ : schnittstelle_fehlermonade = welt.felder.holen(stelle); + if (aktor_.ist_schlicht) + { + mod_aktor.drehen(aktor_.lesen(), inkrement); + } + else + { + console.warn("kein Aktor gesetzt"); + } } - } - else - { - let meldung : string = "kein Aktor gesetzt"; - // console.warn(meldung); - index_alt = (new klasse_schlicht(0)); - } - if (index_alt.ist_schlicht()) - { - let index_neu : int = mod_vtm_helfer.mod(index_alt.lesen() + (umgekehrt ? -1 : +1), liste.length); - let aktor_neu : typ_aktor = liste[index_neu].ersteller(); - welt_feld_setzen(welt, stelle, aktor_neu); - } - else - { - let meldung : string = ("Aktor nicht gefunden"); - // throw (new Error(meldung)); - console.warn(meldung); - } - } - - - /** - * @author kcf - */ - export function welt_feld_drehen(welt : typ_welt, stelle : typ_stelle, inkrement : int = +1) : void - { - let aktor_ : schnittstelle_fehlermonade = welt.felder.holen(stelle); - if (aktor_.ist_schlicht) - { - aktor_drehen(aktor_.lesen(), inkrement); - } - else - { - console.warn("kein Aktor gesetzt"); - } - } - + - /** - * @author kcf - * @throws {Error} - */ - export function welt_erzeuger_finden(welt : typ_welt) : typ_stelle - { - let stelle : schnittstelle_fehlermonade = (new klasse_nichts()); - welt.felder.iterieren - ( - (stelle_, aktor) => + /** + * @author kcf + * @throws {Error} + */ + export function erzeuger_finden(welt : typ_welt) : mod_stelle.typ_stelle { - if (aktor.art === "erzeuger") + let stelle : schnittstelle_fehlermonade = (new klasse_nichts()); + welt.felder.iterieren + ( + (stelle_, aktor) => + { + if (aktor.art === "erzeuger") + { + if (stelle.ist_schlicht()) + { + let meldung : string = "mehrere Erzeuger gefunden"; + throw (new Error(meldung)); + } + else + { + stelle = (new klasse_schlicht(stelle_)); + } + } + } + ) + ; + if (stelle.ist_schlicht()) { - if (stelle.ist_schlicht()) - { - let meldung : string = "mehrere Erzeuger gefunden"; - throw (new Error(meldung)); - } - else - { - stelle = (new klasse_schlicht(stelle_)); - } + return stelle.lesen(); + } + else + { + let meldung : string = "kein Erzeuger gefunden"; + throw (new Error(meldung)); } } - ) - ; - if (stelle.ist_schlicht()) - { - return stelle.lesen(); - } - else - { - let meldung : string = "kein Erzeuger gefunden"; - throw (new Error(meldung)); - } - } - - - /** - * @author kcf - */ - export function welt_blanko(groesse : int = 3) : typ_welt - { - let welt : typ_welt = welt_erstellen(); - for (let u : int = -groesse; u <= +groesse; u += 1) - { - for (let v : int = -groesse; v <= +groesse; v += 1) + + + /** + * @author kcf + */ + export function blanko(groesse : int = 3) : typ_welt { - if (Math.abs(u-v) <= groesse) + let welt : typ_welt = erstellen(); + for (let u : int = -groesse; u <= +groesse; u += 1) { - let stelle : typ_stelle = {"u": u, "v": v}; - let aktor : typ_aktor; - if ((u === -groesse) && (v === 0)) + for (let v : int = -groesse; v <= +groesse; v += 1) { - aktor = erzeuger_erstellen_aktor(0); + if (Math.abs(u-v) <= groesse) + { + let stelle : mod_stelle.typ_stelle = {"u": u, "v": v}; + let aktor : mod_aktor.typ_aktor; + if ((u === -groesse) && (v === 0)) + { + aktor = mod_aktor_erzeuger.erstellen_aktor(0); + } + else if ((u === +groesse) && (v === 0)) + { + aktor = mod_aktor_annehmer.erstellen_aktor(); + } + else + { + aktor = mod_aktor_verwerfer.erstellen_aktor(); + } + welt.felder.setzen(stelle, aktor); + } } - else if ((u === +groesse) && (v === 0)) - { - aktor = annehmer_erstellen_aktor(); - } - else - { - aktor = verwerfer_erstellen_aktor(); - } - welt.felder.setzen(stelle, aktor); } + return welt; } - } - return welt; - } - - - /** - * @author kcf - */ - export function welt_exportieren(welt : typ_welt) : any - { - let roh : any = {}; - roh["felder"] = {}; - welt.felder.iterieren - ( - (stelle, aktor) => + + + /** + * @author kcf + */ + export function exportieren(welt : typ_welt) : any { - let stelle_ : string = stelle_exportieren(stelle); - let aktor_ : any = aktor_exportieren(aktor); - roh["felder"][stelle_] = aktor_; + let roh : any = {}; + roh["felder"] = {}; + welt.felder.iterieren + ( + (stelle, aktor) => + { + let stelle_ : string = mod_stelle.exportieren(stelle); + let aktor_ : any = mod_aktor.exportieren(aktor); + roh["felder"][stelle_] = aktor_; + } + ) + ; + return roh; } - ) - ; - return roh; - } - - - /** - * @author kcf - */ - export function welt_importieren(roh : any) : typ_welt - { - let felder : mod_vtm_helfer.klasse_hashmap = (new mod_vtm_helfer.klasse_hashmap(stelle_hash)); - for (let stelle_ in roh["felder"]) - { - let stelle : typ_stelle = stelle_importieren(stelle_); - let aktor_ : typ_aktor = roh["felder"][stelle_]; - let aktor : typ_aktor = aktor_importieren(aktor_); - felder.setzen(stelle, aktor); + + + /** + * @author kcf + */ + export function importieren(roh : any) : typ_welt + { + let felder : mod_vtm_helfer.klasse_hashmap = (new mod_vtm_helfer.klasse_hashmap(mod_stelle.hash)); + for (let stelle_ in roh["felder"]) + { + let stelle : mod_stelle.typ_stelle = mod_stelle.importieren(stelle_); + let aktor_ : mod_aktor.typ_aktor = roh["felder"][stelle_]; + let aktor : mod_aktor.typ_aktor = mod_aktor.importieren(aktor_); + felder.setzen(stelle, aktor); + } + return ( + erstellen + ( + felder + ) + ); + } + } - return ( - welt_erstellen - ( - felder - ) - ); + } } diff --git a/quelldatein/aufbau/zustand.ts b/quelldatein/aufbau/zustand.ts index af9fc13..456464f 100644 --- a/quelldatein/aufbau/zustand.ts +++ b/quelldatein/aufbau/zustand.ts @@ -16,21 +16,31 @@ * along with this program. If not, see . */ -module mod_vtm_aufbau +module mod_vtm { - /** - * @author kcf - */ - export type typ_zustand = int; - - - /** - * @author kcf - */ - export var zustand_abgelehnt = -1; - export var zustand_laufend = 0; - export var zustand_angenommen = +1; + export module mod_aufbau + { + + export module mod_zustand + { + + /** + * @author kcf + */ + export type typ_zustand = int; + + + /** + * @author kcf + */ + export var abgelehnt = -1; + export var laufend = 0; + export var angenommen = +1; + + } + + } } diff --git a/quelldatein/basis/aufruf.ts b/quelldatein/basis/aufruf.ts index 3b3c4f0..61ae438 100644 --- a/quelldatein/basis/aufruf.ts +++ b/quelldatein/basis/aufruf.ts @@ -22,6 +22,24 @@ type typ_komplex = {art : string; angaben ?: typ_angaben;}; +/** + * @author kcf + */ +function einpacken(art : string, angaben : typ_angaben) : typ_komplex + { + return {"art": art, "angaben": angaben}; + } + + +/** + * @author kcf + */ +function auspacken(komplex : typ_komplex) : typ_angaben + { + return komplex.angaben; + } + + /** * @author kcf */ diff --git a/quelldatein/haupt.ts b/quelldatein/haupt.ts index 871f033..4a7b67b 100644 --- a/quelldatein/haupt.ts +++ b/quelldatein/haupt.ts @@ -115,27 +115,27 @@ function haupt() : void let hoehe : float = 80; [ { - "aufbau": mod_vtm_aufbau.aktor_beispiel("erzeuger"), + "aufbau": mod_vtm.mod_aufbau.mod_aktor.beispiel("erzeuger"), "bereich": document.querySelector("#hilfe_aktoren_aktor_erzeuger"), }, { - "aufbau": mod_vtm_aufbau.aktor_beispiel("annehmer"), + "aufbau": mod_vtm.mod_aufbau.mod_aktor.beispiel("annehmer"), "bereich": document.querySelector("#hilfe_aktoren_aktor_annehmer"), }, { - "aufbau": mod_vtm_aufbau.aktor_beispiel("verwerfer"), + "aufbau": mod_vtm.mod_aufbau.mod_aktor.beispiel("verwerfer"), "bereich": document.querySelector("#hilfe_aktoren_aktor_verwerfer"), }, { - "aufbau": mod_vtm_aufbau.aktor_beispiel("befoerderer"), + "aufbau": mod_vtm.mod_aufbau.mod_aktor.beispiel("befoerderer"), "bereich": document.querySelector("#hilfe_aktoren_aktor_befoerderer"), }, { - "aufbau": mod_vtm_aufbau.aktor_beispiel("schreiber"), + "aufbau": mod_vtm.mod_aufbau.mod_aktor.beispiel("schreiber"), "bereich": document.querySelector("#hilfe_aktoren_aktor_schreiber"), }, { - "aufbau": mod_vtm_aufbau.aktor_beispiel("leser"), + "aufbau": mod_vtm.mod_aufbau.mod_aktor.beispiel("leser"), "bereich": document.querySelector("#hilfe_aktoren_aktor_leser"), }, ] @@ -147,7 +147,7 @@ function haupt() : void mod_vtm_manifestation.svg_aktor_erstellen_manifestation ( eintrag.aufbau, - mod_vtm_aufbau.stelle_null() + mod_vtm.mod_aufbau.mod_stelle.null_() ) ); let xmlknoten : mod_vtm_helfer.typ_xmlknoten = ( @@ -168,13 +168,13 @@ function haupt() : void } // Spiel { - // let aufbau : mod_vtm_aufbau.typ_partie; + let aufbau : mod_vtm.mod_aufbau.mod_partie.typ_partie; aufgaben_eintragen ( - function (aufgabe : mod_vtm_aufbau.typ_aufgabe) : void {mod_vtm_aufbau.partie_aufgabe_setzen(aufbau, aufgabe);} + function (aufgabe : mod_vtm_aufbau.typ_aufgabe) : void {mod_vtm.mod_aufbau.mod_partie.aufgabe_setzen(aufbau, aufgabe);} ) ; - aufbau = mod_vtm_aufbau.partie_erstellen(mod_vtm_aufbau.aufgabe_holen(0)); + aufbau = mod_vtm.mod_aufbau.mod_partie.erstellen(mod_vtm_aufbau.aufgabe_holen(0)); mod_vtm_manifestation.manifestation_einrichten ( mod_vtm_manifestation.web_partie_erstellen_erweitert @@ -194,7 +194,6 @@ function haupt() : void ; } } -var aufbau : mod_vtm_aufbau.typ_partie = null; /**