St-black/whiteballs
Aus EnigmaWiki
Verfügbare Sprachen: Deutsch, English, Русский
st-blackballs und st-whiteballs
Die beiden Steine st-blackballs und st-whiteballs können viel mehr, als man ihnen auf den ersten Blick ansieht. Sie können ein zu ihnen geschicktes Signal auf bestimmte Weise verarbeiten und dann weiterschicken.
Es gibt eine Anwendungsart, die man einige Male antrifft. Ein Raster von Türen wird angelegt, die sich nach gewissen Regeln beim Berühren öffnen und schliessen. Dazu werden in die "Ecken", wo 4 Türen um ein Feld zusammenkommen, jeweils ein st-blackballs (oder ein st-whiteballs) gesetzt. Dann öffnet sich die berührte Türe und die benachbarten, orthogonalen schliessen sich.
Das folgende Codestück generiert solche Raster:
--- GRIDCODE ------------------------------------------------------------------- function set_ballstones(x0,y0,w,h,black) if black == 1 then stone = "st-blackballs" else stone = "st-whiteballs" end for i=0, h do for j=0, w do set_stone(stone,x0+2*j,y0+2*i) end end end function set_sensors(x0,y0,w,h,type) if type == 1 then sensor = "it-sensor" else sensor = "it-inversesensor" end local i,j local c = 0 for i=0, h do for j=0, w-1 do set_stone("st-door-h",x0+1+2*j,y0+2*i) set_item(sensor,x0+1+2*j,y0+2*i) dostring("Signal(\"it("..tostring(x0+1+2*j).." "..tostring(y0+2*i)..")\",\"st("..tostring(x0+2*j).." "..tostring(y0+2*i)..")\")") dostring("Signal(\"it("..tostring(x0+1+2*j).." "..tostring(y0+2*i)..")\",\"st("..tostring(x0+2+2*j).." "..tostring(y0+2*i)..")\")") c = c+1 end end for i=0, h-1 do for j=0, w do set_stone("st-door-v",x0+2*j,y0+1+2*i) set_item(sensor,x0+2*j,y0+1+2*i) dostring("Signal(\"it("..tostring(x0+2*j).." "..tostring(y0+1+2*i)..")\",\"st("..tostring(x0+2*j).." "..tostring(y0+2*i)..")\")") dostring("Signal(\"it("..tostring(x0+2*j).." "..tostring(y0+1+2*i)..")\",\"st("..tostring(x0+2*j).." "..tostring(y0+2+2*i)..")\")") c = c+1 end end end -- Wrapper: function set_grid(x0,y0,w,h,black,type) set_ballstones(x0,y0,w,h,black) set_sensors(x0,y0,w,h,type) end --- END GRIDCODE ---------------------------------------------------------------
Analyse
Der Raster besteht aus einem Gitter von st-blackballs (oder st-whiteballs) und zwischen 2 solchen Steinen jeweils eine horizontale oder vertikale Tür (st-door). Auf dem selben Feld wie die Tür hat es auch noch ein Sensoritem (it-sensor).
Wird nun die Tür berührt, führt das Item auf dem selben Feld sein Action/Target Paar aus. (Das ist eine spezielle Eigenschaft von Türen!)
Das Sensoritem schickt nun ein Signal an die beiden Steine, die die Türpfosten Bilden. Diese verteilen das Signal (falls es von der Kugelfarbe kommt, der sie auch angehören) an die 4 angrenzenden Türen. Diese Türen werden dann entsprechend geöffnet oder geschlossen.
Ein Level, das von obigen Stück Code gebrauch macht, könnte etwa so aussehen:
Es ist anzumerken, dass weder Schwarz noch Weiss auf die andere Seite gelangen kann, wenn nicht der jeweilige Actor die Türen "von innen" öffnet.

