Guaranteed to be correct twice a day.
Log in to post a comment.
Canvas.setpenopacity(1);
const digitHeight = 40;
const digitWeight = 4;
const digitSpacing = 2*digitWeight;
const halfWeight = digitWeight/2;
const step = 0.05;
const segmentLength = (digitHeight-digitWeight-4*halfWeight)/2;
const digitWidth = 4*halfWeight + segmentLength + digitSpacing;
const semicolonWidth = 2*halfWeight+2*digitWeight;
Turtle.prototype.drawSegment = function() {
this.pendown();
for (let i = 0; i <= segmentLength; i+= step) {
const left = this.clone();
const right = this.clone();
const angle = i < segmentLength/2 ? 45 : 135;
left.left(angle);
left.forward(halfWeight);
right.right(angle);
right.forward(halfWeight);
this.forward(step);
}
this.penup();
}
Turtle.prototype.skipSegment = function() {
this.penup();
this.forward(segmentLength);
}
Turtle.prototype.drawDigit = function(d) {
const x = this.x();
const y = this.y();
d = parseInt(d);
this.penup();
this.forward(halfWeight);
([0, 2, 3, 5, 6, 7, 8, 9].indexOf(d)!==-1) ? this.drawSegment() : this.skipSegment();
this.forward(halfWeight);
this.right(90);
this.forward(halfWeight);
([0, 1, 2, 3, 4, 7, 8, 9].indexOf(d)!==-1) ? this.drawSegment() : this.skipSegment();
this.forward(halfWeight);
this.forward(halfWeight);
([0, 1, 3, 4, 5, 6, 7, 8, 9].indexOf(d)!==-1) ? this.drawSegment() : this.skipSegment();
this.forward(halfWeight);
this.right(90);
this.forward(halfWeight);
([0, 2, 3, 5, 6, 8, 9].indexOf(d)!==-1) ? this.drawSegment() : this.skipSegment();
this.forward(halfWeight);
this.right(90);
this.forward(halfWeight);
([0, 2, 6, 8].indexOf(d)!==-1) ? this.drawSegment() : this.skipSegment();
this.forward(halfWeight);
this.forward(halfWeight);
([0, 4, 5, 6, 8, 9].indexOf(d)!==-1) ? this.drawSegment() : this.skipSegment();
this.backward(segmentLength+halfWeight);
this.right(90);
this.forward(halfWeight);
([2, 3, 4, 5, 6, 8, 9].indexOf(d)!==-1) ? this.drawSegment() : this.skipSegment();
this.goto(x, y);
this.forward(digitWidth);
}
Turtle.prototype.drawSemicolon = function() {
const x = this.x();
const y = this.y();
const h = this.h();
this.penup();
this.forward(2*halfWeight);
this.right(90);
this.forward(segmentLength);
for (let i = 0; i < halfWeight; i+=step) {
this.pendown();
this.circle(halfWeight-i);
this.penup();
this.right(90);
this.forward(step/2);
this.left(90);
}
this.left(90);
this.forward(halfWeight/2);
this.right(90);
this.forward(segmentLength*0.75);
for (let i = 0; i < halfWeight; i+=step) {
this.pendown();
this.circle(halfWeight-i);
this.penup();
this.right(90);
this.forward(step/2);
this.left(90);
}
this.goto(x, y);
this.seth(h);
this.forward(semicolonWidth);
}
Turtle.prototype.drawCurrentTime = function() {
const now = new Date();
const hours = now.getHours();
const minutes = now.getMinutes();
const hs = hours < 10 ? "0" + hours : "" + hours;
const ms = minutes < 10 ? "0" + minutes : "" + minutes;
hs.split('').map(d => this.drawDigit(d));
this.drawSemicolon();
ms.split('').map(d => this.drawDigit(d));
}
const turtle = new Turtle();
turtle.penup();
turtle.goto(-2*digitWidth, -digitHeight*0.5+halfWeight);
turtle.pendown();
function walk(i) {
turtle.drawCurrentTime();
return false;
}