Zaigrajte Flappy Bird na micro:bitu

S ovom zaraznom igricom zarazite svoj micro:bit

Nemojte propustiti

E Ink avanture s Inky pHAT-om

E Ink (AKA E Paper, electronic paper) već je neko vrijeme s nama, a mogli ste se sresti s tom tehnologijom ako (još...

Raspberry Pi Story

Raspberry Pi maleni je SBC (single board computer) razvijen od Raspberry Pi Foundation kako bi pomogao u edukaciji osnova računarstva. Međutim, vrlo brzo pokazalo...

Spajanje više tipkala na jedan pin

Mnogi su nas nakon članka o izborniku s LCD shieldom pitali kako spojiti tipkala da rade na takav način. Jedan od načina...

I2C LCD

Sada je vrijeme da se pozabavimo jednim od osnovnih koraka u našim projektima a to je prikazivanje poruka na LCD ekranu. Danas...

Izrada izbornika na LCD štitu

Nakon što smo se upoznali sa shield koji ima LCD ekran i tipkovnicu. Ako još niste možete to učiniti ovdje. Vrijeme je...

Sjećate se Flappy Birda, mobilne videoigre koja se 2013. našla na pravom mjestu u pravo vrijeme i doživjela svojih pet minuta slave. Budući da micro:bit ima jednostavni ekran i akcelerometar, učinilo mi se zgodnim napraviti njenu inačicu za micro:bit. Zbog veličine ekrana ptica se svela na veličinu piksela pa sam igru prikladno nazvao Flappy Pixel.

Kao i kod originala, cilj igre pomicati je piksel gore/dolje i uredno prolaziti između prepreka koje se postupno približavaju. Piksel se pomiče naginjanjem micro:bita naprijed i natrag. Svaki prolazak između prepreka donosi jedan bod. Nakon određenog broja bodova, smanjuje se prolaz između prepreka te igra postaje izazovnija. Vještim pomicanjem igrač nastoji skupiti što više bodova.

- oglas-

Flappy Pixel prvotno je napisan u MicroPythonu, no kasnije je prebačen i u TypeScript MakeCoda. U nastavku ću prvo prikazati cijeli kod programa obje inačice, a zatim ću ukratko opisati dio po dio programa.

from microbit import *
import random

pixel_row = 2
gate_column = 4
gate_row = 1
gate_size = 3
gate_move = False
score = 0

while True:
    y = accelerometer.get_y()
    if y > 600 and pixel_row < 4:
        pixel_row += 1
    elif y <= 600 and pixel_row > 0:
        pixel_row -= 1
    if gate_move:
        gate_column -= 1
    gate_move = not gate_move
    display.clear()
    display.set_pixel(0, pixel_row, 8)
    for i in range(5):
        if i < gate_row or i > gate_row + gate_size - 1:
            display.set_pixel(gate_column, i, 5)
    if gate_column == 0:
        if pixel_row < gate_row or pixel_row > gate_row + gate_size - 1:
            break
        score += 1
        if score in (1, 10):
            gate_size -= 1
        gate_column = 4
        gate_row = random.randint(0, 4 - gate_size + 1)
    sleep(400)
sleep(800)
display.scroll("You scored " + str(score) + " points!")

Program započinje inicijalizacijom varijabli koje sadrže stanje videoigre: položaj piksela, veličinu i položaj prolaza te rezultat. MicroPython dodatno sadrži uvoz modula micro:bita te modula za stvaranje slučajnih vrijednosti.

MicroPython:

from microbit import * 
import random 
pixel_row = 2 
gate_column = 4
 gate_row = 1 
gate_size = 3 
gate_move = 
False score = 0

TypeScript:

let pixel_row = 2 
let gate_column = 4 
let gate_row = 1 
let gate_size = 3 
let gate_move = false 
let score = 0 
let y: number

Slijedi beskonačna petlja koja se izvodi sve dok se piksel ne sudari s preprekom. Na početku petlje očitava se vrijednost osi Y akcelerometra te ako je veća ili manja od predefinirane vrijednosti, piksel se pomiče za jedno mjesto gore ili dolje. U svakoj drugoj iteraciji pomiču se i prepreke, za jedno mjesto prema pikselu.

MicroPython:

while True:
    y = accelerometer.get_y()
    if y > 600 and pixel_row < 4:
        pixel_row += 1
    elif y <= 600 and pixel_row > 0:
        pixel_row -= 1
    if gate_move:
        gate_column -= 1
    gate_move = not gate_move

TypeScript:

 while (true) { y = input.acceleration(Dimension.Y) if (y > 600 && pixel_row < 4) { pixel_row += 1 } else if (y <= 600 && pixel_row > 0) { pixel_row -= 1 } if (gate_move) { gate_column -= 1 } gate_move = !gate_move

Zatim se ažurira sadržaj ekrana. Prvo se izbriše raniji sadržaj ekrana i zatim prikaže trenutni položaj piksela i prepreka.

MicroPython:

[codeblock lang=”markup” line=”20″] display.clear() display.set_pixel(0, pixel_row, 8) for i in range(5): if i < gate_row or i > gate_row + gate_size – 1: display.set_pixel(gate_column, i, 5)[/codeblock]

TypeScript:

[codeblock lang=”markup” line=”21″] basic.clearScreen() led.plotBrightness(0, pixel_row, 227) led.plot(0, pixel_row) for (let i = 0; i < 5; i++) { if (i < gate_row || i > gate_row + gate_size – 1) { led.plotBrightness(gate_column, i, 142) } }[/codeblock]

Ako su prepreke stigle do piksela, provjerava se je li igrač uspješno ušao u prolaz između prepreka. Ako se sudario, izlazi se iz petlje, a ako je ušao u prolaz, ostvareni rezultat uvećava se za jedan. Također se i, nakon što se kod rezultat ostvari jedan bod te deset bodova, ubuduće smanjuje prolaz između prepreka.

 MicroPython:

[codeblock lang=”markup” line=”25″] if gate_column == 0: if pixel_row < gate_row or pixel_row > gate_row + gate_size – 1: break score += 1 if score in (1, 10): gate_size -= 1[/codeblock]

TypeScript:

[codeblock lang=”markup” line=”29″] if (gate_column == 0) { if (pixel_row < gate_row || pixel_row > gate_row + gate_size – 1) { break } score += 1 if (score == 1 || score == 10) { gate_size -= 1 }[/codeblock]

Nasumično se stvaraju nove prepreke i igra miruje djelić sekunde, prije nego započne s novom iteracijom. Ako smo prethodno imali sudar, izvan petlje se napravi kraća pauza izvođenja i zatim prikaže ostvareni rezultat.

 MicroPython:

[codeblock lang=”markup” line=”31″] gate_column = 4 gate_row = random.randint(0, 4 – gate_size + 1) sleep(400) sleep(800) display.scroll(“You scored ” + str(score) + ” points!”)[/codeblock]

TypeScript:

[codeblock lang=”markup” line=”37″] gate_column = 4 gate_row = Math.random(4 – gate_size + 1) } basic.pause(400) } basic.pause(1000) basic.showString(“You scored ” + score + ” points!”)[/codeblock]

Kao i kod originala, izvedba je jednostavna i lako shvatljiva. Te možete vidjeti kako sve to skupa radi uživo.

Preuzimanje:


Možda vas zanima i ovo:

Komentiraj

Unesite svoj komentar!
Ovdje unesite svoje ime

Popularno

Uvjeti korištenja

Uvjeti korištenja seekretors.org stranice (u daljnjem tekstu: ove stranice) u vlasništvu su njenih osnivača Marka Miroslava Bače i Tomislava Preksavca (u daljnjem...

Enderova nova pamet

Enderu 3 teško je naći manu (naročito za cijenu po kojoj se prodaje), i ako bi nešto trebalo izdvojiti, to je sigurno njegov...

PYW – Vijak

Evo nas na prvoj stranici našeg putovanja, a s čime je bolje početi nego s dobrom vezom. Zato krenimo od vijčanog spoja.

Print Your world- uvod

Dobrodošli u novi serijal Print Your world ili kako bi mi rekli ekstrudiraj, ekstrudiraj. U ovom serijalu bavit ćemo...

Korekcija putanje glave 3D printera

Konkretno, u mom slučaju radi se o 3D printeru tipa delta, premda vjerujem da sličnih problema ima i kod modela s klasičnim...