Skip to content

Instantly share code, notes, and snippets.

@joliss
Created December 26, 2013 00:29
Show Gist options
  • Save joliss/8128278 to your computer and use it in GitHub Desktop.
Save joliss/8128278 to your computer and use it in GitHub Desktop.
lines = 35
columns = 44
distance = (x1, y1, x2, y2) ->
Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
circleX = -1.5
circleY = -0.5
# radius = distance from treetop
circleRadius = distance(circleX, circleY, 0.5, 0) - 0.001
# trunk starts where circle intercepts y axis
trunkY = circleY + Math.sqrt(circleRadius * circleRadius - circleX * circleX)
baseStyling = 'background-color: #000;'
decorationStyling = 'color: #FFFFCC;'
branchStyling = 'color: #060;'
starStyling = 'color: #443'
trunkStyling = 'color: #822;'
characters = []
css = []
addBranchCharacter = ->
if Math.random() < 0.1 || y == 0
characters.push '%c*'
css.push baseStyling + decorationStyling
else
characters.push '%c*'
css.push baseStyling + branchStyling
addStemCharacter = ->
characters.push '%cO'
css.push baseStyling + trunkStyling
addSpaceCharacter = ->
if Math.random() < 0.04
characters.push '%c.'
css.push baseStyling + starStyling
else
characters.push '%c '
css.push baseStyling
for line in [-3..lines]
y = line / lines
for col in [-3..columns+3]
x = col / columns
if y < trunkY
if distance(x, y, circleX, circleY) > circleRadius and distance(x, y, 1 - circleX, circleY) > circleRadius
addBranchCharacter()
else
addSpaceCharacter()
else
if Math.abs(x - 0.5) < 0.05
addStemCharacter()
else
addSpaceCharacter()
characters.push '\n'
console.log.apply(console,[characters.join('')].concat(css))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment