Excitebike er et sidescroller-spill hvor du navigerer en motorsykkel over hopp, manøvrerer rundt hindringer og setter fart mot målstreken.
Nintendo lanserte først dette BMX-racingspillet for NES. Derfra moderniserte selskapet Excitebike og ga den ut på N64 og til slutt Wii.
Det finnes ikke mange NES-konsoller lenger, noe som gjør det vanskelig å få tak i Excitebike igjen. Takket være noen retro-fans på Wireframe Magazine, kan et stykke Python-kode gjenskape denne NES-klassikeren for timevis med moro på din Raspberry Pi eller hjemme-PC.
Få koden og oppsett
Selv om du kan bruke nano eller vim til å redigere python-koden din, vil du dra nytte av en fullfunksjons tekstredigerer eller IDE.
Du må installere Pygame Zero for å støtte funksjonene som er bygget i denne hyllesten til Excitebike. Pygame Zero inneholder Python-moduler for spillskapere å fokusere uten å måtte gjenta enkle grunnlag.
Hvis du ikke har python3 installert på PC-en, kan du last ned den nyeste versjonen direkte fra Python. Det vil du også sørg for at du har PIP installert også.
Med den nyeste versjonen av Python og PIP installert, åpne PowerShell- eller Linux-terminalen og skriv inn:
pip3 installere pgnull
Til slutt må du hente en kopi av Python-koden fra Wireframe magazines GitHub-depot. Skriv inn følgende kommando i en terminal:
git klone https://github.com/Wireframe-Magazine/Wireframe-66.git
Alternativt kan du last ned postnummeret direkte fra Wireframe GitHub-siden.
Å bryte ned koden
For å forstå hva koden gjør, kjør først Excitebike-spillet. Gjør det ved å navigere til kildekoden og deretter kjøre den med Pygame Zero:
cd Wireframe-66/kilde-kode-excitebike/
pgzrunexitebike.py
Du kan deretter åpne filen exitebike.py med et tekstredigeringsprogram for å se koden.
De tegne funksjonen tegner bakgrunnen mens sykkelbildet beveger seg. en "blit" refererer til en blokk som er tegnet på skjermen. Ordet, "bakgrunn," refererer til bakgrunnsbildet (å koble bildene til bakgrunnsblokken er takket være de importerte Pygame Zero-modulene).
deftegne():
screen.blit("bakgrunn", (0, 0))
drawTrack()
sykkel.tegne()
screen.draw.text("RUNDETID: "+str (int (time.time() - startTime)), (20, 555),color=(255,255,255), fontsize=50)
screen.draw.text("SISTE RUNDE: "+str (lastLap), topright = (780, 555),color=(255,255,255), fontsize=50)
Du vil også legge merke til beregninger for rundetid og siste runde (dette er representert av tidstelleren nederst på skjermen). Rundetiden beregner hele tiden forskjellen mellom det første trykk på høyre piltast (starttid) og gjeldende tid.
Den siste runden er en lignende beregning. I stedet for starttidspunktet, beregnes tiden fra når motorsykkelen passerer en forhåndsdefinert baneposisjon (nevnt som trackPos < -4800 i koden). Elementene nedenfor i anførselstegn representerer et bilde.
Denne koden tegner bildeblokker på skjermen med bestemte intervaller og bestemte posisjoner på skjermen. Det medfølgende publikumsbildet er bare 100 px bredt. Likevel, koden nedenfor forteller datamaskinen når den skal tegne bildet slik at det ser ut som om det er en simulert folkemengde bak motorsykkelen mens den beveger seg.
Bergbildene vises på skjermen i to deler. Den andre og tredje linjen med kode, nedenfor, jobber sammen for å simulere landskapet på en ryddig måte.
Når du har laget en sikkerhetskopi av pythonkoden, prøv å endre tallene nedenfor for å se hva som skjer med steinene på skjermen!
screen.blit("publikum1", ((t*100)+trackOffset-100, 0))
screen.blit("stein1", ((t*100)+trackOffset-100, 270))
screen.blit("stein1", ((t*100)+trackOffset-50, 270))
Vil du bytte ut motorsykkelen din med en monstertruck, firehjuling eller et annet kjøretøy? Kanskje du vil kappløpe en enhjørning til målstreken?
Alt du trenger å gjøre er å tegne et 50x50px bilde (med en gjennomsiktig bakgrunn). Plasser deretter denne filen (picture.png) i 'Bilder'-mappen (i kildekode-excitebike mappe). Du vil lage to bilder (ett med en litt økt høyde) for å legge til litt realisme. Alt du trenger å gjøre er å endre referansen til 'sykkel 0' her:
sykkel = skuespiller('sykkel 0', senter=(150, 350), anker=('senter', 'bunn'))
Sørg også for å utføre en søk og erstatt-handling med navnet på bildet (uten bildeutvidelsen).
checkBikeRamp() er funksjonen som gjør jobben med å beregne Y-aksen slik at motorsykkelen din (eller lastebilen) går opp rampen (og får litt seriøs luft hvis du er heldig). De tastatur.høyre og tastatur.venstre parametere er definert i Oppdater() funksjon.
Disse kodebitene forteller datamaskinen å bremse motorsykkelen eller øke hastigheten (avhengig av hvilken tast brukeren trykker på på tastaturet). Oversettelse: Jo raskere motorsykkelen din beveger seg, desto høyere er nummeret på Y-aksen (eller veldig stort hopp).
På tvers er on_key_down (tast) funksjonen vil sende motorsykkelen din til et dykk.
hvis nøkkel.navn == "NED":
sykkel.retning = 1
bike.laneY = grense(bike.laneY + 50, 375, 525)
bike.y += bike.direction
De muckLane parameteren vil bremse motorsykkelen din ved å bruke følgende beregning:
muckLane = int((bike.laneY-375)/50)+1
Linje 66 i koden bestemmer når "møkk"-bildet skal vises på skjermen. Nå som datamaskinen vet når motorsykkelen din vil passere over møkka, vil den senke motorsykkelhastigheten til to når du beveger deg over møkka på banen. Endre muckLane-verdien fra /50 til /25 eller /75 for å se hva som skjer videre.
Racers (ahem, Python-programmerere)! Start motorene dine!
Selv om du ikke er komfortabel med å programmere denne hyllesten til Excitebike fra bunnen av, er denne koden fortsatt en flott primer. Ved å finpusse den, og innse den visuelle effekten av endringene, kan du lære mye. Vil du prøve å legge til flere funksjoner eller AI-racere i spillet ditt? Gå for det!
Med litt Python-øvelse under beltet, er en annen idé å prøve å legge til forskjellige nivåer når du passerer målstreken etter 4 eller 5 ganger. I tillegg kan det være lurt å legge til belønninger for første, andre og tredje plass. Hvis du er på førsteplass, legg til en folkejubel lydfil også! Det er så mange muligheter.
Når du er fornøyd med Excitebike-forbedringene, hvorfor ikke ta fatt på å lage et teksteventyrspill? Det er mange forskjellige stykker som vil sikre at du lærer noe spennende i timer, dager eller til og med uker!