Skip to content

Instantly share code, notes, and snippets.

@antfarm
Created January 9, 2026 21:48
Show Gist options
  • Select an option

  • Save antfarm/bf33f22436aed18d249e9aa5410dd93d to your computer and use it in GitHub Desktop.

Select an option

Save antfarm/bf33f22436aed18d249e9aa5410dd93d to your computer and use it in GitHub Desktop.
CODE:
(define env "grid")
(define size 32)
(define frame-rate 30)
(define columns size)
(define rows size)
(define (setup-grid)
(for y 0 (- rows 1)
(set-cell "wall" 0 y true)
(set-cell "dx" 0 y 1)
(set-cell "wall" (- columns 1) y true)
(set-cell "dx" (- columns 1) y -1))
(for x 0 (- columns 1)
(set-cell "wall" x 0 true)
(set-cell "dy" x 0 1)
(set-cell "out" x (- rows 1) true))
(let ((center (/ rows 2))
(paddle-start (- center 2))
(paddle-end (+ center 2)))
(for x paddle-start paddle-end
(set-cell "paddle" x (- rows 1) true)))
(let ((center (/ rows 2))
(paddle-start (- center 2))
(ball-x (+ paddle-start (random 5)))
(dx (random-choice -1 1)))
(set-cell "ball" ball-x (- rows 2) (list dx -1))))
(define (update-grid)
(let ((balls (get-all-x-y "ball")))
(if (> (length balls) 0)
(let ((ball (first balls))
(ball-x (first ball))
(ball-y (second ball))
(ball-data (get-cell "ball" ball-x ball-y))
(dx (first ball-data))
(dy (second ball-data))
(new-x (+ ball-x dx))
(new-y (+ ball-y dy)))
(delete-cell "ball" ball-x ball-y)
(cond
((get-cell "wall" new-x new-y)
(let ((wall-dx (get-or-cell "dx" new-x new-y dx))
(wall-dy (get-or-cell "dy" new-x new-y dy)))
(set-cell "ball" (+ ball-x wall-dx) (+ ball-y wall-dy) (list wall-dx wall-dy))))
((get-cell "paddle" ball-x new-y)
(let ((new-dx (random-choice -1 1)))
(set-cell "ball" (+ ball-x new-dx) (- ball-y 1) (list new-dx -1))))
((get-cell "out" new-x new-y)
(set-cell "ball-out" new-x new-y (list 0 0)))
else
(set-cell "ball" new-x new-y (list dx dy)))))))
(define (color-for-cell x y)
(cond
((get-cell "wall" x y)
(color 1 1 1 1))
((get-cell "ball-out" x y)
(color 1 0 0 1))
((get-cell "ball" x y)
(color 0.2 0.9 0 1))
((get-cell "paddle" x y)
(color 1 0.8 0.2 1))
else
(color 0 0 0 0)))
(define (info-for-cell x y)
(let ((data (get-cell-data x y)))
(if (or (not data) (= 0 (length (keys data))))
(concat "[" x "|" y "] {}")
(concat "[" x "|" y "] " (stringify data)))))
(define (handle-cell-tapped x y)
(let ((paddle-left (min-x "paddle"))
(paddle-right (max-x "paddle"))
(bottom (- rows 1)))
(if (< x (/ columns 2))
(if (> paddle-left 1)
(do
(delete-cell "paddle" paddle-right bottom)
(set-cell "paddle" (- paddle-left 1) bottom true))))
(if (>= x (/ columns 2))
(if (< paddle-right (- columns 2))
(do
(delete-cell "paddle" paddle-left bottom)
(set-cell "paddle" (+ paddle-right 1) bottom true))))))
TOKENS:
[TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 1, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 1, column: 2)), TouchCode.TouchScript.Token.symbol("env", TouchCode.TouchScript.Token.Position(line: 1, column: 9)), TouchCode.TouchScript.Token.string("grid", TouchCode.TouchScript.Token.Position(line: 1, column: 13)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 1, column: 19)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 3, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 3, column: 2)), TouchCode.TouchScript.Token.symbol("size", TouchCode.TouchScript.Token.Position(line: 3, column: 9)), TouchCode.TouchScript.Token.number(32.0, TouchCode.TouchScript.Token.Position(line: 3, column: 14)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 3, column: 16)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 5, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 5, column: 2)), TouchCode.TouchScript.Token.symbol("frame-rate", TouchCode.TouchScript.Token.Position(line: 5, column: 9)), TouchCode.TouchScript.Token.number(30.0, TouchCode.TouchScript.Token.Position(line: 5, column: 20)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 5, column: 22)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 7, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 7, column: 2)), TouchCode.TouchScript.Token.symbol("columns", TouchCode.TouchScript.Token.Position(line: 7, column: 9)), TouchCode.TouchScript.Token.symbol("size", TouchCode.TouchScript.Token.Position(line: 7, column: 17)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 7, column: 21)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 9, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 9, column: 2)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 9, column: 9)), TouchCode.TouchScript.Token.symbol("size", TouchCode.TouchScript.Token.Position(line: 9, column: 14)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 9, column: 18)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 11, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 11, column: 2)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 11, column: 9)), TouchCode.TouchScript.Token.symbol("setup-grid", TouchCode.TouchScript.Token.Position(line: 11, column: 10)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 11, column: 20)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 12, column: 3)), TouchCode.TouchScript.Token.symbol("for", TouchCode.TouchScript.Token.Position(line: 12, column: 4)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 12, column: 8)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 12, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 12, column: 12)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 12, column: 13)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 12, column: 15)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 12, column: 20)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 12, column: 21)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 13, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 13, column: 6)), TouchCode.TouchScript.Token.string("wall", TouchCode.TouchScript.Token.Position(line: 13, column: 15)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 13, column: 22)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 13, column: 24)), TouchCode.TouchScript.Token.bool(true, TouchCode.TouchScript.Token.Position(line: 13, column: 26)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 13, column: 30)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 14, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 14, column: 6)), TouchCode.TouchScript.Token.string("dx", TouchCode.TouchScript.Token.Position(line: 14, column: 15)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 14, column: 20)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 14, column: 22)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 14, column: 24)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 14, column: 25)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 15, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 15, column: 6)), TouchCode.TouchScript.Token.string("wall", TouchCode.TouchScript.Token.Position(line: 15, column: 15)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 15, column: 22)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 15, column: 23)), TouchCode.TouchScript.Token.symbol("columns", TouchCode.TouchScript.Token.Position(line: 15, column: 25)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 15, column: 33)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 15, column: 34)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 15, column: 36)), TouchCode.TouchScript.Token.bool(true, TouchCode.TouchScript.Token.Position(line: 15, column: 38)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 15, column: 42)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 16, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 16, column: 6)), TouchCode.TouchScript.Token.string("dx", TouchCode.TouchScript.Token.Position(line: 16, column: 15)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 16, column: 20)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 16, column: 21)), TouchCode.TouchScript.Token.symbol("columns", TouchCode.TouchScript.Token.Position(line: 16, column: 23)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 16, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 16, column: 32)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 16, column: 34)), TouchCode.TouchScript.Token.number(-1.0, TouchCode.TouchScript.Token.Position(line: 16, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 16, column: 38)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 16, column: 39)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 17, column: 3)), TouchCode.TouchScript.Token.symbol("for", TouchCode.TouchScript.Token.Position(line: 17, column: 4)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 17, column: 8)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 17, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 17, column: 12)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 17, column: 13)), TouchCode.TouchScript.Token.symbol("columns", TouchCode.TouchScript.Token.Position(line: 17, column: 15)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 17, column: 23)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 17, column: 24)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 18, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 18, column: 6)), TouchCode.TouchScript.Token.string("wall", TouchCode.TouchScript.Token.Position(line: 18, column: 15)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 18, column: 22)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 18, column: 24)), TouchCode.TouchScript.Token.bool(true, TouchCode.TouchScript.Token.Position(line: 18, column: 26)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 18, column: 30)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 19, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 19, column: 6)), TouchCode.TouchScript.Token.string("dy", TouchCode.TouchScript.Token.Position(line: 19, column: 15)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 19, column: 20)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 19, column: 22)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 19, column: 24)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 19, column: 25)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 20, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 20, column: 6)), TouchCode.TouchScript.Token.string("out", TouchCode.TouchScript.Token.Position(line: 20, column: 15)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 20, column: 21)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 20, column: 23)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 20, column: 24)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 20, column: 26)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 20, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 20, column: 32)), TouchCode.TouchScript.Token.bool(true, TouchCode.TouchScript.Token.Position(line: 20, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 20, column: 38)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 20, column: 39)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 21, column: 3)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 21, column: 4)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 21, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 21, column: 9)), TouchCode.TouchScript.Token.symbol("center", TouchCode.TouchScript.Token.Position(line: 21, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 21, column: 23)), TouchCode.TouchScript.Token.symbol("/", TouchCode.TouchScript.Token.Position(line: 21, column: 24)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 21, column: 26)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 21, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 21, column: 32)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 21, column: 33)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 22, column: 9)), TouchCode.TouchScript.Token.symbol("paddle-start", TouchCode.TouchScript.Token.Position(line: 22, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 22, column: 23)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 22, column: 24)), TouchCode.TouchScript.Token.symbol("center", TouchCode.TouchScript.Token.Position(line: 22, column: 26)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 22, column: 33)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 22, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 22, column: 35)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 23, column: 9)), TouchCode.TouchScript.Token.symbol("paddle-end", TouchCode.TouchScript.Token.Position(line: 23, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 23, column: 23)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 23, column: 24)), TouchCode.TouchScript.Token.symbol("center", TouchCode.TouchScript.Token.Position(line: 23, column: 26)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 23, column: 33)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 23, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 23, column: 35)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 23, column: 36)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 24, column: 5)), TouchCode.TouchScript.Token.symbol("for", TouchCode.TouchScript.Token.Position(line: 24, column: 6)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 24, column: 10)), TouchCode.TouchScript.Token.symbol("paddle-start", TouchCode.TouchScript.Token.Position(line: 24, column: 12)), TouchCode.TouchScript.Token.symbol("paddle-end", TouchCode.TouchScript.Token.Position(line: 24, column: 25)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 25, column: 7)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 25, column: 8)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 25, column: 17)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 25, column: 26)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 25, column: 28)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 25, column: 29)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 25, column: 31)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 25, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 25, column: 37)), TouchCode.TouchScript.Token.bool(true, TouchCode.TouchScript.Token.Position(line: 25, column: 39)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 25, column: 43)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 25, column: 44)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 25, column: 45)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 26, column: 3)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 26, column: 4)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 26, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 26, column: 9)), TouchCode.TouchScript.Token.symbol("center", TouchCode.TouchScript.Token.Position(line: 26, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 26, column: 23)), TouchCode.TouchScript.Token.symbol("/", TouchCode.TouchScript.Token.Position(line: 26, column: 24)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 26, column: 26)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 26, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 26, column: 32)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 26, column: 33)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 27, column: 9)), TouchCode.TouchScript.Token.symbol("paddle-start", TouchCode.TouchScript.Token.Position(line: 27, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 27, column: 23)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 27, column: 24)), TouchCode.TouchScript.Token.symbol("center", TouchCode.TouchScript.Token.Position(line: 27, column: 26)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 27, column: 33)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 27, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 27, column: 35)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 28, column: 9)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 28, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 28, column: 23)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 28, column: 24)), TouchCode.TouchScript.Token.symbol("paddle-start", TouchCode.TouchScript.Token.Position(line: 28, column: 26)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 28, column: 39)), TouchCode.TouchScript.Token.symbol("random", TouchCode.TouchScript.Token.Position(line: 28, column: 40)), TouchCode.TouchScript.Token.number(5.0, TouchCode.TouchScript.Token.Position(line: 28, column: 47)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 28, column: 48)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 28, column: 49)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 28, column: 50)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 29, column: 9)), TouchCode.TouchScript.Token.symbol("dx", TouchCode.TouchScript.Token.Position(line: 29, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 29, column: 23)), TouchCode.TouchScript.Token.symbol("random-choice", TouchCode.TouchScript.Token.Position(line: 29, column: 24)), TouchCode.TouchScript.Token.number(-1.0, TouchCode.TouchScript.Token.Position(line: 29, column: 38)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 29, column: 41)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 29, column: 42)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 29, column: 43)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 29, column: 44)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 30, column: 5)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 30, column: 6)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 30, column: 15)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 30, column: 22)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 30, column: 29)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 30, column: 30)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 30, column: 32)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 30, column: 37)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 30, column: 38)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 30, column: 40)), TouchCode.TouchScript.Token.symbol("list", TouchCode.TouchScript.Token.Position(line: 30, column: 41)), TouchCode.TouchScript.Token.symbol("dx", TouchCode.TouchScript.Token.Position(line: 30, column: 46)), TouchCode.TouchScript.Token.number(-1.0, TouchCode.TouchScript.Token.Position(line: 30, column: 49)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 30, column: 51)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 30, column: 52)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 30, column: 53)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 30, column: 54)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 32, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 32, column: 2)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 32, column: 9)), TouchCode.TouchScript.Token.symbol("update-grid", TouchCode.TouchScript.Token.Position(line: 32, column: 10)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 32, column: 21)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 33, column: 3)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 33, column: 4)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 33, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 33, column: 9)), TouchCode.TouchScript.Token.symbol("balls", TouchCode.TouchScript.Token.Position(line: 33, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 33, column: 16)), TouchCode.TouchScript.Token.symbol("get-all-x-y", TouchCode.TouchScript.Token.Position(line: 33, column: 17)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 33, column: 29)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 33, column: 35)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 33, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 33, column: 37)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 34, column: 5)), TouchCode.TouchScript.Token.symbol("if", TouchCode.TouchScript.Token.Position(line: 34, column: 6)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 34, column: 9)), TouchCode.TouchScript.Token.symbol(">", TouchCode.TouchScript.Token.Position(line: 34, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 34, column: 12)), TouchCode.TouchScript.Token.symbol("length", TouchCode.TouchScript.Token.Position(line: 34, column: 13)), TouchCode.TouchScript.Token.symbol("balls", TouchCode.TouchScript.Token.Position(line: 34, column: 20)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 34, column: 25)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 34, column: 27)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 34, column: 28)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 35, column: 7)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 35, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 35, column: 12)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 35, column: 13)), TouchCode.TouchScript.Token.symbol("ball", TouchCode.TouchScript.Token.Position(line: 35, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 35, column: 24)), TouchCode.TouchScript.Token.symbol("first", TouchCode.TouchScript.Token.Position(line: 35, column: 25)), TouchCode.TouchScript.Token.symbol("balls", TouchCode.TouchScript.Token.Position(line: 35, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 35, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 35, column: 37)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 36, column: 13)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 36, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 36, column: 24)), TouchCode.TouchScript.Token.symbol("first", TouchCode.TouchScript.Token.Position(line: 36, column: 25)), TouchCode.TouchScript.Token.symbol("ball", TouchCode.TouchScript.Token.Position(line: 36, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 36, column: 35)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 36, column: 36)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 37, column: 13)), TouchCode.TouchScript.Token.symbol("ball-y", TouchCode.TouchScript.Token.Position(line: 37, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 37, column: 24)), TouchCode.TouchScript.Token.symbol("second", TouchCode.TouchScript.Token.Position(line: 37, column: 25)), TouchCode.TouchScript.Token.symbol("ball", TouchCode.TouchScript.Token.Position(line: 37, column: 32)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 37, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 37, column: 37)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 38, column: 13)), TouchCode.TouchScript.Token.symbol("ball-data", TouchCode.TouchScript.Token.Position(line: 38, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 38, column: 24)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 38, column: 25)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 38, column: 34)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 38, column: 41)), TouchCode.TouchScript.Token.symbol("ball-y", TouchCode.TouchScript.Token.Position(line: 38, column: 48)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 38, column: 54)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 38, column: 55)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 39, column: 13)), TouchCode.TouchScript.Token.symbol("dx", TouchCode.TouchScript.Token.Position(line: 39, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 39, column: 24)), TouchCode.TouchScript.Token.symbol("first", TouchCode.TouchScript.Token.Position(line: 39, column: 25)), TouchCode.TouchScript.Token.symbol("ball-data", TouchCode.TouchScript.Token.Position(line: 39, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 39, column: 40)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 39, column: 41)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 40, column: 13)), TouchCode.TouchScript.Token.symbol("dy", TouchCode.TouchScript.Token.Position(line: 40, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 40, column: 24)), TouchCode.TouchScript.Token.symbol("second", TouchCode.TouchScript.Token.Position(line: 40, column: 25)), TouchCode.TouchScript.Token.symbol("ball-data", TouchCode.TouchScript.Token.Position(line: 40, column: 32)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 40, column: 41)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 40, column: 42)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 41, column: 13)), TouchCode.TouchScript.Token.symbol("new-x", TouchCode.TouchScript.Token.Position(line: 41, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 41, column: 24)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 41, column: 25)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 41, column: 27)), TouchCode.TouchScript.Token.symbol("dx", TouchCode.TouchScript.Token.Position(line: 41, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 41, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 41, column: 37)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 42, column: 13)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 42, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 42, column: 24)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 42, column: 25)), TouchCode.TouchScript.Token.symbol("ball-y", TouchCode.TouchScript.Token.Position(line: 42, column: 27)), TouchCode.TouchScript.Token.symbol("dy", TouchCode.TouchScript.Token.Position(line: 42, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 42, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 42, column: 37)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 42, column: 38)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 43, column: 9)), TouchCode.TouchScript.Token.symbol("delete-cell", TouchCode.TouchScript.Token.Position(line: 43, column: 10)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 43, column: 22)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 43, column: 29)), TouchCode.TouchScript.Token.symbol("ball-y", TouchCode.TouchScript.Token.Position(line: 43, column: 36)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 43, column: 42)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 44, column: 9)), TouchCode.TouchScript.Token.symbol("cond", TouchCode.TouchScript.Token.Position(line: 44, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 45, column: 11)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 45, column: 12)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 45, column: 13)), TouchCode.TouchScript.Token.string("wall", TouchCode.TouchScript.Token.Position(line: 45, column: 22)), TouchCode.TouchScript.Token.symbol("new-x", TouchCode.TouchScript.Token.Position(line: 45, column: 29)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 45, column: 35)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 45, column: 40)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 46, column: 13)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 46, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 46, column: 18)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 46, column: 19)), TouchCode.TouchScript.Token.symbol("wall-dx", TouchCode.TouchScript.Token.Position(line: 46, column: 20)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 46, column: 28)), TouchCode.TouchScript.Token.symbol("get-or-cell", TouchCode.TouchScript.Token.Position(line: 46, column: 29)), TouchCode.TouchScript.Token.string("dx", TouchCode.TouchScript.Token.Position(line: 46, column: 41)), TouchCode.TouchScript.Token.symbol("new-x", TouchCode.TouchScript.Token.Position(line: 46, column: 46)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 46, column: 52)), TouchCode.TouchScript.Token.symbol("dx", TouchCode.TouchScript.Token.Position(line: 46, column: 58)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 46, column: 60)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 46, column: 61)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 47, column: 19)), TouchCode.TouchScript.Token.symbol("wall-dy", TouchCode.TouchScript.Token.Position(line: 47, column: 20)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 47, column: 28)), TouchCode.TouchScript.Token.symbol("get-or-cell", TouchCode.TouchScript.Token.Position(line: 47, column: 29)), TouchCode.TouchScript.Token.string("dy", TouchCode.TouchScript.Token.Position(line: 47, column: 41)), TouchCode.TouchScript.Token.symbol("new-x", TouchCode.TouchScript.Token.Position(line: 47, column: 46)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 47, column: 52)), TouchCode.TouchScript.Token.symbol("dy", TouchCode.TouchScript.Token.Position(line: 47, column: 58)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 47, column: 60)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 47, column: 61)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 47, column: 62)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 48, column: 15)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 48, column: 16)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 48, column: 25)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 48, column: 32)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 48, column: 33)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 48, column: 35)), TouchCode.TouchScript.Token.symbol("wall-dx", TouchCode.TouchScript.Token.Position(line: 48, column: 42)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 48, column: 49)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 48, column: 51)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 48, column: 52)), TouchCode.TouchScript.Token.symbol("ball-y", TouchCode.TouchScript.Token.Position(line: 48, column: 54)), TouchCode.TouchScript.Token.symbol("wall-dy", TouchCode.TouchScript.Token.Position(line: 48, column: 61)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 48, column: 68)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 48, column: 70)), TouchCode.TouchScript.Token.symbol("list", TouchCode.TouchScript.Token.Position(line: 48, column: 71)), TouchCode.TouchScript.Token.symbol("wall-dx", TouchCode.TouchScript.Token.Position(line: 48, column: 76)), TouchCode.TouchScript.Token.symbol("wall-dy", TouchCode.TouchScript.Token.Position(line: 48, column: 84)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 48, column: 91)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 48, column: 92)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 48, column: 93)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 48, column: 94)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 49, column: 11)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 49, column: 12)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 49, column: 13)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 49, column: 22)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 49, column: 31)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 49, column: 38)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 49, column: 43)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 50, column: 13)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 50, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 50, column: 18)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 50, column: 19)), TouchCode.TouchScript.Token.symbol("new-dx", TouchCode.TouchScript.Token.Position(line: 50, column: 20)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 50, column: 27)), TouchCode.TouchScript.Token.symbol("random-choice", TouchCode.TouchScript.Token.Position(line: 50, column: 28)), TouchCode.TouchScript.Token.number(-1.0, TouchCode.TouchScript.Token.Position(line: 50, column: 42)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 50, column: 45)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 50, column: 46)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 50, column: 47)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 50, column: 48)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 51, column: 15)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 51, column: 16)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 51, column: 25)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 51, column: 32)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 51, column: 33)), TouchCode.TouchScript.Token.symbol("ball-x", TouchCode.TouchScript.Token.Position(line: 51, column: 35)), TouchCode.TouchScript.Token.symbol("new-dx", TouchCode.TouchScript.Token.Position(line: 51, column: 42)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 51, column: 48)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 51, column: 50)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 51, column: 51)), TouchCode.TouchScript.Token.symbol("ball-y", TouchCode.TouchScript.Token.Position(line: 51, column: 53)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 51, column: 60)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 51, column: 61)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 51, column: 63)), TouchCode.TouchScript.Token.symbol("list", TouchCode.TouchScript.Token.Position(line: 51, column: 64)), TouchCode.TouchScript.Token.symbol("new-dx", TouchCode.TouchScript.Token.Position(line: 51, column: 69)), TouchCode.TouchScript.Token.number(-1.0, TouchCode.TouchScript.Token.Position(line: 51, column: 76)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 51, column: 78)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 51, column: 79)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 51, column: 80)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 51, column: 81)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 52, column: 11)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 52, column: 12)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 52, column: 13)), TouchCode.TouchScript.Token.string("out", TouchCode.TouchScript.Token.Position(line: 52, column: 22)), TouchCode.TouchScript.Token.symbol("new-x", TouchCode.TouchScript.Token.Position(line: 52, column: 28)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 52, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 52, column: 39)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 53, column: 13)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 53, column: 14)), TouchCode.TouchScript.Token.string("ball-out", TouchCode.TouchScript.Token.Position(line: 53, column: 23)), TouchCode.TouchScript.Token.symbol("new-x", TouchCode.TouchScript.Token.Position(line: 53, column: 34)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 53, column: 40)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 53, column: 46)), TouchCode.TouchScript.Token.symbol("list", TouchCode.TouchScript.Token.Position(line: 53, column: 47)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 53, column: 52)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 53, column: 54)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 53, column: 55)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 53, column: 56)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 53, column: 57)), TouchCode.TouchScript.Token.symbol("else", TouchCode.TouchScript.Token.Position(line: 54, column: 11)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 55, column: 13)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 55, column: 14)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 55, column: 23)), TouchCode.TouchScript.Token.symbol("new-x", TouchCode.TouchScript.Token.Position(line: 55, column: 30)), TouchCode.TouchScript.Token.symbol("new-y", TouchCode.TouchScript.Token.Position(line: 55, column: 36)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 55, column: 42)), TouchCode.TouchScript.Token.symbol("list", TouchCode.TouchScript.Token.Position(line: 55, column: 43)), TouchCode.TouchScript.Token.symbol("dx", TouchCode.TouchScript.Token.Position(line: 55, column: 48)), TouchCode.TouchScript.Token.symbol("dy", TouchCode.TouchScript.Token.Position(line: 55, column: 51)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 55, column: 53)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 55, column: 54)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 55, column: 55)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 55, column: 56)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 55, column: 57)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 55, column: 58)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 55, column: 59)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 57, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 57, column: 2)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 57, column: 9)), TouchCode.TouchScript.Token.symbol("color-for-cell", TouchCode.TouchScript.Token.Position(line: 57, column: 10)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 57, column: 25)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 57, column: 27)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 57, column: 28)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 58, column: 3)), TouchCode.TouchScript.Token.symbol("cond", TouchCode.TouchScript.Token.Position(line: 58, column: 4)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 59, column: 5)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 59, column: 6)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 59, column: 7)), TouchCode.TouchScript.Token.string("wall", TouchCode.TouchScript.Token.Position(line: 59, column: 16)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 59, column: 23)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 59, column: 25)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 59, column: 26)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 60, column: 7)), TouchCode.TouchScript.Token.symbol("color", TouchCode.TouchScript.Token.Position(line: 60, column: 8)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 60, column: 14)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 60, column: 16)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 60, column: 18)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 60, column: 20)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 60, column: 21)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 60, column: 22)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 61, column: 5)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 61, column: 6)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 61, column: 7)), TouchCode.TouchScript.Token.string("ball-out", TouchCode.TouchScript.Token.Position(line: 61, column: 16)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 61, column: 27)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 61, column: 29)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 61, column: 30)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 62, column: 7)), TouchCode.TouchScript.Token.symbol("color", TouchCode.TouchScript.Token.Position(line: 62, column: 8)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 62, column: 14)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 62, column: 16)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 62, column: 18)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 62, column: 20)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 62, column: 21)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 62, column: 22)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 63, column: 5)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 63, column: 6)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 63, column: 7)), TouchCode.TouchScript.Token.string("ball", TouchCode.TouchScript.Token.Position(line: 63, column: 16)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 63, column: 23)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 63, column: 25)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 63, column: 26)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 64, column: 7)), TouchCode.TouchScript.Token.symbol("color", TouchCode.TouchScript.Token.Position(line: 64, column: 8)), TouchCode.TouchScript.Token.number(0.2, TouchCode.TouchScript.Token.Position(line: 64, column: 14)), TouchCode.TouchScript.Token.number(0.9, TouchCode.TouchScript.Token.Position(line: 64, column: 18)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 64, column: 22)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 64, column: 24)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 64, column: 25)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 64, column: 26)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 65, column: 5)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 65, column: 6)), TouchCode.TouchScript.Token.symbol("get-cell", TouchCode.TouchScript.Token.Position(line: 65, column: 7)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 65, column: 16)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 65, column: 25)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 65, column: 27)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 65, column: 28)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 66, column: 7)), TouchCode.TouchScript.Token.symbol("color", TouchCode.TouchScript.Token.Position(line: 66, column: 8)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 66, column: 14)), TouchCode.TouchScript.Token.number(0.8, TouchCode.TouchScript.Token.Position(line: 66, column: 16)), TouchCode.TouchScript.Token.number(0.2, TouchCode.TouchScript.Token.Position(line: 66, column: 20)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 66, column: 24)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 66, column: 25)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 66, column: 26)), TouchCode.TouchScript.Token.symbol("else", TouchCode.TouchScript.Token.Position(line: 67, column: 5)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 68, column: 7)), TouchCode.TouchScript.Token.symbol("color", TouchCode.TouchScript.Token.Position(line: 68, column: 8)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 68, column: 14)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 68, column: 16)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 68, column: 18)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 68, column: 20)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 68, column: 21)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 68, column: 22)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 68, column: 23)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 70, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 70, column: 2)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 70, column: 9)), TouchCode.TouchScript.Token.symbol("info-for-cell", TouchCode.TouchScript.Token.Position(line: 70, column: 10)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 70, column: 24)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 70, column: 26)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 70, column: 27)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 71, column: 3)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 71, column: 4)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 71, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 71, column: 9)), TouchCode.TouchScript.Token.symbol("data", TouchCode.TouchScript.Token.Position(line: 71, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 71, column: 15)), TouchCode.TouchScript.Token.symbol("get-cell-data", TouchCode.TouchScript.Token.Position(line: 71, column: 16)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 71, column: 30)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 71, column: 32)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 71, column: 33)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 71, column: 34)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 71, column: 35)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 72, column: 5)), TouchCode.TouchScript.Token.symbol("if", TouchCode.TouchScript.Token.Position(line: 72, column: 6)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 72, column: 9)), TouchCode.TouchScript.Token.symbol("or", TouchCode.TouchScript.Token.Position(line: 72, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 72, column: 13)), TouchCode.TouchScript.Token.symbol("not", TouchCode.TouchScript.Token.Position(line: 72, column: 14)), TouchCode.TouchScript.Token.symbol("data", TouchCode.TouchScript.Token.Position(line: 72, column: 18)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 72, column: 22)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 72, column: 24)), TouchCode.TouchScript.Token.symbol("=", TouchCode.TouchScript.Token.Position(line: 72, column: 25)), TouchCode.TouchScript.Token.number(0.0, TouchCode.TouchScript.Token.Position(line: 72, column: 27)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 72, column: 29)), TouchCode.TouchScript.Token.symbol("length", TouchCode.TouchScript.Token.Position(line: 72, column: 30)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 72, column: 37)), TouchCode.TouchScript.Token.symbol("keys", TouchCode.TouchScript.Token.Position(line: 72, column: 38)), TouchCode.TouchScript.Token.symbol("data", TouchCode.TouchScript.Token.Position(line: 72, column: 43)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 72, column: 47)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 72, column: 48)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 72, column: 49)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 72, column: 50)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 73, column: 7)), TouchCode.TouchScript.Token.symbol("concat", TouchCode.TouchScript.Token.Position(line: 73, column: 8)), TouchCode.TouchScript.Token.string("[", TouchCode.TouchScript.Token.Position(line: 73, column: 15)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 73, column: 19)), TouchCode.TouchScript.Token.string("|", TouchCode.TouchScript.Token.Position(line: 73, column: 21)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 73, column: 25)), TouchCode.TouchScript.Token.string("] {}", TouchCode.TouchScript.Token.Position(line: 73, column: 27)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 73, column: 33)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 74, column: 7)), TouchCode.TouchScript.Token.symbol("concat", TouchCode.TouchScript.Token.Position(line: 74, column: 8)), TouchCode.TouchScript.Token.string("[", TouchCode.TouchScript.Token.Position(line: 74, column: 15)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 74, column: 19)), TouchCode.TouchScript.Token.string("|", TouchCode.TouchScript.Token.Position(line: 74, column: 21)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 74, column: 25)), TouchCode.TouchScript.Token.string("] ", TouchCode.TouchScript.Token.Position(line: 74, column: 27)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 74, column: 32)), TouchCode.TouchScript.Token.symbol("stringify", TouchCode.TouchScript.Token.Position(line: 74, column: 33)), TouchCode.TouchScript.Token.symbol("data", TouchCode.TouchScript.Token.Position(line: 74, column: 43)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 74, column: 47)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 74, column: 48)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 74, column: 49)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 74, column: 50)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 74, column: 51)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 76, column: 1)), TouchCode.TouchScript.Token.symbol("define", TouchCode.TouchScript.Token.Position(line: 76, column: 2)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 76, column: 9)), TouchCode.TouchScript.Token.symbol("handle-cell-tapped", TouchCode.TouchScript.Token.Position(line: 76, column: 10)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 76, column: 29)), TouchCode.TouchScript.Token.symbol("y", TouchCode.TouchScript.Token.Position(line: 76, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 76, column: 32)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 77, column: 3)), TouchCode.TouchScript.Token.symbol("let", TouchCode.TouchScript.Token.Position(line: 77, column: 4)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 77, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 77, column: 9)), TouchCode.TouchScript.Token.symbol("paddle-left", TouchCode.TouchScript.Token.Position(line: 77, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 77, column: 23)), TouchCode.TouchScript.Token.symbol("min-x", TouchCode.TouchScript.Token.Position(line: 77, column: 24)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 77, column: 30)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 77, column: 38)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 77, column: 39)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 78, column: 9)), TouchCode.TouchScript.Token.symbol("paddle-right", TouchCode.TouchScript.Token.Position(line: 78, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 78, column: 23)), TouchCode.TouchScript.Token.symbol("max-x", TouchCode.TouchScript.Token.Position(line: 78, column: 24)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 78, column: 30)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 78, column: 38)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 78, column: 39)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 79, column: 9)), TouchCode.TouchScript.Token.symbol("bottom", TouchCode.TouchScript.Token.Position(line: 79, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 79, column: 23)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 79, column: 24)), TouchCode.TouchScript.Token.symbol("rows", TouchCode.TouchScript.Token.Position(line: 79, column: 26)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 79, column: 31)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 79, column: 32)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 79, column: 33)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 79, column: 34)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 80, column: 5)), TouchCode.TouchScript.Token.symbol("if", TouchCode.TouchScript.Token.Position(line: 80, column: 6)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 80, column: 9)), TouchCode.TouchScript.Token.symbol("<", TouchCode.TouchScript.Token.Position(line: 80, column: 10)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 80, column: 12)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 80, column: 14)), TouchCode.TouchScript.Token.symbol("/", TouchCode.TouchScript.Token.Position(line: 80, column: 15)), TouchCode.TouchScript.Token.symbol("columns", TouchCode.TouchScript.Token.Position(line: 80, column: 17)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 80, column: 25)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 80, column: 26)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 80, column: 27)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 81, column: 7)), TouchCode.TouchScript.Token.symbol("if", TouchCode.TouchScript.Token.Position(line: 81, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 81, column: 11)), TouchCode.TouchScript.Token.symbol(">", TouchCode.TouchScript.Token.Position(line: 81, column: 12)), TouchCode.TouchScript.Token.symbol("paddle-left", TouchCode.TouchScript.Token.Position(line: 81, column: 14)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 81, column: 26)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 81, column: 27)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 82, column: 9)), TouchCode.TouchScript.Token.symbol("do", TouchCode.TouchScript.Token.Position(line: 82, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 83, column: 11)), TouchCode.TouchScript.Token.symbol("delete-cell", TouchCode.TouchScript.Token.Position(line: 83, column: 12)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 83, column: 24)), TouchCode.TouchScript.Token.symbol("paddle-right", TouchCode.TouchScript.Token.Position(line: 83, column: 33)), TouchCode.TouchScript.Token.symbol("bottom", TouchCode.TouchScript.Token.Position(line: 83, column: 46)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 83, column: 52)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 84, column: 11)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 84, column: 12)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 84, column: 21)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 84, column: 30)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 84, column: 31)), TouchCode.TouchScript.Token.symbol("paddle-left", TouchCode.TouchScript.Token.Position(line: 84, column: 33)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 84, column: 45)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 84, column: 46)), TouchCode.TouchScript.Token.symbol("bottom", TouchCode.TouchScript.Token.Position(line: 84, column: 48)), TouchCode.TouchScript.Token.bool(true, TouchCode.TouchScript.Token.Position(line: 84, column: 55)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 84, column: 59)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 84, column: 60)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 84, column: 61)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 84, column: 62)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 85, column: 5)), TouchCode.TouchScript.Token.symbol("if", TouchCode.TouchScript.Token.Position(line: 85, column: 6)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 85, column: 9)), TouchCode.TouchScript.Token.symbol(">=", TouchCode.TouchScript.Token.Position(line: 85, column: 10)), TouchCode.TouchScript.Token.symbol("x", TouchCode.TouchScript.Token.Position(line: 85, column: 13)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 85, column: 15)), TouchCode.TouchScript.Token.symbol("/", TouchCode.TouchScript.Token.Position(line: 85, column: 16)), TouchCode.TouchScript.Token.symbol("columns", TouchCode.TouchScript.Token.Position(line: 85, column: 18)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 85, column: 26)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 85, column: 27)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 85, column: 28)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 86, column: 7)), TouchCode.TouchScript.Token.symbol("if", TouchCode.TouchScript.Token.Position(line: 86, column: 8)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 86, column: 11)), TouchCode.TouchScript.Token.symbol("<", TouchCode.TouchScript.Token.Position(line: 86, column: 12)), TouchCode.TouchScript.Token.symbol("paddle-right", TouchCode.TouchScript.Token.Position(line: 86, column: 14)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 86, column: 27)), TouchCode.TouchScript.Token.symbol("-", TouchCode.TouchScript.Token.Position(line: 86, column: 28)), TouchCode.TouchScript.Token.symbol("columns", TouchCode.TouchScript.Token.Position(line: 86, column: 30)), TouchCode.TouchScript.Token.number(2.0, TouchCode.TouchScript.Token.Position(line: 86, column: 38)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 86, column: 39)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 86, column: 40)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 87, column: 9)), TouchCode.TouchScript.Token.symbol("do", TouchCode.TouchScript.Token.Position(line: 87, column: 10)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 88, column: 11)), TouchCode.TouchScript.Token.symbol("delete-cell", TouchCode.TouchScript.Token.Position(line: 88, column: 12)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 88, column: 24)), TouchCode.TouchScript.Token.symbol("paddle-left", TouchCode.TouchScript.Token.Position(line: 88, column: 33)), TouchCode.TouchScript.Token.symbol("bottom", TouchCode.TouchScript.Token.Position(line: 88, column: 45)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 88, column: 51)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 89, column: 11)), TouchCode.TouchScript.Token.symbol("set-cell", TouchCode.TouchScript.Token.Position(line: 89, column: 12)), TouchCode.TouchScript.Token.string("paddle", TouchCode.TouchScript.Token.Position(line: 89, column: 21)), TouchCode.TouchScript.Token.leftParen(TouchCode.TouchScript.Token.Position(line: 89, column: 30)), TouchCode.TouchScript.Token.symbol("+", TouchCode.TouchScript.Token.Position(line: 89, column: 31)), TouchCode.TouchScript.Token.symbol("paddle-right", TouchCode.TouchScript.Token.Position(line: 89, column: 33)), TouchCode.TouchScript.Token.number(1.0, TouchCode.TouchScript.Token.Position(line: 89, column: 46)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 89, column: 47)), TouchCode.TouchScript.Token.symbol("bottom", TouchCode.TouchScript.Token.Position(line: 89, column: 49)), TouchCode.TouchScript.Token.bool(true, TouchCode.TouchScript.Token.Position(line: 89, column: 56)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 89, column: 60)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 89, column: 61)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 89, column: 62)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 89, column: 63)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 89, column: 64)), TouchCode.TouchScript.Token.rightParen(TouchCode.TouchScript.Token.Position(line: 89, column: 65))]
AST:
Program(statements: [TouchCode.TouchScript.AST.Statement.define("env", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("grid"))), TouchCode.TouchScript.AST.Statement.define("size", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(32.0))), TouchCode.TouchScript.AST.Statement.define("frame-rate", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(30.0))), TouchCode.TouchScript.AST.Statement.define("columns", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("size"))), TouchCode.TouchScript.AST.Statement.define("rows", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("size"))), TouchCode.TouchScript.AST.Statement.defineFunction("setup-grid", [], [TouchCode.TouchScript.AST.Statement.forLoop("y", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("rows")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), nil, [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("wall")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.bool(true))])), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("dx")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))])), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("wall")), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("columns")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.bool(true))])), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("dx")), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("columns")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(-1.0))]))]), TouchCode.TouchScript.AST.Statement.forLoop("x", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("columns")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), nil, [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("wall")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.bool(true))])), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("dy")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))])), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("out")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("rows")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.bool(true))]))]), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.letExpression([("center", TouchCode.TouchScript.AST.Expression.call("/", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("rows")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))])), ("paddle-start", TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("center")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))])), ("paddle-end", TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("center")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))]))], [TouchCode.TouchScript.AST.Statement.forLoop("x", TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-start")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-end")), nil, [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("rows")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.bool(true))]))])])), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.letExpression([("center", TouchCode.TouchScript.AST.Expression.call("/", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("rows")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))])), ("paddle-start", TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("center")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))])), ("ball-x", TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-start")), TouchCode.TouchScript.AST.Expression.call("random", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(5.0))])])), ("dx", TouchCode.TouchScript.AST.Expression.call("random-choice", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(-1.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]))], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-x")), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("rows")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))]), TouchCode.TouchScript.AST.Expression.list([TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("dx")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(-1.0))])]))]))]), TouchCode.TouchScript.AST.Statement.defineFunction("update-grid", [], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.letExpression([("balls", TouchCode.TouchScript.AST.Expression.call("get-all-x-y", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball"))]))], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.ifExpression(TouchCode.TouchScript.AST.Expression.call(">", [TouchCode.TouchScript.AST.Expression.call("length", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("balls"))]), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0))]), TouchCode.TouchScript.AST.Expression.letExpression([("ball", TouchCode.TouchScript.AST.Expression.call("first", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("balls"))])), ("ball-x", TouchCode.TouchScript.AST.Expression.call("first", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball"))])), ("ball-y", TouchCode.TouchScript.AST.Expression.call("second", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball"))])), ("ball-data", TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-y"))])), ("dx", TouchCode.TouchScript.AST.Expression.call("first", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-data"))])), ("dy", TouchCode.TouchScript.AST.Expression.call("second", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-data"))])), ("new-x", TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("dx"))])), ("new-y", TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("dy"))]))], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("delete-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-y"))])), TouchCode.TouchScript.AST.Statement.conditional([(TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("wall")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-y"))]), [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.letExpression([("wall-dx", TouchCode.TouchScript.AST.Expression.call("get-or-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("dx")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("dx"))])), ("wall-dy", TouchCode.TouchScript.AST.Expression.call("get-or-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("dy")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("dy"))]))], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball")), TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("wall-dx"))]), TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("wall-dy"))]), TouchCode.TouchScript.AST.Expression.list([TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("wall-dx")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("wall-dy"))])]))]))]), (TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-y"))]), [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.letExpression([("new-dx", TouchCode.TouchScript.AST.Expression.call("random-choice", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(-1.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]))], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball")), TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-dx"))]), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("ball-y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.list([TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-dx")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(-1.0))])]))]))]), (TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("out")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-y"))]), [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball-out")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-y")), TouchCode.TouchScript.AST.Expression.list([TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0))])]))])], Optional([TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("new-y")), TouchCode.TouchScript.AST.Expression.list([TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("dx")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("dy"))])]))]))]), nil))]))]), TouchCode.TouchScript.AST.Statement.defineFunction("color-for-cell", ["x", "y"], [TouchCode.TouchScript.AST.Statement.conditional([(TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("wall")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y"))]), [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("color", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]))]), (TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball-out")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y"))]), [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("color", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]))]), (TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("ball")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y"))]), [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("color", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.2)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.9)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]))]), (TouchCode.TouchScript.AST.Expression.call("get-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y"))]), [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("color", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.8)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.2)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]))])], Optional([TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.call("color", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0))]))]))]), TouchCode.TouchScript.AST.Statement.defineFunction("info-for-cell", ["x", "y"], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.letExpression([("data", TouchCode.TouchScript.AST.Expression.call("get-cell-data", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y"))]))], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.ifExpression(TouchCode.TouchScript.AST.Expression.call("or", [TouchCode.TouchScript.AST.Expression.call("not", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("data"))]), TouchCode.TouchScript.AST.Expression.call("=", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(0.0)), TouchCode.TouchScript.AST.Expression.call("length", [TouchCode.TouchScript.AST.Expression.call("keys", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("data"))])])])]), TouchCode.TouchScript.AST.Expression.call("concat", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("[")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("|")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("] {}"))]), Optional(TouchCode.TouchScript.AST.Expression.call("concat", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("[")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("|")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("y")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("] ")), TouchCode.TouchScript.AST.Expression.call("stringify", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("data"))])]))))]))]), TouchCode.TouchScript.AST.Statement.defineFunction("handle-cell-tapped", ["x", "y"], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.letExpression([("paddle-left", TouchCode.TouchScript.AST.Expression.call("min-x", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle"))])), ("paddle-right", TouchCode.TouchScript.AST.Expression.call("max-x", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle"))])), ("bottom", TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("rows")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]))], [TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.ifExpression(TouchCode.TouchScript.AST.Expression.call("<", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.call("/", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("columns")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))])]), TouchCode.TouchScript.AST.Expression.ifExpression(TouchCode.TouchScript.AST.Expression.call(">", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-left")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.call("do", [TouchCode.TouchScript.AST.Expression.call("delete-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-right")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("bottom"))]), TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle")), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-left")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("bottom")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.bool(true))])]), nil), nil)), TouchCode.TouchScript.AST.Statement.expression(TouchCode.TouchScript.AST.Expression.ifExpression(TouchCode.TouchScript.AST.Expression.call(">=", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("x")), TouchCode.TouchScript.AST.Expression.call("/", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("columns")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))])]), TouchCode.TouchScript.AST.Expression.ifExpression(TouchCode.TouchScript.AST.Expression.call("<", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-right")), TouchCode.TouchScript.AST.Expression.call("-", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("columns")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(2.0))])]), TouchCode.TouchScript.AST.Expression.call("do", [TouchCode.TouchScript.AST.Expression.call("delete-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-left")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("bottom"))]), TouchCode.TouchScript.AST.Expression.call("set-cell", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.string("paddle")), TouchCode.TouchScript.AST.Expression.call("+", [TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("paddle-right")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.number(1.0))]), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.symbol("bottom")), TouchCode.TouchScript.AST.Expression.value(TouchCode.TouchScript.AST.Value.bool(true))])]), nil), nil))]))])])
PRETTY CODE:
(define env "grid")
(define size 32)
(define frame-rate 30)
(define columns size)
(define rows size)
(define (setup-grid)
(for y 0 (- rows 1)
(set-cell "wall" 0 y true)
(set-cell "dx" 0 y 1)
(set-cell "wall" (- columns 1) y true)
(set-cell "dx" (- columns 1) y -1))
(for x 0 (- columns 1)
(set-cell "wall" x 0 true)
(set-cell "dy" x 0 1)
(set-cell "out" x (- rows 1) true))
(let ((center (/ rows 2))
(paddle-start (- center 2))
(paddle-end (+ center 2)))
(for x paddle-start paddle-end
(set-cell "paddle" x (- rows 1) true)))
(let ((center (/ rows 2))
(paddle-start (- center 2))
(ball-x (+ paddle-start (random 5)))
(dx (random-choice -1 1)))
(set-cell "ball" ball-x (- rows 2) (list dx -1))))
(define (update-grid)
(let ((balls (get-all-x-y "ball")))
(if (> (length balls) 0)
(let ((ball (first balls))
(ball-x (first ball))
(ball-y (second ball))
(ball-data (get-cell "ball" ball-x ball-y))
(dx (first ball-data))
(dy (second ball-data))
(new-x (+ ball-x dx))
(new-y (+ ball-y dy)))
(delete-cell "ball" ball-x ball-y)
(cond
((get-cell "wall" new-x new-y)
(let ((wall-dx (get-or-cell "dx" new-x new-y dx))
(wall-dy (get-or-cell "dy" new-x new-y dy)))
(set-cell "ball" (+ ball-x wall-dx) (+ ball-y wall-dy) (list wall-dx wall-dy))))
((get-cell "paddle" ball-x new-y)
(let ((new-dx (random-choice -1 1)))
(set-cell "ball" (+ ball-x new-dx) (- ball-y 1) (list new-dx -1))))
((get-cell "out" new-x new-y)
(set-cell "ball-out" new-x new-y (list 0 0)))
else
(set-cell "ball" new-x new-y (list dx dy)))))))
(define (color-for-cell x y)
(cond
((get-cell "wall" x y)
(color 1 1 1 1))
((get-cell "ball-out" x y)
(color 1 0 0 1))
((get-cell "ball" x y)
(color 0.2 0.9 0 1))
((get-cell "paddle" x y)
(color 1 0.8 0.2 1))
else
(color 0 0 0 0)))
(define (info-for-cell x y)
(let ((data (get-cell-data x y)))
(if (or (not data) (= 0 (length (keys data))))
(concat "[" x "|" y "] {}")
(concat "[" x "|" y "] " (stringify data)))))
(define (handle-cell-tapped x y)
(let ((paddle-left (min-x "paddle"))
(paddle-right (max-x "paddle"))
(bottom (- rows 1)))
(if (< x (/ columns 2))
(if (> paddle-left 1)
(do
(delete-cell "paddle" paddle-right bottom)
(set-cell "paddle" (- paddle-left 1) bottom true))))
(if (>= x (/ columns 2))
(if (< paddle-right (- columns 2))
(do
(delete-cell "paddle" paddle-left bottom)
(set-cell "paddle" (+ paddle-right 1) bottom true))))))
JS:
var env = "grid";
var size = 32;
var frame_rate = 30;
var columns = size;
var rows = size;
function setup_grid() {
for (let y = 0; y <= (rows) - (1); y++) {
Grid.setCell("wall", 0, y, true);
Grid.setCell("dx", 0, y, 1);
Grid.setCell("wall", (columns) - (1), y, true);
Grid.setCell("dx", (columns) - (1), y, -1);
}
for (let x = 0; x <= (columns) - (1); x++) {
Grid.setCell("wall", x, 0, true);
Grid.setCell("dy", x, 0, 1);
Grid.setCell("out", x, (rows) - (1), true);
}
(() => {
const center = (rows) / (2);
const paddle_start = (center) - (2);
const paddle_end = (center) + (2);
for (let x = paddle_start; x <= paddle_end; x++) {
Grid.setCell("paddle", x, (rows) - (1), true);
}
})();
return (() => {
const center = (rows) / (2);
const paddle_start = (center) - (2);
const ball_x = (paddle_start) + (Grid.random(5));
const dx = Grid.randomChoice(-1, 1);
return Grid.setCell("ball", ball_x, (rows) - (2), [dx, -1]);
})();
}
function update_grid() {
return (() => {
const balls = Grid.getAllXY("ball");
return ((Grid.length(balls) > 0) ? (() => {
const ball = Grid.first(balls);
const ball_x = Grid.first(ball);
const ball_y = Grid.second(ball);
const ball_data = Grid.getCell("ball", ball_x, ball_y);
const dx = Grid.first(ball_data);
const dy = Grid.second(ball_data);
const new_x = (ball_x) + (dx);
const new_y = (ball_y) + (dy);
Grid.deleteCell("ball", ball_x, ball_y);
if (Grid.getCell("wall", new_x, new_y)) {
return (() => {
const wall_dx = Grid.getOrCell("dx", new_x, new_y, dx);
const wall_dy = Grid.getOrCell("dy", new_x, new_y, dy);
return Grid.setCell("ball", (ball_x) + (wall_dx), (ball_y) + (wall_dy), [wall_dx, wall_dy]);
})();
} else if (Grid.getCell("paddle", ball_x, new_y)) {
return (() => {
const new_dx = Grid.randomChoice(-1, 1);
return Grid.setCell("ball", (ball_x) + (new_dx), (ball_y) - (1), [new_dx, -1]);
})();
} else if (Grid.getCell("out", new_x, new_y)) {
return Grid.setCell("ball-out", new_x, new_y, [0, 0]);
} else {
return Grid.setCell("ball", new_x, new_y, [dx, dy]);
}
})() : undefined);
})();
}
function color_for_cell(x, y) {
if (Grid.getCell("wall", x, y)) {
return Grid.color(1, 1, 1, 1);
} else if (Grid.getCell("ball-out", x, y)) {
return Grid.color(1, 0, 0, 1);
} else if (Grid.getCell("ball", x, y)) {
return Grid.color(0.2, 0.9, 0, 1);
} else if (Grid.getCell("paddle", x, y)) {
return Grid.color(1, 0.8, 0.2, 1);
} else {
return Grid.color(0, 0, 0, 0);
}
}
function info_for_cell(x, y) {
return (() => {
const data = Grid.getCellData(x, y);
return ((!(data)) || ((0 === Grid.length(Grid.keys(data)))) ? Grid.concat("[", x, "|", y, "] {}") : Grid.concat("[", x, "|", y, "] ", Grid.stringify(data)));
})();
}
function handle_cell_tapped(x, y) {
return (() => {
const paddle_left = Grid.minX("paddle");
const paddle_right = Grid.maxX("paddle");
const bottom = (rows) - (1);
((x < (columns) / (2)) ? ((paddle_left > 1) ? (() => {
Grid.deleteCell("paddle", paddle_right, bottom);
Grid.setCell("paddle", (paddle_left) - (1), bottom, true);
})() : undefined) : undefined);
return ((x >= (columns) / (2)) ? ((paddle_right < (columns) - (2)) ? (() => {
Grid.deleteCell("paddle", paddle_left, bottom);
Grid.setCell("paddle", (paddle_right) + (1), bottom, true);
})() : undefined) : undefined);
})();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment