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