car-race

game.splash("Car Race", "Avoid the borders!")

const car = sprites.create(img`
 . . 9 9
 . 4 9 9 4
 . 4 9 9 4
 . . 9 9
 . 9 9 9 9
 4 9 9 9 9 4
 4 9 9 9 9 4
 . 9 9 9 9
 9 9 9 9 9 9
 `)
car.y = 110


const roadImg = screen.clone()
let curr = 64
let target = curr
let roadW = 60
let numCol = 0
let isRed = false
let ddx = 0


function drive(lines: number) {
    roadImg.scroll(0, lines)
    while (--lines >= 0) {
        let w2 = roadW >> 1
        if (curr == target) {
            target = randint(w2, 120 - w2)
        }
        const dx = Math.sign(target - curr) * ddx
        curr += dx
        roadImg.fillRect(0, lines, 120, 1, 7)
        roadImg.fillRect(curr - w2 - 5, lines, roadW + 10, 1, isRed ? 10 : 15)
        roadImg.fillRect(curr - w2, lines, roadW, 1, 0)

        if (numCol++ > 10) {
            numCol = 0
            isRed = !isRed
        }
    }
}

drive(120)
ddx = 1
const road = sprites.create(roadImg)

car.onOverlap(function (other: Sprite) {
    game.over()
})
car.z = 10

let pos = 0
let prevPos = 0


game.onUpdate(function () {
    pos += 1 + Math.sqrt(control.millis()) / 200.0
    drive(pos - prevPos)
    prevPos = pos | 0
    info.setScore(prevPos >> 6)
    car.x += controller.dx(70)
})