/* * Verrückte Turing-Maschinen — A turing complete game * 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 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 . */ module mod_vtm_aufbau { /** * @author kcf */ export type typ_aktor = { art : string; angaben ?: any; } ; /** * @author kcf */ 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 */ 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 */ 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 */ 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 */ 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; } } } }