Elevator simulation: Difference between revisions
(Removed references to 'Elevator Game' as these are no longer relevant.) |
|||
Line 7: | Line 7: | ||
<br>Please if you can attach a video file how your sample works. |
<br>Please if you can attach a video file how your sample works. |
||
<br><br> |
<br><br> |
||
=={{header|Phix}}== |
|||
{{libheader|Phix/online}} |
|||
You can run this online [http://phix.x10.mx/p2js/ElevatorSimulation.htm here]. |
|||
<!--<lang Phix>(phixonline)--> |
|||
<span style="color: #000080;font-style:italic;">-- |
|||
-- demo\rosetta\ElevatorSimulation.exw |
|||
-- =================================== |
|||
-- |
|||
-- Even dumber than a real lift - clicking 16161616 ties it up for ages... |
|||
--</span> |
|||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
<span style="color: #008080;">include</span> <span style="color: #000000;">pGUI</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> |
|||
<span style="color: #004080;">Ihandle</span> <span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">timer</span> |
|||
<span style="color: #004080;">cdCanvas</span> <span style="color: #000000;">cdcanvas</span> |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">title</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"Elevator Simulation"</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">CD_DARKER_GREY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#383838</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (darker than CD_DARK_GREY)</span> |
|||
<span style="color: #000000;">CD_LIGHTER_ORANGE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#FFA500</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (lighter than CD_ORANGE)</span> |
|||
<span style="color: #000000;">CD_PALE_BLUE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#98C5DA</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (lighter than CD_LIGHT_BLUE)</span> |
|||
<span style="color: #000000;">CD_MEDIUM_BLUE</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#759EB4</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (darker than CD_LIGHT_BLUE)</span> |
|||
<span style="color: #000000;">panels</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">195</span><span style="color: #0000FF;">,</span><span style="color: #000000;">30</span><span style="color: #0000FF;">,</span><span style="color: #000000;">45</span><span style="color: #0000FF;">,</span><span style="color: #000000;">12</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- indicator</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">380</span><span style="color: #0000FF;">,</span><span style="color: #000000;">150</span><span style="color: #0000FF;">,</span><span style="color: #000000;">50</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- up/down</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">380</span><span style="color: #0000FF;">,</span><span style="color: #000000;">465</span><span style="color: #0000FF;">,</span><span style="color: #000000;">100</span><span style="color: #0000FF;">,</span><span style="color: #000000;">210</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- main </span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">625</span><span style="color: #0000FF;">,</span><span style="color: #000000;">330</span><span style="color: #0000FF;">,</span><span style="color: #000000;">75</span><span style="color: #0000FF;">,</span><span style="color: #000000;">25</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- restart</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">625</span><span style="color: #0000FF;">,</span><span style="color: #000000;">530</span><span style="color: #0000FF;">,</span><span style="color: #000000;">75</span><span style="color: #0000FF;">,</span><span style="color: #000000;">25</span><span style="color: #0000FF;">}},</span> <span style="color: #000080;font-style:italic;">-- exit</span> |
|||
<span style="color: #000000;">buttons</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">380</span><span style="color: #0000FF;">,</span><span style="color: #000000;">110</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"^"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">380</span><span style="color: #0000FF;">,</span><span style="color: #000000;">190</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"v"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">335</span><span style="color: #0000FF;">,</span><span style="color: #000000;">305</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"5"</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">420</span><span style="color: #0000FF;">,</span><span style="color: #000000;">305</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"6"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">335</span><span style="color: #0000FF;">,</span><span style="color: #000000;">385</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"3"</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">420</span><span style="color: #0000FF;">,</span><span style="color: #000000;">385</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"4"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">335</span><span style="color: #0000FF;">,</span><span style="color: #000000;">465</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"1"</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">420</span><span style="color: #0000FF;">,</span><span style="color: #000000;">465</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"2"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">380</span><span style="color: #0000FF;">,</span><span style="color: #000000;">540</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"GF"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">380</span><span style="color: #0000FF;">,</span><span style="color: #000000;">630</span><span style="color: #0000FF;">,</span><span style="color: #008000;">">|<"</span><span style="color: #0000FF;">}}</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">cur_floor</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- 0..6</span> |
|||
<span style="color: #000000;">wait_sign</span> <span style="color: #000080;font-style:italic;">-- "", -1 if none</span> |
|||
<span style="color: #004080;">bool</span> <span style="color: #000000;">door_open</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">actions</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> <span style="color: #000080;font-style:italic;">-- (see timer_cb)</span> |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">new_game</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">cur_floor</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">7</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span> |
|||
<span style="color: #000000;">wait_sign</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">7</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span> |
|||
<span style="color: #000000;">door_open</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)==</span><span style="color: #000000;">1</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">redraw_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*ih*/</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000080;font-style:italic;">/*posx*/</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">/*posy*/</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">width</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupGetIntInt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"DRAWSIZE"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasActivate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetBackground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CD_DARKER_GREY</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasClear</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CD_LIGHTER_ORANGE</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetInteriorStyle</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_SOLID</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">panels</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hh</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">panels</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #7060A8;">cdCanvasRoundedBox</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">hw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-(</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hh</span><span style="color: #0000FF;">),</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-(</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">hh</span><span style="color: #0000FF;">),</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000080;font-style:italic;">// (a filled box has no antialiasing, so overwrite with an outline box too:)</span> |
|||
<span style="color: #7060A8;">cdCanvasRoundedRect</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">hw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-(</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hh</span><span style="color: #0000FF;">),</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-(</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">hh</span><span style="color: #0000FF;">),</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_BLACK</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasFont</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Helvetica"</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_PLAIN</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">16</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">cdCanvasTextAlignment</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #004600;">CD_CENTER</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">panels</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">floor_text</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cur_floor</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"GF"</span><span style="color: #0000FF;">:</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cur_floor</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #7060A8;">cdCanvasText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">floor_text</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">cy</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">75</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">6</span> <span style="color: #008080;">to</span> <span style="color: #000000;">0</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">minx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">40</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">maxx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">40</span><span style="color: #0000FF;">,</span> |
|||
<span style="color: #000000;">miny</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">-(</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">45</span><span style="color: #0000FF;">),</span> |
|||
<span style="color: #000000;">maxy</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">-(</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">40</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_PARCHMENT</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasBox</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">minx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">miny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxy</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">cur_floor</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">wait_sign</span> <span style="color: #008080;">then</span> <span style="color: #000000;">wait_sign</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CD_MEDIUM_BLUE</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasBox</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">minx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">miny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxy</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CD_PALE_BLUE</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasBox</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">minx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">miny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxy</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">door_open</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_CYAN</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasBox</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">minx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">miny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxy</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">else</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">CD_MEDIUM_BLUE</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasLine</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">miny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">maxy</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">elsif</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">wait_sign</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">y3</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">-</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">3</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">2</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #004600;">CD_YELLOW</span><span style="color: #0000FF;">,</span><span style="color: #004600;">CD_BLACK</span><span style="color: #0000FF;">}[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">])</span> |
|||
<span style="color: #7060A8;">cdCanvasBegin</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,{</span><span style="color: #004600;">CD_FILL</span><span style="color: #0000FF;">,</span><span style="color: #004600;">CD_CLOSED_LINES</span><span style="color: #0000FF;">}[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">])</span> |
|||
<span style="color: #7060A8;">cdCanvasVertex</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">miny</span><span style="color: #0000FF;">+</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasVertex</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">maxx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">y3</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasVertex</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">maxy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasVertex</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">minx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">y3</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasEnd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #7060A8;">cdCanvasText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">y3</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"WAIT"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #000000;">cy</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">90</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #7060A8;">cdCanvasFont</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Helvetica"</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_PLAIN</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">buttons</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">floor_text</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">buttons</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #000000;">cy</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">-</span><span style="color: #000000;">cy</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_SILVER</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSector</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">60</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">60</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">360</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_BLACK</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasArc</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">50</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">50</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">360</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasArc</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">60</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">60</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">360</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">cdCanvasTextOrientation</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">?</span><span style="color: #000000;">180</span><span style="color: #0000FF;">:</span><span style="color: #000000;">0</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #7060A8;">cdCanvasText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"v"</span><span style="color: #0000FF;">:</span><span style="color: #000000;">floor_text</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #7060A8;">cdCanvasFont</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Helvetica"</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_PLAIN</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">16</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_BLACK</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">panels</span><span style="color: #0000FF;">[</span><span style="color: #000000;">4</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #7060A8;">cdCanvasText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Restart"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">panels</span><span style="color: #0000FF;">[</span><span style="color: #000000;">5</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #7060A8;">cdCanvasText</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Exit"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasFlush</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">map_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000000;">ih</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupGetDouble</span><span style="color: #0000FF;">(</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"SCREENDPI"</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">25.4</span> |
|||
<span style="color: #7060A8;">IupGLMakeCurrent</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #000000;">cdcanvas</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">cdCreateCanvas</span><span style="color: #0000FF;">(</span><span style="color: #004600;">CD_IUP</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">canvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">else</span> |
|||
<span style="color: #000000;">cdcanvas</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">cdCreateCanvas</span><span style="color: #0000FF;">(</span><span style="color: #004600;">CD_GL</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"798x698 %g"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">res</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #7060A8;">cdCanvasSetBackground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_PARCHMENT</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">button_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">button</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">pressed</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000080;font-style:italic;">/*pStatus*/</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">button</span><span style="color: #0000FF;">=</span><span style="color: #004600;">IUP_BUTTON1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">pressed</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hh</span> |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">floor_text</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">buttons</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">floor_text</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">buttons</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">x</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">y</span><span style="color: #0000FF;">}</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">*</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">*</span><span style="color: #000000;">cy</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">3600</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (the button radius is 60)</span> |
|||
<span style="color: #000000;">actions</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">floor_text</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #000080;font-style:italic;">-- (let timer_cb sort it out)</span> |
|||
<span style="color: #7060A8;">IupSetInt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">timer</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"RUN"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">exit</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">4</span> <span style="color: #008080;">to</span> <span style="color: #000000;">5</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hh</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">panels</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">hw</span> <span style="color: #008080;">and</span> <span style="color: #000000;">x</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hw</span> |
|||
<span style="color: #008080;">and</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">hh</span> <span style="color: #008080;">and</span> <span style="color: #000000;">y</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hh</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">5</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">IUP_CLOSE</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #000000;">new_game</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupRedraw</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">exit</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_CONTINUE</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">timer_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*ih*/</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">actions</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #7060A8;">IupSetInt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">timer</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"RUN"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">false</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">else</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">action</span> <span style="color: #000080;font-style:italic;">-- 'G'==='0', '<' is open, '>' is close.</span> |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">action</span><span style="color: #0000FF;">,</span><span style="color: #000000;">actions</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">actions</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #000000;">actions</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..$]}</span> |
|||
<span style="color: #008080;">switch</span> <span style="color: #000000;">action</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #008000;">'G'</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">action</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'0'</span><span style="color: #0000FF;">;</span> <span style="color: #008080;">fallthrough</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #008000;">'0'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'1'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'2'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'3'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'4'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'5'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'6'</span><span style="color: #0000FF;">:</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">action</span><span style="color: #0000FF;">-</span><span style="color: #008000;">'0'</span><span style="color: #0000FF;">-</span><span style="color: #000000;">cur_floor</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #000000;">actions</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sign</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">))</span> <span style="color: #0000FF;">&</span> <span style="color: #008000;">'<'</span> <span style="color: #0000FF;">&</span> <span style="color: #000000;">actions</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">door_open</span> <span style="color: #008080;">then</span> <span style="color: #000000;">actions</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">prepend</span><span style="color: #0000FF;">(</span><span style="color: #000000;">actions</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'>'</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">elsif</span> <span style="color: #008080;">not</span> <span style="color: #000000;">door_open</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #000000;">actions</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">prepend</span><span style="color: #0000FF;">(</span><span style="color: #000000;">actions</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'<'</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">:</span> |
|||
<span style="color: #000000;">cur_floor</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">action</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #008000;">'>'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'<'</span><span style="color: #0000FF;">:</span> |
|||
<span style="color: #000000;">door_open</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">action</span><span style="color: #0000FF;">==</span><span style="color: #008000;">'<'</span> |
|||
<span style="color: #008080;">case</span> <span style="color: #008000;">'^'</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'v'</span><span style="color: #0000FF;">:</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">wait_sign</span><span style="color: #0000FF;">!=-</span><span style="color: #000000;">1</span> |
|||
<span style="color: #008080;">and</span> <span style="color: #7060A8;">compare</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cur_floor</span><span style="color: #0000FF;">,</span><span style="color: #000000;">wait_sign</span><span style="color: #0000FF;">)==</span><span style="color: #7060A8;">compare</span><span style="color: #0000FF;">(</span><span style="color: #000000;">action</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'_'</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #000080;font-style:italic;">-- (hint: in ascii, '^' < '_' whereas 'v' > '_' ... |
|||
--- plus action ain't ever gonna be '_' here.)</span> |
|||
<span style="color: #000000;">actions</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">prepend</span><span style="color: #0000FF;">(</span><span style="color: #000000;">actions</span><span style="color: #0000FF;">,</span><span style="color: #000000;">wait_sign</span><span style="color: #0000FF;">+</span><span style="color: #008000;">'0'</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">default</span><span style="color: #0000FF;">:</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #000080;font-style:italic;">-- unknown action?</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">switch</span> |
|||
<span style="color: #7060A8;">IupRedraw</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_IGNORE</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">main</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupOpen</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">canvas</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupGLCanvas</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"RASTERSIZE=800x700"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">cb</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"MAP_CB"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"map_cb"</span><span style="color: #0000FF;">),</span> |
|||
<span style="color: #008000;">"ACTION"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"redraw_cb"</span><span style="color: #0000FF;">),</span> |
|||
<span style="color: #008000;">"BUTTON_CB"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"button_cb"</span><span style="color: #0000FF;">)}</span> |
|||
<span style="color: #7060A8;">IupSetCallbacks</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cb</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">dlg</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupDialog</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span><span style="color: #008000;">`TITLE="%s", RESIZE=NO`</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">title</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #000000;">new_game</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupShow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">timer</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupTimer</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"timer_cb"</span><span style="color: #0000FF;">),</span><span style="color: #000000;">500</span><span style="color: #0000FF;">,</span><span style="color: #004600;">false</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #7060A8;">IupMainLoop</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupClose</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span> |
|||
<!--</lang>--> |
|||
=={{header|Ring}}== |
=={{header|Ring}}== |
||
<br>[https://youtu.be/I1Jt53q5O-c Evelator Game in Ring - video]<br><br> |
<br>[https://youtu.be/I1Jt53q5O-c Evelator Game in Ring - video]<br><br> |
Revision as of 14:11, 29 August 2021
- Task
To see how it works watch the next video
Evelator Game in Ring - video
Necessary image files - download
Please if you can attach a video file how your sample works.
Phix
You can run this online here.
-- -- demo\rosetta\ElevatorSimulation.exw -- =================================== -- -- Even dumber than a real lift - clicking 16161616 ties it up for ages... -- with javascript_semantics include pGUI.e Ihandle dlg, canvas, timer cdCanvas cdcanvas constant title = "Elevator Simulation", CD_DARKER_GREY = #383838, -- (darker than CD_DARK_GREY) CD_LIGHTER_ORANGE = #FFA500, -- (lighter than CD_ORANGE) CD_PALE_BLUE = #98C5DA, -- (lighter than CD_LIGHT_BLUE) CD_MEDIUM_BLUE = #759EB4, -- (darker than CD_LIGHT_BLUE) panels = {{195,30,45,12}, -- indicator {380,150,50,90}, -- up/down {380,465,100,210}, -- main {625,330,75,25}, -- restart {625,530,75,25}}, -- exit buttons = {{380,110,"^"}, {380,190,"v"}, {335,305,"5"},{420,305,"6"}, {335,385,"3"},{420,385,"4"}, {335,465,"1"},{420,465,"2"}, {380,540,"GF"}, {380,630,">|<"}} integer cur_floor, -- 0..6 wait_sign -- "", -1 if none bool door_open sequence actions = {} -- (see timer_cb) procedure new_game() cur_floor = rand(7)-1 wait_sign = rand(7)-1 door_open = rand(2)==1 end procedure function redraw_cb(Ihandle /*ih*/, integer /*posx*/, /*posy*/) integer {width, height} = IupGetIntInt(canvas, "DRAWSIZE") cdCanvasActivate(cdcanvas) cdCanvasSetBackground(cdcanvas, CD_DARKER_GREY) cdCanvasClear(cdcanvas) cdCanvasSetForeground(cdcanvas, CD_LIGHTER_ORANGE) cdCanvasSetInteriorStyle(cdcanvas, CD_SOLID) for i=1 to length(panels) do integer {cx,cy,hw,hh} = panels[i] cdCanvasRoundedBox(cdcanvas,cx-hw,cx+hw,height-(cy+hh),height-(cy-hh),5,4) // (a filled box has no antialiasing, so overwrite with an outline box too:) cdCanvasRoundedRect(cdcanvas,cx-hw,cx+hw,height-(cy+hh),height-(cy-hh),5,4) end for cdCanvasSetForeground(cdcanvas, CD_BLACK) cdCanvasFont(cdcanvas, "Helvetica", CD_PLAIN, 16) {} = cdCanvasTextAlignment(cdcanvas,CD_CENTER) integer {cx,cy} = panels[1] string floor_text = iff(cur_floor=0?"GF":sprintf("%d",cur_floor)) cdCanvasText(cdcanvas,cx,height-cy,floor_text) cy += 75 for i=6 to 0 by -1 do integer minx = cx-40, maxx = cx+40, miny = height-(cy+45), maxy = height-(cy-40) cdCanvasSetForeground(cdcanvas, CD_PARCHMENT) cdCanvasBox(cdcanvas,minx,maxx,miny,maxy) if i=cur_floor then if i=wait_sign then wait_sign = -1 end if cdCanvasSetForeground(cdcanvas, CD_MEDIUM_BLUE) cdCanvasBox(cdcanvas,minx,maxx,miny,maxy) cdCanvasSetForeground(cdcanvas, CD_PALE_BLUE) cdCanvasBox(cdcanvas,minx+5,maxx-5,miny,maxy) if door_open then cdCanvasSetForeground(cdcanvas, CD_CYAN) cdCanvasBox(cdcanvas,minx+8,maxx-8,miny,maxy) else cdCanvasSetForeground(cdcanvas, CD_MEDIUM_BLUE) cdCanvasLine(cdcanvas,cx,miny,cx,maxy) end if elsif i=wait_sign then integer y3 = height-cy-3 for j=1 to 2 do cdCanvasSetForeground(cdcanvas, {CD_YELLOW,CD_BLACK}[j]) cdCanvasBegin(cdcanvas,{CD_FILL,CD_CLOSED_LINES}[j]) cdCanvasVertex(cdcanvas, cx, miny+3) cdCanvasVertex(cdcanvas, maxx-2, y3) cdCanvasVertex(cdcanvas, cx, maxy-4) cdCanvasVertex(cdcanvas, minx+1, y3) cdCanvasEnd(cdcanvas) end for cdCanvasText(cdcanvas,cx,y3,"WAIT") end if cy += 90 end for cdCanvasFont(cdcanvas, "Helvetica", CD_PLAIN, 20) for i=1 to length(buttons) do {cx,cy,floor_text} = buttons[i] cy = height-cy cdCanvasSetForeground(cdcanvas, CD_SILVER) cdCanvasSector(cdcanvas, cx, cy, 60, 60, 0, 360) cdCanvasSetForeground(cdcanvas, CD_BLACK) cdCanvasArc(cdcanvas, cx, cy, 50, 50, 0, 360) cdCanvasArc(cdcanvas, cx, cy, 60, 60, 0, 360) {} = cdCanvasTextOrientation(cdcanvas, iff(i=1?180:0)) cdCanvasText(cdcanvas,cx,cy,iff(i=1?"v":floor_text)) end for cdCanvasFont(cdcanvas, "Helvetica", CD_PLAIN, 16) cdCanvasSetForeground(cdcanvas, CD_BLACK) {cx,cy} = panels[4] cdCanvasText(cdcanvas,cx,height-cy,"Restart") {cx,cy} = panels[5] cdCanvasText(cdcanvas,cx,height-cy,"Exit") cdCanvasFlush(cdcanvas) return IUP_DEFAULT end function function map_cb(Ihandle ih) atom res = IupGetDouble(NULL, "SCREENDPI")/25.4 IupGLMakeCurrent(canvas) if platform()=JS then cdcanvas = cdCreateCanvas(CD_IUP, canvas) else cdcanvas = cdCreateCanvas(CD_GL, "798x698 %g", {res}) end if cdCanvasSetBackground(cdcanvas, CD_PARCHMENT) return IUP_DEFAULT end function function button_cb(Ihandle canvas, integer button, pressed, x, y, atom /*pStatus*/) if button=IUP_BUTTON1 and pressed then integer cx,cy,hw,hh string floor_text for i=1 to length(buttons) do {cx,cy,floor_text} = buttons[i] {cx,cy} = {cx-x,cy-y} if cx*cx+cy*cy<=3600 then -- (the button radius is 60) actions &= floor_text[1] -- (let timer_cb sort it out) IupSetInt(timer,"RUN",true) exit end if end for for i=4 to 5 do {cx,cy,hw,hh} = panels[i] if x>=cx-hw and x<=cx+hw and y>=cy-hh and y<=cy+hh then if i=5 then return IUP_CLOSE end if new_game() IupRedraw(dlg) exit end if end for end if return IUP_CONTINUE end function function timer_cb(Ihandle /*ih*/) if length(actions)=0 then IupSetInt(timer,"RUN",false) else integer action -- 'G'==='0', '<' is open, '>' is close. {action,actions} = {actions[1],actions[2..$]} switch action do case 'G': action = '0'; fallthrough case '0','1','2','3','4','5','6': integer d = action-'0'-cur_floor if d!=0 then actions = repeat(sign(d),abs(d)) & '<' & actions if door_open then actions = prepend(actions,'>') end if elsif not door_open then actions = prepend(actions,'<') end if case -1,+1: cur_floor += action case '>','<': door_open = action=='<' case '^','v': if wait_sign!=-1 and compare(cur_floor,wait_sign)==compare(action,'_') then -- (hint: in ascii, '^' < '_' whereas 'v' > '_' ... --- plus action ain't ever gonna be '_' here.) actions = prepend(actions,wait_sign+'0') end if default: ?9/0 -- unknown action? end switch IupRedraw(dlg) end if return IUP_IGNORE end function procedure main() IupOpen() canvas = IupGLCanvas("RASTERSIZE=800x700") sequence cb = {"MAP_CB", Icallback("map_cb"), "ACTION", Icallback("redraw_cb"), "BUTTON_CB", Icallback("button_cb")} IupSetCallbacks(canvas, cb) dlg = IupDialog(canvas,`TITLE="%s", RESIZE=NO`,{title}) new_game() IupShow(dlg) timer = IupTimer(Icallback("timer_cb"),500,false) if platform()!=JS then IupMainLoop() IupClose() end if end procedure main()
Ring
Evelator Game in Ring - video
<lang ring>
- Project : Elevator Game
- Date : 21/08/2021-02:26:57
- Author : Gal Zsolt (~ CalmoSoft ~)
- Email : calmosoft@gmail.com
load "stdlib.ring" load "guilib.ring"
floorCount = 7 randEvelator = 1 randWait = 1 randOld = 0 nFloor = 0 count = 0 flag = 0 targetFloor = 0 floor = list(floorCount) floorbtn = list(floorCount) floorCall = list(floorCount) C_UP = "images/up.jpg" C_DOWN = "images/down.jpg" C_WAIT = "images/wait.jpg" C_EMPTY = "images/empty.jpg" C_OPEN = "images/elevatoropen.jpg" C_CLOSE = "images/elevatorclose.jpg" C_CLOSEELEVATOR = "images/closeevelator.jpg" C_RECTANGLE = "images/rectangle.jpg" floorbtn[1] = "images/floor0.jpg" floorbtn[2] = "images/floor1.jpg" floorbtn[3] = "images/floor2.jpg" floorbtn[4] = "images/floor3.jpg" floorbtn[5] = "images/floor4.jpg" floorbtn[6] = "images/floor5.jpg" floorbtn[7] = "images/floor6.jpg"
oFont = new qfont("Verdana",16,0,0) C_ButtonOrangeStyle = 'border-radius:6px;color:black; background-color: orange'
app = new qApp {
stylefusionblack() processevents()
win = new qWidget() {
setWindowTitle('Elevator Game')
setWindowIcon(new qIcon(new qPixmap(C_OPEN)))
move(550,140) reSize(800,700)
app.processEvents()
for n = 1 to floorCount
floor[n] = new QPushButton(win) { setgeometry(150,510-(n-2)*90,85,85) }
next
showFloor = new QPushButton(win)
{ setgeometry(150,15,90,25) setstylesheet(C_ButtonOrangestyle)
setfont(oFont) }
rectangle = new QPushButton(win) { setgeometry(330,55,100,180) setstylesheet(C_ButtonOrangestyle)
setIconSize(new qSize(66,66)) }
down = new QPushButton(win) { setgeometry(350,150,66,66)
setfont(oFont)
seticon(new qicon(new qpixmap(C_DOWN)))
setIconSize(new qSize(66,66)) setclickevent("pMoveDown()") }
up = new QPushButton(win) { setgeometry(350,70,66,66)
setfont(oFont)
seticon(new qicon(new qpixmap(C_UP)))
setIconSize(new qSize(66,66)) setclickevent("pMoveUp()") }
newGame = new QPushButton(win) { setgeometry(550,300,150,50) setstylesheet(C_ButtonOrangestyle)
setfont(oFont) settext("New Game") setclickevent("pNewGame()") }
exitButton = new QPushButton(win) { setgeometry(550,500,150,50) setstylesheet(C_ButtonOrangestyle)
setfont(oFont) setClickEvent("pExit()")
settext("Exit") }
rectangleFloor = new QPushButton(win) { setgeometry(280,260,190,420) setstylesheet(C_ButtonOrangestyle)
setIconSize(new qSize(66,66)) }
floorCall[1] = new QPushButton(win) { setgeometry(343,506,66,66) seticon(new qicon(new qpixmap(floorbtn[1])))
setIconSize(new qSize(100,100)) settext("GF") setclickevent("pMove(" + "1" + ")") }
floorCall[2] = new QPushButton(win) { setgeometry(300,420,66,66) seticon(new qicon(new qpixmap(floorbtn[2])))
setIconSize(new qSize(100,100)) setclickevent("pMove(" + "2" + ")") }
floorCall[3] = new QPushButton(win) { setgeometry(386,420,66,66) seticon(new qicon(new qpixmap(floorbtn[3])))
setIconSize(new qSize(100,100)) setclickevent("pMove(" + "3" + ")") }
floorCall[4] = new QPushButton(win) { setgeometry(300,344,66,66) seticon(new qicon(new qpixmap(floorbtn[4])))
setIconSize(new qSize(100,100)) setclickevent("pMove(" + "4" + ")") show() }
floorCall[5] = new QPushButton(win) { setgeometry(386,344,66,66) seticon(new qicon(new qpixmap(floorbtn[5])))
setIconSize(new qSize(100,100)) setclickevent("pMove(" + "5" + ")") show() }
floorCall[6] = new QPushButton(win) { setgeometry(300,268,66,66) seticon(new qicon(new qpixmap(floorbtn[6])))
setIconSize(new qSize(100,100)) setclickevent("pMove(" + "6" + ")") }
floorCall[7] = new QPushButton(win) { setgeometry(386,268,66,66) seticon(new qicon(new qpixmap(floorbtn[7])))
setIconSize(new qSize(100,100)) setclickevent("pMove(" + "7" + ")") }
close = new QPushButton(win) { setgeometry(340,592,66,66) seticon(new qicon(new qpixmap(C_CLOSEELEVATOR)))
setIconSize(new qSize(66,66)) setclickevent("pClose()") } show() } pBegin() exec()
}
func pNewGame()
pBegin() pWait()
func pBegin()
flag = 0 count = 0 for n = 1 to floorCount
floor[n] { seticon(new qicon(new qpixmap(C_EMPTY)))
setIconSize(new qSize(100,100)) } next randEvelator = random(floorCount-1) + 1 for n = 1 to floorCount
floorCall[n] { setenabled(False) }
next up { setenabled(True) } down { setenabled(True) } pWait()
func pWait()
floor[randWait] { seticon(new qicon(new qpixmap(C_EMPTY))) setIconSize(new qSize(100,100)) } randWait = random(floorCount-1) + 1
while true if randWait != randEvelator nFloor = randEvelator floor[randWait] { seticon(new qicon(new qpixmap(C_WAIT))) setIconSize(new qSize(100,100)) } floor[randEvelator] { seticon(new qicon(new qpixmap(C_CLOSE))) setIconSize(new qSize(100,100)) } showFloor.settext(string(randEvelator-1)) for n = 1 to floorCount floorCall[n] { setenabled(False) } next exit else randEvelator = random(floorCount-1) + 1 ok end return
func pMove(sourceFloor)
if flag = 1 n = 0 pClose() app.processEvents() sleep(0.5) up { setenabled(false) } down { setenabled(false) } count = count + 1 if count = 1 targetFloor = randWait else targetFloor = randOld ok n = 0 if sourceFloor > targetFloor for n = targetFloor to sourceFloor - 1 app.processEvents() sleep(0.5) floor[n] { seticon(new qicon(new qpixmap(C_EMPTY))) setIconSize(new qSize(100,100)) } floor[n+1] { seticon(new qicon(new qpixmap(C_CLOSE))) setIconSize(new qSize(100,100)) } if n = 0 showFloor.settext("GF") else showFloor.settext(string(n)) ok if n = sourceFloor - 1 nFloor = n + 1 floor[n+1] { seticon(new qicon(new qpixmap(C_OPEN))) setIconSize(new qSize(100,100)) } ok next see nl ok n = 0 if sourceFloor < targetFloor for n = targetFloor to sourceFloor + 1 step -1 app.processEvents() sleep(0.5) floor[n] { seticon(new qicon(new qpixmap(C_EMPTY))) setIconSize(new qSize(100,100)) } floor[n-1] { seticon(new qicon(new qpixmap(C_CLOSE))) setIconSize(new qSize(100,100)) } if n = 2 showFloor.settext("GF") else showFloor.settext(string(n-2)) ok if n = sourceFloor + 1 nFloor = n - 1 floor[n-1] { seticon(new qicon(new qpixmap(C_OPEN))) setIconSize(new qSize(100,100)) } ok next see nl ok randOld = sourceFloor ok
func pMoveDown
if randWait > randEvelator return ok for n = 1 to floorCount
floorCall[n] { setenabled(True) }
next if randWait < randEvelator for n = randEvelator to randWait + 1 step -1 app.processEvents() sleep(0.5) floor[n] { seticon(new qicon(new qpixmap(C_EMPTY))) setIconSize(new qSize(100,100)) } floor[n-1] { seticon(new qicon(new qpixmap(C_CLOSE))) setIconSize(new qSize(100,100)) } if n = 0 showFloor.settext("GF") else showFloor.settext(string(n-2)) ok if n = randWait + 1 nFloor = n - 1 floor[n-1] { seticon(new qicon(new qpixmap(C_OPEN))) setIconSize(new qSize(100,100)) } ok next ok app.processEvents() sleep(1) flag++
func pMoveUp()
if randWait < randEvelator return ok for n = 1 to floorCount
floorCall[n] { setenabled(True) }
next if randWait > randEvelator for n = randEvelator to randWait - 1 app.processEvents() sleep(0.5) floor[n] { seticon(new qicon(new qpixmap(C_EMPTY))) setIconSize(new qSize(100,100)) } floor[n+1] { seticon(new qicon(new qpixmap(C_CLOSE))) setIconSize(new qSize(100,100)) } if n = 1 showFloor.settext("GF") else showFloor.settext(string(n)) ok if n = randWait - 1 nFloor = n + 1 floor[n+1] { seticon(new qicon(new qpixmap(C_OPEN))) setIconSize(new qSize(100,100)) } ok next ok app.processEvents() sleep(1) flag++
func pClose()
floor[nFloor] { seticon(new qicon(new qpixmap(C_CLOSE))) setIconSize(new qSize(100,100)) }
func pExit()
win.close() app.quit()
</lang>
Wren
It's not currently possible to run a DOME application online in a browser but the following is designed to look and work more or less like the Ring entry. However, the user interface is not as fancy as I don't have ready made images of elevators etc. available. <lang ecmascript>import "dome" for Window, Platform, Process import "graphics" for Canvas, Color, Font import "audio" for AudioEngine import "input" for Mouse import "random" for Random import "./dynamic" for Enum import "./ellipse" for Circle, Polygon, Rectangle, Square
var Direction = Enum.create("Direction", ["halted", "up", "down"])
var Rand = Random.new()
class Elevator {
construct new() { Window.resize(820, 820) Canvas.resize(820, 820) Window.title = "Elevator game" // see Go-fonts page Font.load("Go-Regular20", "Go-Regular.ttf", 20) Canvas.font = "Go-Regular20" Font.load("Go-Regular25", "Go-Regular.ttf", 25) // download from https://soundbible.com/509-Mouse-Double-Click.html AudioEngine.load("click", "mouse_click.wav") }
init() { newGame() }
newGame() { _buttons = []
// floors for (i in 1..7) { Canvas.rectfill(120, 100*i + 5, 90, 90, Color.white) }
// floor up/down buttons Canvas.rectfill(300, 30, 100, 200, Color.orange) var up = Square.new(315, 45, 70, "up") up.drawfill(Color.lightgray) _buttons.add(up) Canvas.print("\u25b2", 345, 70, Color.black) var down = Square.new(315, 145, 70, "down") down.drawfill(Color.lightgray) _buttons.add(down) Canvas.print("\u25bc", 345, 170, Color.black)
// floor number buttons Canvas.rectfill(250, 305, 200, 490, Color.orange) var f25 = "Go-Regular25"
var floor5 = Circle.new(300, 350, 40, 5) floor5.drawfill(Color.lightgray) Canvas.print("5", 295, 340, Color.black, f25)
var floor6 = Circle.new(400, 350, 40, 6) floor6.drawfill(Color.lightgray) Canvas.print("6", 395, 340, Color.black, f25)
var floor3 = Circle.new(300, 450, 40, 3) floor3.drawfill(Color.lightgray) Canvas.print("3", 295, 440, Color.black, f25)
var floor4 = Circle.new(400, 450, 40, 4) floor4.drawfill(Color.lightgray) Canvas.print("4", 395, 440, Color.black, f25)
var floor1 = Circle.new(300, 550, 40, 1) floor1.drawfill(Color.lightgray) Canvas.print("1", 295, 540, Color.black, f25)
var floor2 = Circle.new(400, 550, 40, 2) floor2.drawfill(Color.lightgray) Canvas.print("2", 395, 540, Color.black, f25)
var ground = Square.fromCenter(350, 650, 80, "ground") ground.drawfill(Color.white) Canvas.print("GF", 335, 640, Color.black, f25)
var close = Square.fromCenter(350, 750, 80, "close") close.drawfill(Color.white, Color.black, 2) Canvas.print("\u25ba\u25c4", 330, 740, Color.black)
_buttons.addAll([floor1, floor2, floor3, floor4, floor5, floor6, ground, close])
// new game button var newGame = Rectangle.new(525, 355, 150, 50, "new") newGame.drawfill(Color.orange) Canvas.print("New Game", 545, 365, Color.black) _buttons.add(newGame)
// exit button var exit = Rectangle.new(525, 595, 150, 50, "exit") exit.drawfill(Color.orange) Canvas.print("Exit", 575, 605, Color.black) _buttons.add(exit) _floor = Rand.int(0, 7) // start by placing lift on a random floor drawLift() openDoors() changeFloorNumber() _dir = Direction.halted _floorDest = _floor _start = 0
_wait = Rand.int(0, 7) // start with a random wait point, different to where lift is if (_wait == _floor) { _wait = _floor - 1 if (_wait < 0) _wait = 2 } var wait = Polygon.regular(4, 165, 750 - _wait*100, 45, 0) wait.drawfill(Color.yellow, Color.black) Canvas.print("WAIT", 140, 740 - _wait*100, Color.black) }
update() { if (Mouse["left"].justPressed) { var x = Mouse.x var y = Mouse.y for (btn in _buttons) { if (btn.contains(x, y)) { var t = btn.tag if (t == "up") { if (_floor < 6) { _dir = Direction.up _floorDest = 6 } } else if (t == "down") { if (_floor > 0) { _dir = Direction.down _floorDest = 0 } } else if (t is Num) { if (t < _floor) { _dir = Direction.down } else if (t > _floor) { _dir = Direction.up } else { _dir = Direction.halted openDoors() } _floorDest = t } else if (t == "ground") { if (_floor > 0) { _dir = Direction.down } else { _dir = Direction.halted openDoors() } _floorDest = 0 } else if (t == "close") { if (_dir == Direction.halted) { closeDoors() } } else if (t == "new") { Canvas.cls("black") newGame() } else if (t == "exit") { Process.exit() } if (_dir != Direction.halted) { closeDoors() _start = Platform.time } else { _start = 0 } } } } }
drawLift() { Canvas.rectfill(120, 100*(7 - _floor) + 5, 90, 90, Color.blue) }
undrawLift() { Canvas.rectfill(120, 100*(7 - _floor) + 5, 90, 90, Color.white) }
changeFloorNumber() { Canvas.rectfill(120, 30, 90, 40, Color.orange) Canvas.print(_floor.toString, 160, 40, Color.black) }
openDoors() { Canvas.rectfill(135, 100*(7 - _floor) + 30, 60, 60, Color.white) }
closeDoors() { Canvas.rectfill(120, 100*(7 - _floor) + 5, 90, 90, Color.blue) } draw(alpha) { if (_start > 0) { var delta = Platform.time - _start if (delta >= 1) { undrawLift() _floor = (_dir == Direction.up) ? _floor + 1 : _floor - 1 drawLift() changeFloorNumber() if (_floor == _wait) { _dir = Direction.halted _start = 0 _wait = -1 openDoors() } else if (_floor == _floorDest) { _dir = Direction.halted _start = 0 openDoors() } else { _start = _start + delta } } } }
}
var Game = Elevator.new()</lang>