sicherung

This commit is contained in:
Christian Fraß 2017-11-09 21:57:35 +01:00
parent 880d5dc708
commit da3cf639bd
20 changed files with 486 additions and 128 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -45,6 +45,7 @@ erzeugnis/vtm.js: \
quelldatein/aufbau/akzeptoraufgabe.ts \ quelldatein/aufbau/akzeptoraufgabe.ts \
quelldatein/aufbau/transduktoraufgabe.ts \ quelldatein/aufbau/transduktoraufgabe.ts \
quelldatein/aufbau/aufgabe_.ts \ quelldatein/aufbau/aufgabe_.ts \
quelldatein/aufbau/modus.ts \
quelldatein/aufbau/partie.ts \ quelldatein/aufbau/partie.ts \
quelldatein/manifestation/manifestation.ts \ quelldatein/manifestation/manifestation.ts \
quelldatein/manifestation/position.ts \ quelldatein/manifestation/position.ts \
@ -86,6 +87,7 @@ erzeugnis/vtm.js: \
quelldatein/aufbau/akzeptoraufgabe.ts \ quelldatein/aufbau/akzeptoraufgabe.ts \
quelldatein/aufbau/transduktoraufgabe.ts \ quelldatein/aufbau/transduktoraufgabe.ts \
quelldatein/aufbau/aufgabe_.ts \ quelldatein/aufbau/aufgabe_.ts \
quelldatein/aufbau/modus.ts \
quelldatein/aufbau/partie.ts \ quelldatein/aufbau/partie.ts \
quelldatein/manifestation/manifestation.ts \ quelldatein/manifestation/manifestation.ts \
quelldatein/manifestation/position.ts \ quelldatein/manifestation/position.ts \

View file

@ -28,7 +28,7 @@ module mod_vtm_aufbau
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
drehen() : void; drehen(inkrement ?: int) : void;
/** /**

View file

@ -38,7 +38,7 @@ module mod_vtm_aufbau
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
* @implementation * @implementation
*/ */
public drehen() : void public drehen(inkrement ?: int) : void
{ {
} }

View file

@ -54,9 +54,9 @@ module mod_vtm_aufbau
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
* @implementation * @implementation
*/ */
public drehen() : void public drehen(inkrement : int = +1) : void
{ {
this.richtung = richtung_addieren(this.richtung, +1); this.richtung = richtung_addieren(this.richtung, inkrement);
} }

View file

@ -54,9 +54,9 @@ module mod_vtm_aufbau
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
* @implementation * @implementation
*/ */
public drehen() : void public drehen(inkrement : int = +1) : void
{ {
this.richtung = richtung_addieren(this.richtung, +1); this.richtung = richtung_addieren(this.richtung, inkrement);
} }

View file

@ -86,9 +86,9 @@ module mod_vtm_aufbau
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
* @implementation * @implementation
*/ */
public drehen() : void public drehen(inkrement : int = +1) : void
{ {
this.richtung = richtung_addieren(this.richtung, +1); this.richtung = richtung_addieren(this.richtung, inkrement);
} }

View file

@ -0,0 +1,37 @@
/*
* 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_modus = int;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export const modus_initial = 0;
export const modus_ungewiss = 1;
export const modus_fehlerhaft = 2;
export const modus_korrekt = 3;
}

View file

@ -19,21 +19,6 @@
module mod_vtm_aufbau module mod_vtm_aufbau
{ {
/**
* @author kcf <vidofnir@folksprak.org>
*/
export type typ_modus = int;
/**
* @author kcf <vidofnir@folksprak.org>
*/
export const modus_initial = 0;
export const modus_ungewiss = 1;
export const modus_fehlerhaft = 2;
export const modus_korrekt = 3;
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
@ -70,6 +55,12 @@ module mod_vtm_aufbau
private modus : typ_modus; private modus : typ_modus;
/**
* @author kcf <vidofnir@folksprak.org>
*/
private lauscher : {[ereignis : string] : Array<(angaben ?: any)=>void>};
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
@ -84,6 +75,62 @@ module mod_vtm_aufbau
this.figur = (new klasse_nichts<klasse_figur>()); this.figur = (new klasse_nichts<klasse_figur>());
this.testindex = (new klasse_nichts<int>()); this.testindex = (new klasse_nichts<int>());
this.modus = modus_initial; this.modus = modus_initial;
this.lauscher = {
"aenderung_aufgabe": [],
"aenderung_welt": [],
"aenderung_figur": [],
"aenderung_modus": [],
};
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public lauschen(ereignis : string, prozedur : (angaben ?: any)=>void) : void
{
if (ereignis in this.lauscher)
{
this.lauscher[ereignis].push(prozedur);
}
else
{
let meldung : string = "kein Ereignis mit diesem Name";
throw (new Error(meldung));
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private benachrichtigen(ereignis : string, angaben : any = {}) : void
{
if (ereignis in this.lauscher)
{
this.lauscher[ereignis].forEach
(
prozedur =>
{
prozedur(angaben);
}
)
;
}
else
{
let meldung : string = "kein Ereignis mit diesem Name";
throw (new Error(meldung));
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public aufgabe_lesen() : schnittstelle_aufgabe
{
return this.aufgabe;
} }
@ -122,6 +169,42 @@ module mod_vtm_aufbau
this.figur = (new klasse_nichts<klasse_figur>()); this.figur = (new klasse_nichts<klasse_figur>());
this.testindex = (new klasse_nichts<int>()); this.testindex = (new klasse_nichts<int>());
this.modus = modus_initial; this.modus = modus_initial;
this.benachrichtigen("aenderung_figur", {});
this.benachrichtigen("aenderung_modus", {});
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public welt_feld_wechseln(stelle : typ_stelle, umgekehrt : boolean = false) : void
{
if (! (this.modus === mod_vtm_aufbau.modus_initial))
{
let meldung : string = "gesperrt";
}
else
{
this.welt.feld_wechseln(stelle, umgekehrt);
this.benachrichtigen("aenderung_welt", {});
}
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
public welt_feld_drehen(stelle : typ_stelle, inkrement : int = +1) : void
{
if (! (this.modus === mod_vtm_aufbau.modus_initial))
{
let meldung : string = "gesperrt";
}
else
{
this.welt.feld_drehen(stelle, inkrement);
this.benachrichtigen("aenderung_welt", {});
}
} }
@ -136,6 +219,7 @@ module mod_vtm_aufbau
{ {
this.modus = modus_ungewiss; this.modus = modus_ungewiss;
this.testindex = (new klasse_schlicht<int>(0)); this.testindex = (new klasse_schlicht<int>(0));
this.benachrichtigen("aenderung_modus", {});
break; break;
} }
case modus_ungewiss: case modus_ungewiss:
@ -146,7 +230,17 @@ module mod_vtm_aufbau
let testindex : int = this.testindex.lesen(); let testindex : int = this.testindex.lesen();
let test : schnittstelle_test = tests[testindex]; let test : schnittstelle_test = tests[testindex];
let stelle : typ_stelle = this.welt.erzeuger_finden(); let stelle : typ_stelle = this.welt.erzeuger_finden();
this.figur = (new klasse_schlicht<klasse_figur>(new klasse_figur(test.eingabe(), stelle))); this.figur = (
new klasse_schlicht<klasse_figur>
(
new klasse_figur
(
mod_vtm_helfer.liste_kopieren<typ_symbol>(test.eingabe()),
stelle
)
)
);
this.benachrichtigen("aenderung_figur", {});
} }
else else
{ {
@ -171,6 +265,7 @@ module mod_vtm_aufbau
if (! test.pruefen(angenommen, ausgabe)) if (! test.pruefen(angenommen, ausgabe))
{ {
this.modus = modus_fehlerhaft; this.modus = modus_fehlerhaft;
this.benachrichtigen("aenderung_modus", {});
} }
else else
{ {
@ -180,6 +275,7 @@ module mod_vtm_aufbau
// auf Modus "korrekt" wechseln // auf Modus "korrekt" wechseln
this.testindex = (new klasse_nichts<int>()); this.testindex = (new klasse_nichts<int>());
this.modus = modus_korrekt; this.modus = modus_korrekt;
this.benachrichtigen("aenderung_modus", {});
} }
else else
{ {
@ -193,6 +289,7 @@ module mod_vtm_aufbau
let meldung : string = "unbehandelter Zustand"; let meldung : string = "unbehandelter Zustand";
throw (new Error(meldung)); throw (new Error(meldung));
} }
this.benachrichtigen("aenderung_figur", {});
} }
break; break;
} }

View file

@ -70,9 +70,9 @@ module mod_vtm_aufbau
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
* @implementation * @implementation
*/ */
public drehen() : void public drehen(inkrement : int = +1) : void
{ {
this.richtung = richtung_addieren(this.richtung, +1); this.richtung = richtung_addieren(this.richtung, inkrement);
} }

View file

@ -64,8 +64,6 @@ module mod_vtm_aufbau
*/ */
public pruefen(angenommen : boolean, ausgabe : Array<typ_symbol>) : boolean public pruefen(angenommen : boolean, ausgabe : Array<typ_symbol>) : boolean
{ {
console.info(this.ausgabe);
console.info(ausgabe);
if (this.ausgabe.length !== ausgabe.length) if (this.ausgabe.length !== ausgabe.length)
{ {
return false; return false;
@ -77,7 +75,6 @@ console.info(ausgabe);
{ {
if (! symbol_vergleichen(this.ausgabe[index], ausgabe[index])) if (! symbol_vergleichen(this.ausgabe[index], ausgabe[index]))
{ {
console.info("ungleichheit bei Index " + index.toFixed(0));
gleich = false; gleich = false;
break; break;
} }

View file

@ -38,7 +38,7 @@ module mod_vtm_aufbau
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
* @implementation * @implementation
*/ */
public drehen() : void public drehen(inkrement ?: int) : void
{ {
} }

View file

@ -79,7 +79,7 @@ module mod_vtm_aufbau
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
public feld_wechseln(stelle : typ_stelle) : void public feld_wechseln(stelle : typ_stelle, umgekehrt : boolean = false) : void
{ {
let erweitert : boolean = true; let erweitert : boolean = true;
let liste : Array<{pruefer : (aktor : schnittstelle_aktor)=>boolean; ersteller : ()=>schnittstelle_aktor;}> = ( let liste : Array<{pruefer : (aktor : schnittstelle_aktor)=>boolean; ersteller : ()=>schnittstelle_aktor;}> = (
@ -198,7 +198,7 @@ module mod_vtm_aufbau
// console.warn(meldung); // console.warn(meldung);
index = 0; index = 0;
} }
let aktor_neu : schnittstelle_aktor = liste[mod_vtm_helfer.mod(index+1, liste.length)].ersteller(); let aktor_neu : schnittstelle_aktor = liste[mod_vtm_helfer.mod(index + (umgekehrt ? -1 : +1), liste.length)].ersteller();
this.feld_setzen(stelle, aktor_neu); this.feld_setzen(stelle, aktor_neu);
} }
@ -206,12 +206,12 @@ module mod_vtm_aufbau
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
public feld_drehen(stelle : typ_stelle) : void public feld_drehen(stelle : typ_stelle, inkrement : int = +1) : void
{ {
let aktor_ : schnittstelle_fehlermonade<schnittstelle_aktor> = this.felder.holen(stelle); let aktor_ : schnittstelle_fehlermonade<schnittstelle_aktor> = this.felder.holen(stelle);
if (aktor_.ist_schlicht) if (aktor_.ist_schlicht)
{ {
aktor_.lesen().drehen(); aktor_.lesen().drehen(inkrement);
} }
else else
{ {

View file

@ -110,24 +110,37 @@ jsonp_behandlung(
{ {
"art": "transduktor", "art": "transduktor",
"parameter": { "parameter": {
"titel": "Filter", "titel": "An den Anfang",
"text": "aus der Eingabe alle ${s0} beibehalten und alle ${s1} entfernen", "text": "die Eingabe, aber mit dem letzten Symbol am Anfang",
"tests": [
{
"eingabe": [0,0,1,1,1,0,1,0,1,1,1,0,1],
"ausgabe": [1,0,0,1,1,1,0,1,0,1,1,1,0]
}
]
}
},
{
"art": "transduktor",
"parameter": {
"titel": "Wählerisch",
"text": "aus der Eingabe alle ${s0} entfernen und alle ${s1} beibehalten",
"tests": [ "tests": [
{ {
"eingabe": [0,0,0,1,0], "eingabe": [0,0,0,1,0],
"ausgabe": [0,0,0,0] "ausgabe": [1]
}, },
{ {
"eingabe": [1,0,1,0,1], "eingabe": [1,0,1,0,1],
"ausgabe": [0,0,0] "ausgabe": [1,1,1]
}, },
{ {
"eingabe": [1,1,1,1,0], "eingabe": [1,1,1,1,0],
"ausgabe": [0] "ausgabe": [1,1,1,1]
}, },
{ {
"eingabe": [0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1], "eingabe": [0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,1,0,1],
"ausgabe": [0,0,0,0,0,0,0,0,0] "ausgabe": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
} }
] ]
} }
@ -148,6 +161,60 @@ jsonp_behandlung(
} }
] ]
} }
},
{
"art": "akzeptor",
"parameter": {
"titel": "ungerade Zahlen",
"text": "Mit ${s0} als 0 und ${s1} als 1, nur ungerade Zahlen",
"tests": [
{
"eingabe": [],
"annehmen": false
},
{
"eingabe": [],
"annehmen": false
},
{
"eingabe": [],
"annehmen": false
},
{
"eingabe": [],
"annehmen": false
}
]
}
},
{
"art": "akzeptor",
"parameter": {
"titel": "a^n b^n",
"text": "Jaja, die berühmt berüchtige Sprache, die sich mit einem endlichen Automaten nicht erkennen lässt … Das ist deine Chance zu zeigen, dass dieses Ding hier mehr ist als so ein kümmerlicher DEA … und das ganz ohne Kellerspeicher! Also: Eine beliebige Anzahl an ${s0}, dann die gleiche Anzahl an ${s1}!",
"tests": [
{
"eingabe": [],
"annehmen": true
},
{
"eingabe": [0],
"annehmen": false
},
{
"eingabe": [0,0,1,1],
"annehmen": true
},
{
"eingabe": [0,0,0,1,1],
"annehmen": false
},
{
"eingabe": [0,0,0,0,0,0,0,1,1,1,1,1,1,1],
"annehmen": true
}
]
}
} }
] ]
} }

View file

@ -37,7 +37,13 @@ function aufgaben_eintragen(behandler : (aufgabe : mod_vtm_aufbau.schnittstelle_
} }
// Option eintragen // Option eintragen
{ {
let titel : string = aufgabe_roh["parameter"]["titel"]; let praefix : string = (
{
"akzeptor": "AKZ",
"transduktor": "TRA",
}[aufgabe_roh["art"]]
);
let titel : string = ("[" + praefix + "]" + " " + aufgabe_roh["parameter"]["titel"]);
let value : string = index.toFixed(0); let value : string = index.toFixed(0);
let dom_option : Element = document.createElement("option"); let dom_option : Element = document.createElement("option");
dom_option.setAttribute("value", value); dom_option.setAttribute("value", value);
@ -75,7 +81,6 @@ function haupt() : void
let aufbau : mod_vtm_aufbau.klasse_partie; let aufbau : mod_vtm_aufbau.klasse_partie;
let aufgabe_laden = function (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe) : void let aufgabe_laden = function (aufgabe : mod_vtm_aufbau.schnittstelle_aufgabe) : void
{ {
document.querySelector("#aufgabe_text").textContent = aufgabe.text();
aufbau = (new mod_vtm_aufbau.klasse_partie(aufgabe)); aufbau = (new mod_vtm_aufbau.klasse_partie(aufgabe));
let manifestation : mod_vtm_manifestation.klasse_manifestation<mod_vtm_aufbau.klasse_partie, void> = ( let manifestation : mod_vtm_manifestation.klasse_manifestation<mod_vtm_aufbau.klasse_partie, void> = (
new mod_vtm_manifestation.klasse_web_partie(aufbau, document.querySelector("#bereich_mitte")) new mod_vtm_manifestation.klasse_web_partie(aufbau, document.querySelector("#bereich_mitte"))

View file

@ -27,5 +27,24 @@ module mod_vtm_helfer
return ((laenge <= 0) ? [] : sequenz(laenge-1).concat([laenge-1])); return ((laenge <= 0) ? [] : sequenz(laenge-1).concat([laenge-1]));
} }
/**
* @author kcf <vidofnir@folksprak.org>
*/
export function liste_kopieren<type_element>(liste : Array<type_element>, element_kopieren : (element : type_element)=>type_element = (x => x)) : Array<type_element>
{
let liste_ : Array<type_element> = [];
liste.forEach
(
element =>
{
let element_ : type_element = element_kopieren(element);
liste_.push(element);
}
)
;
return liste_;
}
} }

View file

@ -198,8 +198,8 @@ module mod_vtm_manifestation
[ [
"rotate(" + winkel.toFixed(svg_float_praezission) + ")", "rotate(" + winkel.toFixed(svg_float_praezission) + ")",
"translate(0, 0)", "translate(0.1, 0)",
"scale(0.1)", "scale(0.075)",
].join(" ") ].join(" ")
), ),
} }

View file

@ -28,21 +28,25 @@
.symbol_0 .symbol_0
{ {
fill: hsl(000.0000000000000, 50%, 50%); fill: hsl(000.0000000000000, 50%, 50%);
background-color: hsl(000.0000000000000, 50%, 50%);
} }
.symbol_1 .symbol_1
{ {
fill: hsl(222.4922359499621, 50%, 50%); fill: hsl(222.4922359499621, 50%, 50%);
background-color: hsl(222.4922359499621, 50%, 50%);
} }
.symbol_2 .symbol_2
{ {
fill: hsl(084.9844718999243, 50%, 50%); fill: hsl(084.9844718999243, 50%, 50%);
background-color: hsl(084.9844718999243, 50%, 50%);
} }
.symbol_3 .symbol_3
{ {
fill: hsl(307.4767078498864, 50%, 50%); fill: hsl(307.4767078498864, 50%, 50%);
background-color: hsl(307.4767078498864, 50%, 50%);
} }
.kreis .kreis

View file

@ -19,6 +19,16 @@
module mod_vtm_manifestation module mod_vtm_manifestation
{ {
/**
* @author kcf <vidofnir@folksprak.org>
*/
function text_nachbearbeiten(text : string) : string
{
let regexp : RegExp = (new RegExp("\\$\{s(\\d*)\}", "g"));
return text.replace(regexp, "<span class=\"symbol_$1\">&nbsp;</span>");
}
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
*/ */
@ -46,16 +56,78 @@ module mod_vtm_manifestation
super(aufbau); super(aufbau);
this.bereich = bereich; this.bereich = bereich;
this.intervall = (new klasse_nichts<any>()); this.intervall = (new klasse_nichts<any>());
this.aufbau.lauschen
(
"aenderung_welt",
(angaben) =>
{
this.erneuern_welt();
}
)
;
} }
/** /**
* @author kcf <vidofnir@folksprak.org> * @author kcf <vidofnir@folksprak.org>
* @implementation * @override
*/ */
public darstellen() : void public einrichten() : void
{ {
// Zeichnung aktualisieren this.aufbau.lauschen
(
"aenderung_aufgabe",
(angaben) =>
{
this.erneuern_aufgabe();
}
)
;
this.aufbau.lauschen
(
"aenderung_welt",
(angaben) =>
{
this.erneuern_welt();
}
)
;
this.aufbau.lauschen
(
"aenderung_figur",
(angaben) =>
{
this.erneuern_figur();
}
)
;
this.aufbau.lauschen
(
"aenderung_modus",
(angaben) =>
{
this.erneuern_modus();
}
)
;
this.darstellen();
this.binden();
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private erneuern_aufgabe() : void
{
document.querySelector("#aufgabe_text").innerHTML = text_nachbearbeiten(this.aufbau.aufgabe_lesen().text());
}
/**
* @author kcf <vidofnir@folksprak.org>
*/
private erneuern_welt() : void
{ {
let knoten_svg : mod_vtm_helfer.schnittstelle_xmlknoten = mod_vtm_manifestation.svg_wurzel let knoten_svg : mod_vtm_helfer.schnittstelle_xmlknoten = mod_vtm_manifestation.svg_wurzel
( (
@ -67,14 +139,36 @@ module mod_vtm_manifestation
; ;
this.bereich.innerHTML = knoten_svg.darstellen(); this.bereich.innerHTML = knoten_svg.darstellen();
} }
// Status
/**
* @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; let status : string;
switch (this.aufbau.modus_lesen()) switch (this.aufbau.modus_lesen())
{ {
case mod_vtm_aufbau.modus_initial: case mod_vtm_aufbau.modus_initial:
{ {
status = "Rechts 'Testen' drücken zum Prüfen der Maschine"; status = "Maschine aufbauen";
break; break;
} }
case mod_vtm_aufbau.modus_ungewiss: case mod_vtm_aufbau.modus_ungewiss:
@ -101,6 +195,13 @@ module mod_vtm_manifestation
} }
document.querySelector("#aufgabe_status").textContent = status; document.querySelector("#aufgabe_status").textContent = status;
} }
/**
* @author kcf <vidofnir@folksprak.org>
*/
public erneuern_knoepfe() : void
{
// Knöpfe anzeigen/ausblenden // Knöpfe anzeigen/ausblenden
{ {
document.querySelector("#knoepfe").setAttribute document.querySelector("#knoepfe").setAttribute
@ -121,12 +222,42 @@ module mod_vtm_manifestation
} }
/**
* @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> * @author kcf <vidofnir@folksprak.org>
* @implementation * @implementation
*/ */
public binden() : void public binden() : 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 rel : string = dom_feld.getAttribute("rel")
stelle = (new klasse_schlicht<mod_vtm_aufbau.typ_stelle>(mod_vtm_aufbau.stelle_von_hash(rel)));
}
return stelle;
}
;
// Links-Klick // Links-Klick
this.bereich.addEventListener this.bereich.addEventListener
( (
@ -134,25 +265,15 @@ module mod_vtm_manifestation
event => event =>
{ {
event.preventDefault(); event.preventDefault();
if (this.aufbau.modus_lesen() === mod_vtm_aufbau.modus_initial) let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{ {
let dom_feld : Element = event.target["closest"](".feld"); this.aufbau.welt_feld_wechseln(stelle_.lesen(), true);
if (dom_feld == null) }
else
{ {
console.info("-- kein Feld"); console.info("-- kein Feld");
} }
else
{
let rel : string = dom_feld.getAttribute("rel")
let stelle : mod_vtm_aufbau.typ_stelle = mod_vtm_aufbau.stelle_von_hash(rel);
this.aufbau.welt_lesen().feld_wechseln(stelle);
this.darstellen();
}
}
else
{
console.info("-- nicht zur Bearbeitung freigegeben");
}
} }
) )
; ;
@ -163,24 +284,34 @@ module mod_vtm_manifestation
event => event =>
{ {
event.preventDefault(); event.preventDefault();
if (this.aufbau.modus_lesen() === mod_vtm_aufbau.modus_initial) let stelle_ : schnittstelle_fehlermonade<mod_vtm_aufbau.typ_stelle> = stelle_ermitteln(event.target);
if (stelle_.ist_schlicht())
{ {
let dom_feld : Element = event.target["closest"](".feld"); this.aufbau.welt_feld_wechseln(stelle_.lesen(), false);
if (dom_feld == null) }
else
{ {
console.info("-- kein Feld"); console.info("-- kein Feld");
} }
else
{
let rel : string = dom_feld.getAttribute("rel")
let stelle : mod_vtm_aufbau.typ_stelle = mod_vtm_aufbau.stelle_von_hash(rel);
this.aufbau.welt_lesen().feld_drehen(stelle);
this.darstellen();
} }
)
;
// Mausrad
this.bereich.addEventListener
(
"wheel",
event =>
{
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);
this.aufbau.welt_feld_drehen(stelle_.lesen(), inkrement);
} }
else else
{ {
console.info("-- nicht zur Bearbeitung freigegeben"); console.info("-- kein Feld");
} }
} }
) )
@ -210,7 +341,6 @@ module mod_vtm_manifestation
{ {
clearInterval(this.intervall.lesen()); clearInterval(this.intervall.lesen());
this.intervall = (new klasse_nichts<int>()); this.intervall = (new klasse_nichts<int>());
this.darstellen();
} }
else else
{ {
@ -218,7 +348,7 @@ module mod_vtm_manifestation
console.warn(meldung); console.warn(meldung);
} }
} }
this.darstellen(); this.erneuern_knoepfe();
} }
, ,
500 500
@ -238,13 +368,13 @@ module mod_vtm_manifestation
{ {
clearInterval(this.intervall.lesen()); clearInterval(this.intervall.lesen());
this.intervall = (new klasse_nichts<int>()); this.intervall = (new klasse_nichts<int>());
this.darstellen();
} }
else else
{ {
let meldung : string = "kein Intervall gesetzt"; let meldung : string = "kein Intervall gesetzt";
console.warn(meldung); console.warn(meldung);
} }
this.erneuern_knoepfe();
} }
) )
; ;
@ -264,7 +394,7 @@ module mod_vtm_manifestation
// nichts tun // nichts tun
} }
this.aufbau.zuruecksetzen(); this.aufbau.zuruecksetzen();
this.darstellen(); this.erneuern_knoepfe();
} }
) )
; ;

View file

@ -17,11 +17,11 @@
<label for="aufgabe_auswahl">Aufgabe auswählen</label> <label for="aufgabe_auswahl">Aufgabe auswählen</label>
<select id="aufgabe_auswahl"></select> <select id="aufgabe_auswahl"></select>
<p id="aufgabe_text"></p> <p id="aufgabe_text"></p>
<span id="aufgabe_status"></span>
</div> </div>
<div class="bereich" id="bereich_mitte"> <div class="bereich" id="bereich_mitte">
</div> </div>
<div class="bereich" id="bereich_rechts"> <div class="bereich" id="bereich_rechts">
<span id="aufgabe_status"></span>
<div id="knoepfe"> <div id="knoepfe">
<button id="knopf_testen">Testen</button> <button id="knopf_testen">Testen</button>
<button id="knopf_anhalten">Anhalten</button> <button id="knopf_anhalten">Anhalten</button>
@ -30,12 +30,12 @@
</div> </div>
</div> </div>
<div id="hilfe"> <div id="hilfe">
<p>Dieses Spiel ist inspiriert von <a href="http://www.kongregate.com/games/PleasingFungus/manufactoria">Manufacturia</a> und <a href="http://www.crazy-machines.com/">Crazy Machines</a>.</p> <p>Dieses Spiel ist inspiriert von <a href="http://www.kongregate.com/games/PleasingFungus/manufactoria">Manufacturia</a>, <a href="http://www.crazy-machines.com/">Crazy Machines</a>, <a href="http://worldofgoo.com/">World of Goo</a> … und auch von unvergessenen Stunden Hardware-Praktikum im Informatik-Studium :P</p>
<section> <section>
<header>Steuerung</header> <header>Steuerung</header>
<ul> <ul>
<li>Links-Klick: Feldtyp wechseln</li> <li>Links-Klick/Rechts-Klick: Feldtyp wechseln</li>
<li>Rechts-Klick: Feld drehen</li> <li>Mausrad-Drehen: Feld drehen</li>
</ul> </ul>
</section> </section>
<section> <section>