Microbit platformer test

might turn this into a full game

5 Likes

you can use an oled screen for more high-quality screens. (you need an actual oled screen, because it doesnt work on the simulator.)

1 Like

I don’t have an oled screen so I’m probably not going to do that but good suggestion.
I like the challenges that comes with a 5 by 5 screen and want to make a full game with it

3 Likes

Could you make A-B the jump and an and b the movement controls? Tilt is hard to control in the simulator. This project is so cool! Looking forward to seeing what can be done with it!!!

1 Like

Maybe I find it hard to press A-B on the real micro bit though

1 Like

Fair enough👍

i maked one with ai:

let spelerX = 0
let spelerY = 4
let springen = false
let huidigLevel = 0

// Definieer meerdere levels, met lava blocks (2)
let levels = [
    [ // Level 1
        [0, 0, 0, 0, 0],
        [0, 0, 1, 0, 0],
        [0, 1, 0, 1, 0],
        [1, 0, 0, 0, 1],
        [1, 1, 1, 1, 1]
    ],
    [ // Level 2
        [0, 0, 1, 0, 0],
        [0, 1, 0, 1, 0],
        [1, 0, 0, 0, 1],
        [0, 1, 1, 1, 0],
        [1, 2, 0, 1, 1] // Lava block op (1,1)
    ],
    [ // Level 3
        [0, 1, 0, 1, 0],
        [1, 0, 0, 0, 1],
        [0, 1, 1, 1, 0],
        [0, 0, 0, 0, 0],
        [1, 1, 1, 2, 1] // Lava block op (4,3)
    ]
]

// Teken de speler en de platforms
function tekenSpeler() {
    basic.clearScreen()
    let platforms = levels[huidigLevel]

    // Teken platforms
    for (let y = 0; y < 5; y++) {
        for (let x = 0; x < 5; x++) {
            if (platforms[y][x] == 1) {
                led.plotBrightness(x, y, 50) // Platformen met lage helderheid
            } else if (platforms[y][x] == 2) {
                led.plotBrightness(x, y, 255) // Lava block met felste helderheid
            }
        }
    }
    // Teken speler
    led.plot(spelerX, spelerY)
}

// Controleer of de speler vastzit in een platform en duw hem omhoog
function duwUitPlatform() {
    let platforms = levels[huidigLevel]
    while (spelerY > 0 && platforms[spelerY][spelerX] == 1) {
        spelerY -= 1 // Duw omhoog totdat de speler niet meer in het platform zit
    }
    tekenSpeler()
}

// Zwaartekracht functie: speler valt als er geen platform onder hem is
function zwaartekracht() {
    let platforms = levels[huidigLevel]
    while (spelerY < 4 && platforms[spelerY + 1][spelerX] == 0) {
        basic.pause(150) // Pauzeer een beetje om het val-effect te zien
        spelerY += 1
        tekenSpeler()

        // Check of de speler onder het niveau is gevallen (void)
        if (spelerY > 4) {
            spelerDood() // De speler valt in de void, dus reset naar het eerste level
        }
    }
}

// De functie die wordt uitgevoerd als de speler in de void of lava valt
function spelerDood() {
    // Zet de speler terug naar het eerste level
    huidigLevel = 0
    // Zet de speler terug naar de startpositie
    spelerX = 0
    spelerY = 4
    duwUitPlatform() // Zorg ervoor dat de speler niet vastzit in een platform
    tekenSpeler() // Teken de speler opnieuw op zijn startpositie
}

// Beweging naar links
input.onButtonPressed(Button.A, function () {
    if (spelerX > 0) {
        let platforms = levels[huidigLevel]
        if (platforms[spelerY][spelerX - 1] == 0 || platforms[spelerY][spelerX - 1] == 2) {
            spelerX -= 1
            tekenSpeler()
            zwaartekracht() // Zorg dat de zwaartekracht direct werkt
            duwUitPlatform() // Zorg ervoor dat de speler niet in een platform vastzit
        }
    }
})

// Beweging naar rechts
input.onButtonPressed(Button.B, function () {
    if (spelerX < 4) {
        let platforms = levels[huidigLevel]
        if (platforms[spelerY][spelerX + 1] == 0 || platforms[spelerY][spelerX + 1] == 2) {
            spelerX += 1
            tekenSpeler()
            zwaartekracht() // Zorg dat de zwaartekracht direct werkt
            duwUitPlatform() // Zorg ervoor dat de speler niet in een platform vastzit
        }
    }

    // Als de speler het einde van het level bereikt, ga naar het volgende level
    if (spelerX == 4 && huidigLevel < levels.length - 1) {
        huidigLevel += 1
        spelerX = 0 // Reset de speler naar het begin van het level
        spelerY = 4 // Zet de speler weer op de grond
        duwUitPlatform() // Zorg ervoor dat de speler niet vastzit
        tekenSpeler()
    }
})

// Springen
input.onButtonPressed(Button.AB, function () {
    let platforms = levels[huidigLevel]
    if (!springen && spelerY > 0 && (spelerY == 4 || platforms[spelerY + 1][spelerX] == 1)) {
        springen = true
        for (let i = 0; i < 2; i++) {
            if (spelerY > 0 && platforms[spelerY - 1][spelerX] == 0) {
                spelerY -= 1
                tekenSpeler()
                basic.pause(150)
                zwaartekracht() // Na elke spronghandeling zwaartekracht controleren
            }
        }
        springen = false
        zwaartekracht() // Na de sprong de zwaartekracht controleren om te vallen
        duwUitPlatform()
    }
})

// Controleer of de speler op lava staat
function controleerLava() {
    let platforms = levels[huidigLevel]
    if (platforms[spelerY][spelerX] == 2) {
        spelerDood() // Als de speler op lava staat, ga terug naar het begin van het level
    }
}

// Start de speler op het platform en zorg dat hij niet vastzit bij de start
duwUitPlatform()
tekenSpeler()

// Controleer na elke actie of de speler op lava staat
basic.forever(function () {
    controleerLava()
})

I’m making a full platformer out of it! Working with these extreme conditions requires creativity :smiley:

1 Like