How to resolve the algorithm Simple turtle graphics step by step in the Wren programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm Simple turtle graphics step by step in the Wren programming language
Table of Contents
Problem Statement
The first turtle graphic discussed in Mindstorms: Children, Computers, and Powerful Ideas by Seymour Papert is a simple drawing of a house. It is a square with a triangle on top for the roof. For a slightly more advanced audience, a more practical introduction to turtle graphics might be to draw a bar chart.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Simple turtle graphics step by step in the Wren programming language
Source code in the wren programming language
import "dome" for Window
import "graphics" for Canvas, Color
import "./turtle" for Turtle
class Main {
construct new(width, height) {
Window.resize(width, height)
Canvas.resize(width, height)
Window.title = "Simple turtle graphics"
_w = width
_h = height
}
init() {
Canvas.cls(Color.white)
_t = Turtle.new()
drawHouse(_w/4)
barChart([15, 10, 50, 35, 20], _w/3)
}
drawHouse(size) {
// save initial turtle position and direction
var saveX = _t.x
var saveY = _t.y
var saveD = _t.dir
_t.pen.width = 2
// draw house
_t.drawRect(_w/4, _h/2, size, size)
// draw roof
_t.right(30)
_t.walk(size)
_t.right(120)
_t.walk(size)
// draw door
var doorWidth = (size/4).floor
var doorHeight = (size/2).floor
_t.drawRect(_w/4 + doorWidth/2, _h/2 + doorHeight, doorWidth, doorHeight)
// draw window
var windWidth = (size/3).floor
var windHeight = (size/4).floor
_t.drawRect(_w/4 + size/2, _h/2 + size/2, windWidth, windHeight)
// restore initial turtle position and direction
_t.x = saveX
_t.y = saveY
_t.dir = saveD
}
// nums assumed to be all non-negative
barChart(nums, size) {
// save intial turtle position and direction
var saveX = _t.x
var saveY = _t.y
var saveD = _t.dir
// find maximum
var max = 0
for (n in nums) if (n > max) max = n
// scale to fit within a square with sides 'size' and draw chart
var barWidth = (size / nums.count).floor
var startX = _w / 2 + 20
var startY = _h / 2
for (i in 0...nums.count) {
var barHeight = (nums[i] * size / max).round
_t.drawRect(startX, startY - barHeight, barWidth, barHeight)
startX = startX + barWidth
}
// restore intial turtle position and direction
_t.x = saveX
_t.y = saveY
_t.dir = saveD
}
update() {}
draw(alpha) {}
}
var Game = Main.new(600, 600)
You may also check:How to resolve the algorithm Ray-casting algorithm step by step in the C++ programming language
You may also check:How to resolve the algorithm Sorting algorithms/Stooge sort step by step in the Kotlin programming language
You may also check:How to resolve the algorithm Successive prime differences step by step in the Mathematica/Wolfram Language programming language
You may also check:How to resolve the algorithm Caesar cipher step by step in the Sinclair ZX81 BASIC programming language
You may also check:How to resolve the algorithm Tokenize a string with escaping step by step in the Common Lisp programming language