Changes

Jump to navigation Jump to search
Migrate to GitHub
Line 1: Line 1: −
Logo code saved from Turtle Art Turing Machine session
+
== Turtle Art/Tutorials/Logo Code for Turtle Art Turing Machine ==
   −
<pre>window
+
Read at https://help.sugarlabs.org/turtleart_tutorials/logo_code_for_turing_machine.html
   −
comment: functions that implement Turtle Art blocks
+
The source file has been moved to [https://github.com/godiard/help-activity/blob/master/source/turtleart_tutorials/logo_code_for_turing_machine.rst GitHub]
 
  −
to tasetpalette :i :r :g :b :myshade
  −
make "s ((:myshade - 50) / 50)
  −
ifelse lessp :s 0 [
  −
make "s (1 + (:s *0.8))
  −
make "r (:r * :s)
  −
make "g (:g * :s)
  −
make "b (:b * :s)
  −
] [ make "s (:s * 0.9)
  −
make "r (:r + ((99-:r) * :s))
  −
make "g (:g + ((99-:g) * :s))
  −
make "b (:b + ((99-:b) * :s))
  −
] setpalette :i (list :r :g :b)
  −
end
  −
 
  −
 
  −
to rgb :myi :mycolors :myshade
  −
make "myr first :mycolors
  −
make "mycolors butfirst :mycolors
  −
make "myg first :mycolors
  −
make "mycolors butfirst :mycolors
  −
make "myb first :mycolors
  −
make "mycolors butfirst :mycolors
  −
tasetpalette :myi :myr :myg :myb :myshade
  −
output :mycolors
  −
end
  −
 
  −
 
  −
to processcolor :mycolors :myshade
  −
if emptyp :mycolors [stop]
  −
make "i :i + 1
  −
processcolor (rgb :i :mycolors :myshade) :myshade
  −
end
  −
 
  −
 
  −
to tasetshade :shade
  −
make "myshade modulo :shade 200
  −
if greaterp :myshade 99 [make "myshade (199-:myshade)]
  −
make "i 7
  −
make "mycolors :colors
  −
processcolor :mycolors :myshade
  −
end
  −
 
  −
 
  −
to tasetpencolor :c
  −
make "color (modulo (round :c) 100)
  −
setpencolor :color + 8
  −
end
  −
 
  −
 
  −
make "colors [
  −
99  0  0
  −
99  5  0
  −
99 10  0
  −
99 15  0
  −
99 20  0
  −
99 25  0
  −
99 30  0
  −
99 35  0
  −
99 40  0
  −
99 45  0
  −
99 50  0
  −
99 55  0
  −
99 60  0
  −
99 65  0
  −
99 70  0
  −
99 75  0
  −
99 80  0
  −
99 85  0
  −
99 90  0
  −
99 95  0
  −
99 99  0
  −
90 99  0
  −
80 99  0
  −
70 99  0
  −
60 99  0
  −
50 99  0
  −
40 99  0
  −
30 99  0
  −
20 99  0
  −
10 99  0
  −
  0 99  0
  −
  0 99  5
  −
  0 99 10
  −
  0 99 15
  −
  0 99 20
  −
  0 99 25
  −
  0 99 30
  −
  0 99 35
  −
  0 99 40
  −
  0 99 45
  −
  0 99 50
  −
  0 99 55
  −
  0 99 60
  −
  0 99 65
  −
  0 99 70
  −
  0 99 75
  −
  0 99 80
  −
  0 99 85
  −
  0 99 90
  −
  0 99 95
  −
  0 99 99
  −
  0 95 99
  −
  0 90 99
  −
  0 85 99
  −
  0 80 99
  −
  0 75 99
  −
  0 70 99
  −
  0 65 99
  −
  0 60 99
  −
  0 55 99
  −
  0 50 99
  −
  0 45 99
  −
  0 40 99
  −
  0 35 99
  −
  0 30 99
  −
  0 25 99
  −
  0 20 99
  −
  0 15 99
  −
  0 10 99
  −
  0  5 99
  −
  0  0 99
  −
  5  0 99
  −
10  0 99
  −
15  0 99
  −
20  0 99
  −
25  0 99
  −
30  0 99
  −
35  0 99
  −
40  0 99
  −
45  0 99
  −
50  0 99
  −
55  0 99
  −
60  0 99
  −
65  0 99
  −
70  0 99
  −
75  0 99
  −
80  0 99
  −
85  0 99
  −
90  0 99
  −
95  0 99
  −
99  0 99
  −
99  0 90
  −
99  0 80
  −
99  0 70
  −
99  0 60
  −
99  0 50
  −
99  0 40
  −
99  0 30
  −
99  0 20
  −
99  0 10]
  −
make "shade  50
  −
tasetshade :shade
  −
 
  −
 
  −
to tapop
  −
if emptyp :taheap [stop]
  −
make "tmp first :taheap
  −
make "taheap butfirst :taheap
  −
output :tmp
  −
end
  −
 
  −
 
  −
to taminus :y :x
  −
output sum :x minus :y
  −
end
  −
 
  −
 
  −
to tasetxy :x :y
  −
setxy :x :y
  −
end
  −
 
  −
 
  −
comment: Turing Machine procedures
  −
 
  −
 
  −
to turtleblocks_0
  −
comment: Comment
  −
#sTuring_Machine
  −
end
  −
 
  −
 
  −
to start
  −
comment: main program
  −
comment: Creates and initializes necessary variables, writes program block, writes tape, runs program
  −
clean #sSetup #sProgram #sTape #sExecute
  −
end
  −
 
  −
 
  −
to #sSetup
  −
comment: Create variables, set initial values
  −
right 90.0
  −
setpensize 25.0
  −
tasetpencolor 0.0
  −
tasetshade 50.0 penup
  −
make "#scell 0.0
  −
make "#ssymbol 0.0
  −
make "#smove 0.0
  −
make "#sstate 1.0
  −
make "#sleftedge -390.0
  −
make "#stapey 290.0
  −
make "#sprogramy 200.0
  −
make "#scellwidth 25.0
  −
make "#sright 1.0
  −
make "#shalt 4.0
  −
make "#sA 3.0
  −
make "#sB 2.0
  −
end
  −
 
  −
 
  −
to #sTape
  −
comment: Write initial tape. User can change values in repeat statements to change arguments.
  −
#sToTape
  −
pendown
  −
tasetpencolor 20.0
  −
repeat #sA [ #sWriteCell ]
  −
tasetpencolor 0.0
  −
#sWriteCell
  −
tasetpencolor 20.0
  −
repeat #sB [ #sWriteCell ]  
  −
tasetpencolor 0.0
  −
#sWriteCell #sToTape penup
  −
end
  −
 
  −
 
  −
to #sProgram
  −
comment: Write program table
  −
tasetxy :#sleftedge :#sprogramy
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 40.0
  −
#sWriteCell
  −
tasetxy :#sleftedge taminus ycor :#scellwidth
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetxy :#sleftedge taminus ycor :#scellwidth
  −
tasetpencolor 0.0
  −
#sWriteCell
  −
tasetpencolor 0.0
  −
#sWriteCell
  −
tasetpencolor 60.0
  −
#sWriteCell
  −
stack1
  −
end
  −
 
  −
to stack1
  −
comment: Continuation of Program so that the segments fit on the Turtle Art screen
  −
tasetxy :#sleftedge taminus ycor :#scellwidth
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 40.0
  −
#sWriteCell
  −
tasetxy :#sleftedge taminus ycor :#scellwidth
  −
tasetpencolor 0.0
  −
#sWriteCell
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 80.0
  −
#sWriteCell
  −
tasetxy
  −
  :#sleftedge taminus ycor
  −
  :#scellwidth
  −
tasetpencolor 0.0
  −
#sWriteCell
  −
tasetpencolor 20.0
  −
#sWriteCell
  −
tasetpencolor 80.0
  −
#sWriteCell
  −
penup
  −
end
  −
 
  −
 
  −
to #sExecute
  −
 
  −
comment: Test for halt or next program step
  −
make "#sstep 0.0
  −
forever
  −
  [ ifelse ( equal? :#sstate :#shalt )
  −
  [  stop ]
  −
  [ #sReadPixel
  −
    #sSetValue
  −
    make "#ssymbol :#sValue
  −
    #sToProgram
  −
    wait 1.0
  −
    #sSetSymbol
  −
    forward :#scellwidth
  −
    #sSetMove
  −
    forward :#scellwidth
  −
    #sSetState
  −
    #sLog
  −
    #sToTape
  −
    #sWriteSymbol
  −
    #sNewCell
  −
    wait 1.0
  −
    make "#sstep sum :#sstep 1.0 ] ]
  −
end
  −
 
  −
 
  −
to #sToTape
  −
comment: Move turtle to current cell on tape
  −
tasetxy
  −
  sum :#sleftedge product :#scellwidth :#scell
  −
  :#stapey
  −
end
  −
 
  −
 
  −
to #sToProgram
  −
comment: Move Turtle to beginning of current program row to execute
  −
tasetxy
  −
  taminus :#sleftedge 3.0
  −
  taminus :#sprogramy product :#scellwidth sum :#ssymbol product 2.0 taminus :#sstate 1.0
  −
end
  −
 
  −
 
  −
to #sWriteCell
  −
 
  −
comment: Write current color to current cell, and move to next cell
  −
pendown
  −
forward 0.0
  −
penup
  −
forward :#scellwidth
  −
end
  −
 
  −
 
  −
to #sWriteSymbol
  −
comment: Write current color in cell without moving
  −
pendown
  −
forward 0.0
  −
penup
  −
end
  −
 
  −
 
  −
to #sReadPixel
  −
 
  −
comment: Read RGB values of pixel to stack, pop to variables
  −
keyboard
  −
make "#sR tapop
  −
make "#sG tapop
  −
make "#sB tapop
  −
end
  −
 
  −
 
  −
to #sSetValue
  −
comment: Find value of cell symbol from RGB numbers
  −
  ifelse not ( equal? :#sB 128.0 )
  −
  [  ifelse not ( equal? :#sR 128.0 )
  −
    [  ifelse not ( equal? :#sG 128.0 )
  −
    [  ifelse ( equal? :#sG 0.0 )
  −
    [  make "#sValue 0.0 ]
  −
    [ make "#sValue 1.0 ] ]
  −
  [ make "#sValue 3.0 ] ]
  −
  [ make "#sValue 4.0 ] ]
  −
[ make "#sValue 2.0 ]
  −
end
  −
 
  −
 
  −
to #sSetMove
  −
comment: Read next Move direction from program table
  −
#sReadPixel
  −
#sSetValue
  −
make "#smove :#sValue
  −
end
  −
 
  −
 
  −
to #sSetSymbol
  −
comment: Read next Symbol to write from program table
  −
#sReadPixel
  −
#sSetValue
  −
make "#ssymbol :#sValue
  −
ifelse ( equal? :#ssymbol 0.0 )
  −
  [  tasetpencolor 0 ]
  −
  [ tasetpencolor 20.0 ]
  −
end
  −
 
  −
 
  −
to #sSetState
  −
comment: Read next State from program table
  −
#sReadPixel
  −
#sSetValue
  −
make "#sstate :#sValue
  −
end
  −
 
  −
 
  −
to #sNewCell
  −
comment: Move left or right and set cell number of new location
  −
  ifelse ( equal? :#smove :#sright )
  −
  [ forward :#scellwidth
  −
    make "#scell sum :#scell 1.0 ]
  −
  [ back :#scellwidth
  −
    make "#scell taminus :#scell 1.0 ]
  −
end
  −
 
  −
 
  −
to #sLog
  −
comment: Write Step number, Symbol, Move, State, Cell number on new log line in black, saving and restoring
  −
comment: current position and current color
  −
make "#sx xcor
  −
make "#sy ycor
  −
tasetxy -300.0 taminus 200.0 product 20.0 :#sstep
  −
make "#scolor pencolor
  −
tasetpencolor 0
  −
label sentence ('box', "427)
  −
#sstep
  −
forward 30.0
  −
label sentence ('box', "339)
  −
#ssymbol
  −
forward 20.0
  −
label sentence ('box', "341)
  −
#smove
  −
forward 20.0
  −
label sentence ('box', "537)
  −
#sstate
  −
forward 20.0
  −
label sentence ('box', "562)
  −
#scell
  −
tasetpencolor :#scolor
  −
end
  −
</pre>
 
154

edits

Navigation menu