Simple turtle graphics: Difference between revisions

m
→‎{{header|Phix}}: factored out some common code for the 3D version
m (J: put back "cleanup code" to restore turtle to initial state (technically right 90 would suffice in place of left 270))
m (→‎{{header|Phix}}: factored out some common code for the 3D version)
Line 620:
{{libheader|Phix/pGUI}}
{{libheader|Phix/online}}
You can run this online [http://phix.x10.mx/p2js/simpleturtlegraphics.htm here].<br>
I factored out some common code for the 2D and 3D versions (or started to, distributed version contains some additional diag aids)
<!--<lang Phix>(phixonline)-->
<span style="color: #000080;font-style:italic;">-- demo\rosetta\turtle.e</span>
<span style="color: #004080008080;">Ihandleinclude</span> <span style="color: #000000;">canvaspGUI</span><span style="color: #0000FF;">,.</span> <span style="color: #000000;">dlge</span>
<span style="color: #008080;">global</span> <span style="color: #004080;">boolIhandle</span> <span style="color: #000000;">pen_downcanvas</span> <span style="color: #0000FF;">=,</span> <span style="color: #004600000000;">truedlg</span>
<span style="color: #008080;">procedureglobal</span> <span style="color: #000000004080;">penupcdCanvas</span> <span style="color: #0000FF000000;">()cdcanvas</span>
<span style="color: #008080;">global</span> <span style="color: #004080;">bool</span> <span style="color: #000000;">pen_down</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">global</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">pendown</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">colour</span><span style="color: #0000FF;">=</span><span style="color: #004600;">CD_BLACK</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">pen_down</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</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;">colour</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">endglobal</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">penup</span><span style="color: #0000FF;">()</span>
<span style="color: #004080000000;">cdCanvaspen_down</span> <span style="color: #0000000000FF;">=</span> <span style="color: #004600;">cdcanvasfalse</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<!--</lang>-->
 
<!--<lang Phix>(phixonline)-->
<span style="color: #000080;font-style:italic;">--
Line 627 ⟶ 645:
--</span>
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">pGUIturtle</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> <span style="color: #000080;font-style:italic;">-- (common code for 2D and 3D versions)</span>
<span style="color: #004080;">Ihandle</span> <span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dlg</span>
<span style="color: #004080;">cdCanvas</span> <span style="color: #000000;">cdcanvas</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">direction</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #004080;">bool</span> <span style="color: #000000;">pen_down</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">walk</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">distance</span><span style="color: #0000FF;">)</span>
Line 656 ⟶ 671:
<span style="color: #008080;">procedure</span> <span style="color: #000000;">left</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">angle</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">right</span><span style="color: #0000FF;">(</span><span style="color: #000000;">360</span><span style="color: #0000FF;">-</span><span style="color: #000000;">angle</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">penup</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">pen_down</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">pendown</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">colour</span><span style="color: #0000FF;">=</span><span style="color: #004600;">CD_BLACK</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">pen_down</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</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;">colour</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
Line 687 ⟶ 693:
// Draw a house at the current x,y
// direction must be 0 for house to be upright
-- left(10) -- (deliberately wonky works fine too)
//
// -- (as long as you undo it at the end)
// house walls</span>
<span style="color: #000000;">rectangle</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>
Line 706 ⟶ 713:
<span style="color: #000080;font-style:italic;">// return to origin({qw,qh}) and direction 0:</span>
<span style="color: #000000;">move</span><span style="color: #0000FF;">({</span><span style="color: #000000;">90</span><span style="color: #0000FF;">+</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">width</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">90</span><span style="color: #0000FF;">,</span><span style="color: #000000;">height</span><span style="color: #0000FF;">,</span><span style="color: #000000;">180</span><span style="color: #0000FF;">})</span>
<span style="color: #000080;font-style:italic;">-- right(10)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">draw_barchart</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">nums</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">w</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">// draw a barchart occupying the middle 60% of w,h
// nums can contain +ve and/or -ve values.</span>
-- right(10) -- (ditto)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">nums</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">mx</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">max</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">max</span><span style="color: #0000FF;">(</span><span style="color: #000000;">nums</span><span style="color: #0000FF;">),</span><span style="color: #000000;">0</span><span style="color: #0000FF;">),</span>
Line 735 ⟶ 744:
<span style="color: #000080;font-style:italic;">// return to origin({w/2,0}) and direction 0:</span>
<span style="color: #000000;">move</span><span style="color: #0000FF;">({</span><span style="color: #000000;">180</span><span style="color: #0000FF;">,</span><span style="color: #000000;">zl</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90</span><span style="color: #0000FF;">,</span><span style="color: #000000;">w</span><span style="color: #0000FF;">/</span><span style="color: #000000;">5</span><span style="color: #0000FF;">+</span><span style="color: #000000;">bw</span><span style="color: #0000FF;">*</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90</span><span style="color: #0000FF;">})</span>
<span style="color: #000080;font-style:italic;">-- left(10)</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;">cdCanvasClear</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">qww2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">width</span><span style="color: #0000FF;">/</span><span style="color: #000000;">42</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">qw</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">width</span><span style="color: #0000FF;">/</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">qh</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">/</span><span style="color: #000000;">4</span>
<span style="color: #000000;">penup</span><span style="color: #0000FF;">()</span>
Line 747 ⟶ 758:
<span style="color: #000000;">pendown</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">draw_house</span><span style="color: #0000FF;">(</span><span style="color: #000000;">qw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qh</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (athouse in the currentleft x,y)half</span>
<span style="color: #000000;">penup</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">move</span><span style="color: #0000FF;">({</span><span style="color: #000000;">180</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qh</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90</span><span style="color: #0000FF;">,</span><span style="color: #000000;">qw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90</span><span style="color: #0000FF;">})</span> <span style="color: #000080;font-style:italic;">-- return to {0,0}</span>
<span style="color: #000000;">move</span><span style="color: #0000FF;">({</span><span style="color: #000000;">90</span><span style="color: #0000FF;">,</span><span style="color: #000000;">width</span><span style="color: #0000FF;">/</span><span style="color: #000000;">2w2</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">90</span><span style="color: #0000FF;">})</span> <span style="color: #000080;font-style:italic;">-- barchart in the right half</span>
<span style="color: #000000;">draw_barchart</span><span style="color: #0000FF;">({</span><span style="color: #000000;">0.5</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">4</span><span style="color: #0000FF;">/</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1.3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0.5</span><span style="color: #0000FF;">},</span><span style="color: #000000;">width</span><span style="color: #0000FF;">/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">height</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">move</span><span style="color: #0000FF;">({-</span><span style="color: #000000;">90</span><span style="color: #0000FF;">,</span><span style="color: #000000;">width</span><span style="color: #0000FF;">/</span><span style="color: #000000;">2w2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90</span><span style="color: #0000FF;">})</span> <span style="color: #000080;font-style:italic;">-- return to {0,0}
-- sanity checks</span>
Line 766 ⟶ 777:
<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: #7060A8;">IupOpen</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">canvas</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupCanvas</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;">"RASTERSIZE=600x400"</span><span style="color: #0000FF;">)</span>
7,795

edits