86 lines
2.1 KiB
Text
86 lines
2.1 KiB
Text
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)
|