Created
January 9, 2026 21:48
-
-
Save antfarm/bf33f22436aed18d249e9aa5410dd93d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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