Thomas Stegh
Published © CC BY

Auto Race

Recreating a game from my youth: Vintage Mattel Electronics Auto Race Handheld Game.

IntermediateProtip4 hours1,347
Auto Race

Things used in this project

Hardware components

Calliope mini
Calliope mini
×1

Story

Read more

Code

Auto_Race.js

JavaScript
my version, based on original code by Daniel Havlik: https://www.hackster.io/nilo/ausweichgame-faff5f
let speed = 0
let Crash: Image = null
let Herz: Image = null
let gegner2_y = 0
let gegner1_y = 0
let gegner2_x = 0
let gegner1_x = 0
let car_pos_y = 0
let car_pos_x = 0
let Fahrspur = 0
let gegner2_unterwegs = false
let gegner1_unterwegs = false
let newcar = false
basic.forever(() => {
    newcar = Math.randomBoolean()
    if (!(gegner1_unterwegs) && newcar) {
        Fahrspur = Math.random(5)
        if (Fahrspur != gegner2_x) {
            gegner1_y = 0
            gegner1_x = Fahrspur
            led.plot(gegner1_x, gegner1_y)
            gegner1_unterwegs = true
            basic.pause(speed)
        }
    }
    newcar = Math.randomBoolean()
    if (!(gegner2_unterwegs) && newcar) {
        Fahrspur = Math.random(5)
        if (Fahrspur != gegner1_x) {
            gegner2_y = 0
            gegner2_x = Fahrspur
            led.plot(gegner2_x, gegner2_y)
            gegner2_unterwegs = true
            basic.pause(speed)
        }
    }
    if (gegner1_unterwegs && gegner1_y < 4) {
        led.unplot(gegner1_x, gegner1_y)
        gegner1_y += 1
        led.plot(gegner1_x, gegner1_y)
    } else {
        led.unplot(gegner1_x, gegner1_y)
        gegner1_unterwegs = false
    }
    if (gegner2_unterwegs && gegner2_y < 4) {
        led.unplot(gegner2_x, gegner2_y)
        gegner2_y += 1
        led.plot(gegner2_x, gegner2_y)
    } else {
        led.unplot(gegner2_x, gegner2_y)
        gegner2_unterwegs = false
    }
    if (gegner1_x == car_pos_x && gegner1_y == car_pos_y || gegner2_x == car_pos_x && gegner2_y == car_pos_y) {
        music.setTempo(120)
        music.playTone(Note.G4, music.beat(BeatFraction.Whole))
        music.playTone(Note.E4, music.beat(BeatFraction.Whole))
        music.playTone(Note.C4, music.beat(BeatFraction.Whole))
        basic.clearScreen()
        basic.setLedColor(Colors.Red)
        for (let i = 0; i < 5; i++) {
            Crash.showImage(0)
            basic.pause(50)
            basic.clearScreen()
            basic.pause(50)
        }
        basic.pause(2000)
        basic.setLedColor(Colors.Green)
        speed = 200
        car_pos_x = 2
        car_pos_y = 4
        led.plot(car_pos_x, car_pos_y)
        music.setTempo(600)
        gegner1_unterwegs = false
        gegner2_unterwegs = false
    }
    music.playTone(Note.C, music.beat(BeatFraction.Sixteenth))
    basic.pause(speed)
    speed += -1
    if (speed % 20 == 0) {
        if (car_pos_y > 1) {
            led.unplot(car_pos_x, car_pos_y)
            car_pos_y += -1
            led.plot(car_pos_x, car_pos_y)
        } else {
            basic.clearScreen()
            basic.setLedColor(Colors.Indigo)
            for (let Frequenz = 0; Frequenz <= 2500; Frequenz++) {
                music.ringTone(Frequenz)
            }
            for (let i = 0; i < 5; i++) {
                Herz.showImage(0)
                basic.pause(10)
                basic.clearScreen()
                basic.pause(10)
            }
            basic.pause(2000)
            speed = 200
            car_pos_x = 2
            car_pos_y = 4
            led.plot(car_pos_x, car_pos_y)
            music.setTempo(600)
            gegner1_unterwegs = false
            gegner2_unterwegs = false
        }
    }
})
input.onButtonPressed(Button.A, () => {
    if (car_pos_x > 0) {
        led.unplot(car_pos_x, car_pos_y)
        car_pos_x += -1
        led.plot(car_pos_x, car_pos_y)
    }
})
input.onButtonPressed(Button.B, () => {
    if (car_pos_x < 4) {
        led.unplot(car_pos_x, car_pos_y)
        car_pos_x += 1
        led.plot(car_pos_x, car_pos_y)
    }
})
gegner1_unterwegs = false
gegner2_unterwegs = false
gegner1_x = 0
gegner2_x = 0
gegner1_y = 0
gegner2_y = 0
Herz = images.createImage(`
    . # . # .
    # # # # #
    # # # # #
    . # # # .
    . . # . .
    `)
Crash = images.createImage(`
    . . . . .
    . # . # .
    . . . . .
    . # # # .
    # . . . #
    `)
music.setTempo(600)
speed = 200
car_pos_x = 2
car_pos_y = 4
led.plot(car_pos_x, car_pos_y)
basic.setLedColor(Colors.Green)

Credits

Thomas Stegh

Thomas Stegh

2 projects • 4 followers
Father of four. Developer for eTASK CAFM Computer-aided facility management. BIM, IFC, buildingSMART, Revit, SVG, HoloLens, SQL Server, Crystal Reports, AutoCAD
Thanks to Joe Haupt.

Comments