
Rocket Orbit
This simple commented project allows for the introduction of 3D movements and shapes (the rocket procedure) including a basic introduction to repeat, the creation of turtle models and the use of premodel, an introduction to the orbit primitives and the use of a new worker (thread) for orbiting the camera!
TO rocket
forward 70
down 90
;these two commands orient the rocket better for use as
;a turtle model
setfillcolor yellow
;yellow is a function that returns the value 13
;it is a shortcut used for convenience in learning
;as is red, green, blue etc.
cylinder 20 120 10
;cylinder takes
rollright 180
;flip the turtle over to create the nose cone
cone 20 50 10
lower 50
;lower the turtle to create the 'nose'
setfillcolor red
icosphere 3
setfillcolor orange
ra 50 + 120
;ra is short for raise
rr 180
;rr is shorthand for rollright
cutcone 20 30 30 10
;move the turtle to the bottom of the rocket and
;create the tail
up 90 bk 30.1
;bk is short for back
setfillcolor white
repeat 2 [cylinderslice 40 5 20 10 rr 90]
;create the fins
setfillcolor red
dn 90 sl 10 bk 10 cylinder 10 10 10
;sl is short for slideleft
fd 20 cylinder 10 10 10 sr 20
;fd is short for forward
;sr is short for slideright
cylinder 10 10 10 bk 20 cylinder 10 10 10
;create the jets
END
TO createmodel
clearscreen
;cs is short for clearscreen
begintag "rocketmodel
;tags are used to create turtle models
;among other uses. You can also use them to
;show or hide parts of the 'turtle track'
rocket
;run the rocket procedure
endtag
;close the tag
newmodel "rocket "rocketmodel
;create a new model called 'rocket' based on the
;rocketmodel tag
setmodel "rocket
;set the turtle's model to the rocket model
clearscreen
;clear away the tagged model, leaving only the
;turtle
END
TO starfield :number
hideturtle
norender
;suspend rendering of the scene until we're done drawing the stars
penup
repeat :number [
home
randomvectors randomfillcolor
;randomvectors orients the turtle randomly
;while randomfillcolor sets a random fill color
forward 1000 + random 1000
;move forward a random distance
up 90
;orient the turtle up in preparation of creating a spot
;because the spot is created around and below the turtle
spot 10 + random 10
;create a randomly-sized spot
]
home
showturtle
render
;resume rendering
END
TO main
reset
;resets turtleSpaces to a default state
createmodel
;execute the createmodel procedure
starfield 200
;execute the starfield procedure, passing the parameter value 200
setmodelscale 0.5
;decrease the size of the turtle model to half normal
setpremodel [lt 90]
;inserts 'left 90' into the turtle track between the scene
;and the turtle model ('pre' the model)
setfillcolor 14
;sets the fillcolor to 14. Type 'showcolors' or 'sc' in the console
;to see a list of default colors. You can also definecolor your own!
ico 50
;create an icosphere (the planet)
penup
dropanchor
;set the 'anchor point', or the point the turtle 'orbits' around
;using the orbit commands, to the current turtle position
pullout 80
;pull away 80 turtle units from the anchor point
snappy:newworker [forever [orbitleft 0.1]]
;tell snappy the camera turtle to create a new routine or thread
;that forever orbits around the scene to its left one tenth of
;a degree at a time
make "rotation 0
;define a container (variable) called 'rotation'
;and set it to 0. We're going to use it to keep track of the
;rotation of the rocket
forever [
inc "rotation
;same as make "rotation :rotation + 1
;there is also dec (decrement)
setpremodel {"lt 90 "rollright :rotation % 360}
;curly braces indicate a 'softlist', a list that is evaluated
;at runtime. In this case, so that we can have a dynamic
;rotation value we pass to setpremodel
;% is shorthand for modulus
orbitleft 1
;orbit the rocket one degree to the left
wait 1
;wait one sixtieth of a second
]
END









