Excitebike is een side-scroller-game waarin je met een motor over sprongen navigeert, om obstakels heen manoeuvreert en naar de finish racet.
Nintendo lanceerde dit BMX-racespel voor het eerst voor de NES. Van daaruit moderniseerde het bedrijf Excitebike en bracht het uit op de N64 en uiteindelijk de Wii.
Er zijn niet veel NES-consoles meer, waardoor het moeilijk is om Excitebike opnieuw te spelen. Dankzij enkele retro-fans bij Wireframe Magazine kan een stukje Python-code deze NES-klassieker nabootsen voor urenlang speelplezier op je Raspberry Pi of pc thuis.
De code ophalen en instellen
Hoewel u nano of vim kunt gebruiken om uw python-code te bewerken, wilt u profiteren van een volledig uitgeruste teksteditor of IDE.
Je moet Pygame Zero installeren om de ingebouwde functies van dit eerbetoon aan Excitebike te ondersteunen. Pygame Zero bevat Python-modules waarop gamemakers zich kunnen concentreren zonder dat ze eenvoudige fundamenten hoeven te herhalen.
Als je python3 niet op je pc hebt geïnstalleerd, kan dat
de nieuwste versie downloaden rechtstreeks van Python. Je zult het ook willen zorg ervoor dat u PIP hebt geïnstalleerd te.Met de nieuwste versie van Python en PIP geïnstalleerd, opent u uw PowerShell- of Linux-terminal en typt u:
pip3 installeren pgnul
Ten slotte moet u een kopie van de Python-code ophalen uit de GitHub-repository van het tijdschrift Wireframe. Typ de volgende opdracht in een terminal:
gek kloon https://github.com/Wireframe-Magazine/Wireframe-66.git
Als alternatief kan dat download de gezipte code rechtstreeks vanaf de Wireframe GitHub-pagina.
De code opsplitsen
Om te begrijpen wat de code doet, voer je eerst het spel Excitebike uit. Doe dit door naar de broncode te navigeren en deze vervolgens uit te voeren met Pygame Zero:
CD Wireframe-66/bron-code-excitebike/
pgzrunexitebike.py
U kunt vervolgens het bestand exitebike.py openen met een teksteditor om de code te bekijken.
De tekenen functie tekent de achtergrond terwijl het fietsbeeld beweegt. A "blit" verwijst naar een blok dat op het scherm wordt getekend. Het woord, "achtergrond," verwijst naar de achtergrondafbeelding (het koppelen van de afbeeldingen aan het achtergrondblok is dankzij de geïmporteerde Pygame Zero-modules).
deftekenen():
scherm.blit("achtergrond", (0, 0))
tekenTrack()
fiets.tekenen()
scherm.tekenen.tekst("RONDETIJD: "+str (int (tijd.tijd() - starttijd)), (20, 555),kleur=(255.255.255), lettergrootte=50)
scherm.tekenen.tekst("LAATSTE RONDE: "+str (lastLap), rechtsboven = (780, 555),kleur=(255.255.255), lettergrootte=50)
U ziet ook berekeningen voor de rondetijd en de laatste ronde (dit wordt weergegeven door de tijdteller onderaan het scherm). De rondetijd berekent voortdurend het verschil tussen de eerste keer dat u op de rechterpijltoets drukt (starttijd) en de huidige tijd.
De laatste ronde is een vergelijkbare berekening. In plaats van de starttijd wordt de tijd berekend vanaf het moment dat de motor een vooraf gedefinieerde baanpositie passeert (vermeld als trackPos < -4800 in de code). De onderstaande items tussen aanhalingstekens vertegenwoordigen een afbeelding.
Deze code tekent beeldblokken op het scherm met bepaalde tussenpozen en bepaalde posities op het scherm. De geleverde menigte afbeelding is slechts 100px breed. Toch vertelt de onderstaande code de computer wanneer de afbeelding moet worden getekend, zodat het lijkt alsof er een gesimuleerde menigte achter de motorfiets staat terwijl deze beweegt.
De rotsbeelden worden in twee delen op het scherm weergegeven. De tweede en derde regel code, hieronder, werken samen om het landschap netjes te simuleren.
Nadat u een reservekopie van de python-code hebt gemaakt, probeert u de onderstaande nummers te wijzigen om te zien wat er met de rotsen op het scherm gebeurt!
scherm.blit("menigte1", ((t*100)+trackOffset-100, 0))
scherm.blit("rots1", ((t*100)+trackOffset-100, 270))
scherm.blit("rots1", ((t*100)+trackOffset-50, 270))
Wil je je motor vervangen door een Monstertruck, vierwieler of een ander voertuig? Misschien wil je met een eenhoorn naar de finish racen?
Het enige dat u hoeft te doen, is een afbeelding van 50x50px tekenen (met een transparante achtergrond). Plaats dan dit bestand (picture.png) in de 'afbeeldingen' map (in de broncode-excitebike map). U wilt twee afbeeldingen maken (een met een iets grotere hoogte) om wat realisme toe te voegen. Het enige dat u hoeft te doen, is de verwijzing wijzigen in 'fiets0' hier:
fiets = Acteur('fiets0', midden=(150, 350), anker=('centrum', 'onderkant'))
Zorg er ook voor dat u een zoek- en vervangactie uitvoert met de naam van de afbeelding (zonder de afbeeldingsextensie).
checkBikeRamp() is de functie die het werk doet om de Y-as te berekenen zodat je motor (of vrachtwagen) de helling op gaat (en wat serieuze lucht krijgt als je geluk hebt). De toetsenbord.rechts En toetsenbord.links parameters zijn gedefinieerd in de update() functie.
Deze codebits vertellen de computer om de motor te vertragen of te versnellen (afhankelijk van welke toets de gebruiker op het toetsenbord indrukt). Vertaling: hoe sneller je motor beweegt, hoe hoger het nummer van de Y-as (of zeer grote sprong).
Dwars, de on_key_down (sleutel) functie zal uw motor in een duikvlucht sturen.
if sleutel.naam == "OMLAAG":
fietsrichting = 1
bike.laneY = begrenzing(fietspadY + 50, 375, 525)
fiets.y += fiets.richting
De muckLane parameter zal uw motor vertragen met behulp van de volgende berekening:
muckLane = int((fietsbaanY-375)/50)+1
Regel 66 van de code bepaalt wanneer de 'muck'-afbeelding op het scherm moet worden weergegeven. Nu de computer weet wanneer je motor over de modder gaat, zal hij de snelheid van je motor halveren terwijl je over de modder op de baan rijdt. Wijzig de muckLane-waarde van /50 in /25 of /75 om te zien wat er daarna gebeurt.
Racers (ahem, Python-programmeurs)! Start je motoren!
Zelfs als je dit eerbetoon aan Excitebike niet helemaal opnieuw wilt programmeren, is deze code nog steeds een geweldige inleiding. Door het aan te passen en de visuele impact van de wijzigingen te realiseren, kun je veel leren. Probeer je meer functies of AI-racers toe te voegen aan je game? Ga ervoor!
Met een beetje Python-oefening onder je riem, is een ander idee dat je kunt proberen, het toevoegen van verschillende niveaus zodra je de finishlijn na 4 of 5 keer passeert. Misschien wilt u ook beloningen toevoegen voor de eerste, tweede en derde plaats. Als je op de eerste plaats staat, voeg dan ook een juichend audiobestand toe! Er zijn zoveel mogelijkheden.
Als je tevreden bent met je Excitebike-verbeteringen, waarom begin je dan niet met het maken van een tekstavonturenspel? Er zijn veel verschillende stukken die ervoor zorgen dat je uren, dagen of zelfs weken iets spannends leert!