Excitebike je igra s bočnim pomicanjem u kojoj upravljate motociklom preko skakaonica, manevrirate oko prepreka i jurite prema cilju.

Nintendo je prvi lansirao ovu BMX trkaću igru ​​za NES. Odatle je tvrtka modernizirala Excitebike i objavila ga na N64 i, na kraju, na Wii.

Ne postoji više mnogo NES konzola, što čini ponovno igranje Excitebikea teško dostupnim. Zahvaljujući nekim retro obožavateljima u časopisu Wireframe Magazine, isječak Python koda može rekreirati ovaj NES klasik za sate zabave na vašem Raspberry Pi ili kućnom računalu.

Dohvaćanje koda i postavljanje

Iako možete koristiti nano ili vim za uređivanje svog python koda, htjet ćete iskoristiti sve mogućnosti uređivač teksta ili IDE.

Morat ćete instalirati Pygame Zero kako biste podržali značajke ugrađene u ovaj hommage Excitebikeu. Pygame Zero sadrži Python module na koje se kreatori igara mogu usredotočiti bez ponavljanja jednostavnih temelja.

Ako nemate instaliran python3 na računalu, možete preuzmite najnoviju verziju izravno iz Pythona. Također ćete htjeti provjerite imate li instaliran PIP isto.

instagram viewer

S instaliranom najnovijom verzijom Pythona i PIP-a, otvorite PowerShell ili Linux terminal i upišite:

pip3 instalirati pgnula

Na kraju, morat ćete pokupiti kopiju Python koda iz GitHub repozitorija časopisa Wireframe. Upišite sljedeću naredbu u terminal:

git klon https://github.com/Wireframe-Magazine/Wireframe-66.git

Alternativno, možete preuzmite komprimirani kod izravno sa stranice Wireframe GitHub.

Razbijanje kodeksa

Da biste razumjeli što kod radi, prvo pokrenite igru ​​Excitebike. Učinite to tako da odete do izvornog koda i zatim ga pokrenete koristeći Pygame Zero:

CD Wireframe-66/izvor-code-excitebike/
pgzrunexitebike.py

Zatim možete otvoriti datoteku exitebike.py s uređivačem teksta da biste vidjeli kod.

The crtati funkcija crta pozadinu dok se slika bicikla pomiče. A "blit" odnosi se na blok koji je nacrtan na ekranu. Riječ, "pozadina," odnosi se na pozadinsku sliku (povezivanje slika s pozadinskim blokom je zahvaljujući uvezenim modulima Pygame Zero).

defcrtati():
screen.blit("pozadina", (0, 0))
drawTrack()
bicikl.crtati()
screen.draw.text("VRIJEME KRUGA: "+str (int (vrijeme.vrijeme() - vrijeme početka)), (20, 555), boja=(255,255,255), veličina fonta=50)
screen.draw.text("POSLJEDNJI KRUG: "+str (lastLap), topright = (780, 555),color=(255,255,255), fontsize=50)

Također ćete primijetiti izračune za vrijeme kruga i zadnji krug (to je predstavljeno brojačem vremena na dnu zaslona). Prolazno vrijeme stalno izračunava razliku između početnog pritiska tipke sa strelicom desno (startno vrijeme) i trenutnog vremena.

Posljednji krug je sličan izračun. Umjesto vremena starta, vrijeme se računa od trenutka kada motocikl prođe unaprijed definiranu poziciju staze (navedenu kao trackPos < -4800 u kodu). Stavke u nastavku pod navodnicima predstavljaju sliku.

Ovaj kod crta blokove slike na ekranu u određenim intervalima i određenim položajima na ekranu. Isporučena slika gomile široka je samo 100 piksela. Ipak, kod ispod govori računalu kada treba nacrtati sliku tako da izgleda kao da postoji simulirana gužva iza motocikla dok se kreće.

Slike stijena prikazuju se na ekranu u dva dijela. Drugi i treći red koda, u nastavku, rade zajedno kako bi simulirali krajolik na uredan način.

Nakon što stvorite sigurnosnu kopiju python koda, pokušajte promijeniti donje brojeve da vidite što se događa sa kamenjem na ekranu!

screen.blit("gomila1", ((t*100)+trackOffset-100, 0))
screen.blit("stijena1", ((t*100)+trackOffset-100, 270))
screen.blit("stijena1", ((t*100)+trackOffset-50, 270))

Želite li svoj motor zamijeniti Monster kamionom, četverotočkašem ili drugim vozilom? Možda se želite utrkivati ​​s jednorogom do cilja?

Sve što trebate učiniti je nacrtati sliku 50x50px (s prozirnom pozadinom). Zatim smjestite ovu datoteku (picture.png) u 'slike' mapu (unutar izvorni kod-excitebike mapa). Htjet ćete izraditi dvije slike (jednu s malo povećanom visinom) kako biste dodali malo realizma. Sve što trebate učiniti je promijeniti referencu u 'bicikl 0' ovdje:

bicikl = glumac('bicikl0', centar=(150, 350), sidro=('centar', 'dno'))

Također provjerite jeste li izvršili radnju traženja i zamjene s nazivom slike (bez proširenja slike).

provjeriBikeRamp() je funkcija koja radi izračunavanje Y osi tako da vaš motocikl (ili kamion) ide uz rampu (i dobije malo zraka ako imate sreće). The tipkovnica.desno i tipkovnica.lijevo parametri su definirani u Ažuriraj() funkcija.

Ovi bitovi koda govore računalu da uspori ili ubrza motocikl (ovisno o tome koju tipku korisnik pritisne na tipkovnici). Prijevod: Što se brže vaš motocikl kreće, to je veći broj Y osi (ili vrlo veliki skok).

Poprečno, na on_key_down (tipka) funkcija će poslati vaš motocikl u poniranje.

if key.name == "DOLJE":
bicikl.smjer = 1
bicikl.trakaY = ograničiti(bike.laneY + 50, 375, 525)
bicikl.y += bicikl.smjer

The muckLane parametar će usporiti vaš motocikl koristeći sljedeći izračun:

muckLane = int((biciklistička stazaY-375)/50)+1

Redak 66 koda određuje kada prikazati 'muck' sliku na ekranu. Sada kada računalo zna kada će vaš motocikl prijeći preko blata, ono će usporiti brzinu vašeg motocikla na pola dok se krećete preko blata na stazi. Promijenite vrijednost muckLane s /50 na /25 ili /75 da vidite što će se sljedeće dogoditi.

Trkači (hm, Python programeri)! Pokrenite svoje motore!

Čak i ako vam nije ugodno programirati ovaj hommage Excitebikeu od nule, ovaj kod je još uvijek izvrstan početnik. Podešavanjem i uvidom u vizualni učinak promjena možete puno naučiti. Hoćeš li pokušati dodati još značajki ili AI trkaćih igrača u svoju igru? Samo naprijed!

Uz malo vježbanja Pythona, još jedna ideja koju možete isprobati je dodavanje različitih razina nakon što prođete kroz cilj nakon 4 ili 5 puta. Također, možda ćete htjeti dodati nagrade za prvo, drugo i treće mjesto. Ako ste na prvom mjestu, dodajte i audio datoteku za navijanje publike! Postoji toliko mnogo mogućnosti.

Kada ste zadovoljni svojim Excitebike poboljšanjima, zašto se ne biste pozabavili stvaranjem tekstualne avanturističke igre? Postoji mnogo različitih dijelova koji će osigurati da učite nešto uzbudljivo satima, danima ili čak tjednima!