let maxGameTime: number let wasShake: boolean maxGameTime = 60000 input.onShake(() => { wasShake = true }) while (true) { splashScreen() if (input.buttonIsPressed(Button.B)) { basic.showAnimation(` # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # . . # # # # # # # # . . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # . . # . . . . # . . . . # . . . . # . . . . # # # # # # # # # # # # # . . # # # . . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # . . # # # . . # # # . . # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . # . . . . # . . . . # . . . . # . . . . # . . . . # . . . . # # . . # # # . # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . # . . . . # # . . # # # . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # `, 400) let score = playOneGame() flashDigit(score, 5) waitButtonB() basic.showAnimation(` # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . # . # . . . . . . . # . # . . . . . . # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . `, 400) } else if (input.buttonIsPressed(Button.A)) { calibrate() } } function playOneGame(): number { let countDots = 0 let x = 2 let y = 2 let xdir = true let canvas = images.createImage(` . . . . . . . . . . . . . . . . . . . . . . . . . `) wasShake = false let bearing = input.compassHeading() let startTime = input.runningTime() while (countDots < 25 && input.runningTime() - startTime < maxGameTime) { if (wasShake) { basic.showAnimation(` . . . . . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . # . . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . # . . . . # . . . . # . . . # # # . . . . . . . . . . . . . . . . . . . . . . # # # . . . # . . . . # . . . . # . . . . # . . . . # . . . # # # . . . . . . . . . . . . # # # . . . # . . . . # . . . . # . . . . # . . . . # . . . . # . . . . # . . . # # # . . . . . . `, 50) let pos = Math.randomInt(5) if (xdir) { if (!canvas.pixel(pos, y)) { canvas.setPixel(pos, y, true) countDots = countDots + 1 } } else if (!canvas.pixel(x, pos)) { canvas.setPixel(x, pos, true) countDots = countDots + 1 } wasShake = false canvas.showImage(0) } else if (Math.abs(input.compassHeading() - bearing) > 60) { xdir = !xdir bearing = input.compassHeading() if (xdir) { x = Math.randomInt(5) } else { y = Math.randomInt(5) } } else { basic.pause(100) } } return dotsToScore(countDots) } function splashScreen() { let img = images.createImage(` # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . # # . . # # # . # # # # . # # # # . . # # # . . . # # . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # . . . # # . . . # # . . . # # . . . # # . . . # . # # # . . . # . . . # # # . . . . . . . . . . . . . . . . . . . . . # . . . . . # . . . . . # . . . . . # . . . . . # . . . # # . . # . # . # . . # # . . . # # . . . # # . . . # # . . . # . # . . # . . # . # . . . # # . . . . # . . . # . . . # . . . # . . . # . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . # . . . # # # . # . . . # # . . . # # . . . # # . . . # # # # # . # # # # . # # # # . # # # # . . # # # . . . # . . . . # . . . . # . . . # # # . . . . . . . . . . . . . . . . # . . . . # # . . . # # # . . # # # # . # # # # # # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # . # # # # # # # # # . # # # . . # # . . . # . . . . . . . . . . . . . . . . . . . . # # # . . . # . . . . # . . . . # . . . # # # . # # # # . # # # # . # # # # . # . . . . # . . . . # . . . . . # # # . . . # . . . . # . . . . # . . . . # . . . . # . . . # # # . . . . . . . . . . . # . . . . . # . . . . . # . . . . . # . . . . . # . . . # . . . # # . . # . # . # . . # . # . . # . # . . # . # . . # . . # . # . . . # # . . . . # . . . . . # . . . # . . . # . . . # . . . # . . . . . . . . . . . . . . . # # # . . . # . . . . # . . . . # . . . . # . . . . # . . . # # # . # . . . . # . . . . # . . . . # . . . . . # # # . . . # . . . . # . . . . # . . . . # . . . . # . . . . # . . . . # . . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . # . . . . # . . . . # # . . . # # . . . # . . . . # . . . . # . . . . # . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . # . . . . # . . . . # . . . . # . . . . # . . . . # . . . . # . . . # # # . # . . . . `) let x = 0 while (!input.buttonIsPressed(Button.A) && !input.buttonIsPressed(Button.B)) { img.showImage(x) basic.pause(200) x = x + 5 if (x >= img.width()) { x = 0 } } } /** * rotate canvas */ function rotateImage() { } function flashDigit(digit: number, times: number) { for (let i = 0; i < times; i++) { basic.showNumber(digit, 0) basic.pause(500) basic.clearScreen() basic.pause(500) } basic.showNumber(digit, 0) } function waitButtonB() { while (!input.buttonIsPressed(Button.B)) { basic.pause(100) } } function dotsToScore(dots: number): number { if (dots == 25) { return 9 } else if (dots >= 22) { return 8 } else if (dots >= 19) { return 7 } else if (dots >= 16) { return 6 } else if (dots >= 13) { return 5 } else if (dots >= 10) { return 4 } else if (dots >= 7) { return 3 } else if (dots >= 4) { return 2 } else if (dots >= 1) { return 1 } else { return 0 } } function calibrate() { basic.showString("CAL", 150) if (input.compassHeading() == -4) { input.calibrate() } while (!input.buttonIsPressed(Button.B)) { let h = input.compassHeading() basic.showNumber(h, 150) } }