Lær å lage et enkelt spill med Python!

Dette er et innlegg av Opplæringen Medlem av Teamet, Julian Meyer, en 13-år-gamle python-utvikler. Du finner ham på Google+ og Twitter.

Har du noen gang lurt på hvordan tv-spill er opprettet? Det er ikke så komplisert som du kanskje tror!

I denne opplæringen, vil du lage et enkelt spill kalt Kaniner og Grevlinger, hvor helten, bunny, har til forsvar for en slottet ditt mot en angripende horder av grevlinger., :O

for Å skrive dette spillet, vil du bruke Python. Nei, jeg snakker ikke om en stor slange! :]

Python er en datamaskin programmeringsspråk. Vi valgte Python for denne opplæringen fordi det er et enkelt språk å starte med, og er morsomt og lett å lære.

Hvis du er ny til Python, før du begynner sjekk ut denne boken: Tror Python: Hvordan til å Tenke Som en Forsker. Som bør få deg opp til hastighet.

Deretter dykke tilbake her og gjør deg klar – det er en krig som kommer på mellom kaniner og grevlinger. Holde lesing for å hoppe inn i kampen!,

Komme i Gang: Installere Python

Hvis du ønsker å prøve denne opplæringen på en PC med Windows, må du installere Python. Sørg for at du tak i 2.7.3-versjonen og IKKE den 3.3.0-versjonen! Etter at du har kjørt installasjonsprogrammet, bør du ha på TOMGANG i Alle Programmer-mappen på start-menyen. Lanseringen er INAKTIV for å komme i gang.

Hvis du er på en Mac, har du allerede Python installert! Bare åpne Terminal (/Programmer/Verktøy/Terminal.app), type i python, og trykk på Enter.

Merk: Hvis du installerer fra Python python.,org (og kanskje hvis du ønsker å få PyGame arbeid), så vil du også ha tilgang til å stille på Mac også. Det bør være i «/Programmer/Python 2.7» – mappen.

Hvis du gjorde det riktig, bør du se noe slikt som dette:

Merk: Hvis du ønsker å avslutte Python-ledeteksten (trippel vinkelparenteser, >>>), kan du enten skriver du exit() på Python-ledeteksten, og trykk på Retur eller du kan trykke Ctrl+D.,

Når du er på Python-ledeteksten, for å teste om Python er riktig å jobbe med, skriver du inn ut 1+1 og trykk Enter/Retur. Det bør skrive ut 2. Du har bare skrevet ditt første Python-program!

Nå som du vet Python fungerer på riktig måte, må du installere PyGame for å skrive et spill ved hjelp av Python.

PyGame er en Python-bibliotek som gjør skrive spill en mye enklere! Det gir funksjonalitet for eksempel bilde-håndtering og lyd som du kan enkelt inkludere i spillet.,

Gå her og last ned PyGame installer riktig for ditt system. Sørg for at du laster ned en Python-2.7-versjonen.

Merk: PyGame installer fra linken ovenfor vil ikke fungere med standard Python fra Apple, og som er installert på en Mac. Du trenger å laste ned fra Python python.org og installere det for å bruke PyGame. Eller, du kan installere Python og PyGame via MacPorts.

for Å bekrefte at du har PyGame riktig installert, åpne INAKTIV eller kjøre Python via Terminal og skriv i import pygame på Python-ledeteksten., Hvis dette ikke resultere i noen utgang, da er du god.

Hvis, på den annen side, er det utganger en feil som det er vist nedenfor, deretter PyGame er ikke installert.

Hvis du får en feilmelding som dette, poste på forumet, og jeg vil hjelpe deg å få det til å fungere.

å Kjøre Python-Kode fra en Fil

når du kan kjøre korte biter av Python-kode i Python be, hvis du ønsker å jobbe på et større program (for eksempel et spill), har du sannsynligvis ønsker å lagre din kode til en fil, slik at du ikke behøver å skrive det inn i igjen og igjen.

Det er flere måter å kjøre et Python-program som en fil., En måte er å bruke en ren tekst editor som Notepad (Windows) eller TextEdit (Mac). Åpne en ny tekst-fil, skriv i Python-koden (for eksempel skriv ut 1+1). Deretter kan du lagre det som XXX.py (XXX kan være et beskrivende navn på filen).

Klikk på Windows, dobbeltklikk på denne filen for å kjøre den. På Mac-maskinen åpner du Terminalen og skriver inn python, og deretter dra filen du lagret på Terminal-vinduet, og trykk Enter.

Den andre måten er å skrive inn koden din ved hjelp av LEDIG editor, som er det du kommer til å gjøre i denne opplæringen. Å kjøre på tomgang, rett og slett ledig fra Terminal., Deretter velger du Fil\Nytt Vindu fra INAKTIV meny, og du bør ha en tekst editor vindu der du kan skrive inn i Python-kode. Du kan lagre koden endringer via Fil\Lagre og selv kjøre koden via Kjør\Run-Modul (F5).

vær oppmerksom på at Run-menyen er bare tilgjengelig hvis du har en fil åpen i en editor vindu.

Legge til Spillet Ressurser

Du er nesten klar til å lage ditt spill. Men hva er et spill uten noen flott grafikk og lydeffekter? Jeg har satt sammen alle grafikk og lydeffekter vil du trenger for ditt spill i en ZIP-arkiv. Du kan laste det ned her.,

Når du har lastet ned filen, kan du opprette en mappe for spill på harddisken og trekke ut ressurser-mappen i mappen slik at spillet mappe som har en undermappe som heter ressurser, med ulike ressurser gruppert i flere mapper inne i det, som dette:

Du er nå klar til å begynne å lage Kaniner og Grevlinger. :]

Trinn 1: Hei Bunny

Kjøre på TOMGANG og åpne en ny tekst editor-vinduet, som nevnt i forrige avsnitt., Skriv inn følgende kode i redigeringsvinduet:

Lagre filen i spill-mappen (der ressurser undermappe er) og name it game.py.

La oss gå gjennom koden, seksjon for seksjon:

  1. Importere PyGame bibliotek. Dette lar deg bruke funksjonene fra biblioteket i programmet.
  2. Initialisere PyGame og sette opp vindu.
  3. Legg bildet som du vil bruke for bunny.
  4. Hold looping over følgende rykket inn koden.,

    Merk: der Hvor andre språk som Objective-C, Java eller PHP bruk krøllparentes å vise en blokk med kode for å bli henrettet innenfor en stund loop eller en if-setning, Python bruker innrykk for å identifisere kode blokker. Så riktig innrykk er svært viktig i Python – hold det i tankene. :]

  5. Fylle skjermen med svart før du tegne noe.
  6. Legg til bunny bilde som du har lagt til skjermen ved x=100 og y=100.
  7. Oppdatere skjermen.
  8. Sjekk for eventuelle nye hendelser, og hvis det er én, og det er en avslutt-kommandoen, kan du avslutte programmet.,

    Merk: i Henhold til PyGame dokumentasjon, bør du ikke trenger å ringe pygame.avslutt (), siden tolk vil automatisk ringe det når tolken slås av. Imidlertid, i det minste på Mac OS, spillet ville henge på avslutt med mindre pygame.avslutt() ble kalt.

Hvis du kjører koden nå (via Kjør\Run-Modulen i Inaktiv meny), skal du se et skjermbilde som ligner på den nedenfor:

w00t bunny er med i bildet, og klar for action!

Men spillet ser skremmende og ensom med bunny bare står der på en svart bakgrunn., Tid til pynt ting litt. :]

Trinn 2: Legg til Natur

La oss starte ved å legge til en bakgrunn til spillet scene. Dette kan gjøres med et par mer tv.blit() anrop.

På slutten av avsnittet #3, etter å ha lastet spilleren bilde, legg til følgende kode:

grass = pygame.image.load("resources/images/grass.png")castle = pygame.image.load("resources/images/castle.png")

Dette laster inn bilder og setter dem inn i spesifikke variabler. Nå har de til å bli tegnet på skjermen. Men hvis du sjekker gresset bilde, vil du legge merke til at det ikke vil dekke hele skjermen området, som er 640 x 480., Dette betyr at du må flis gresset over skjermen området for å dekke det helt.

Legg til følgende kode for å game.py i begynnelsen av avsnittet #6 (før spilleren er tegnet på skjermen):

Som du kan se, for-setningen looper gjennom x først. Deretter, i at for-løkke, det looper gjennom y og trekker gress på x-og y-verdier som genereres av for-løkker. De neste par linjer bare trekke slott på skjermen.

Hvis du kjører programmet nå, du skal få noe som dette:

Mye bedre – dette begynner å se bra ut!, :]

Trinn 3: Gjøre Bunny Move

Neste du trenger å legge til noen faktiske gameplay-elementer, som gjør bunny svarer til tastetrykkene.

for Å gjøre det første du skal gjennomføre en god metode for å holde oversikt over hvilke taster som skal trykkes i et gitt øyeblikk. Du kan gjøre dette ved å gjøre en rekke viktige stater som holder tilstand av hver tast du ønsker å bruke for spillet.

Legg til følgende kode for å game.py på slutten av avsnittet #2 (etter du angi skjermens høyde og bredde):

keys = playerpos=

Denne koden er ganske selvforklarende., Tastene array som holder orden på tastene trykkes i følgende rekkefølge: WASD. Hvert element i tabellen tilsvarer en nøkkel – først til B, den andre til En og så videre.

playerpos variabel er der programmet trekker spilleren. Siden spillet vil flytte spilleren til ulike posisjoner, det er lettere å ha en variabel som inneholder spiller posisjon og deretter er det bare å trekke spiller i den posisjonen.

Nå er du trenger å endre den eksisterende koden for tegning spilleren til å bruke den nye playerpos variabel., Endre følgende linje i punkt #6:

 screen.blit(player, (100,100))

Til:

 screen.blit(player, playerpos)

Neste, kan du oppdatere tastene utvalg basert på hvilke taster som skal trykkes på. PyGame gjør registrerer tastetrykk enkelt ved å legge til hendelsen.hovedfunksjon.

På slutten av avsnittet #8, rett etter blokken se etter hendelsen.type==pygame.SLUTTE, sette denne koden (på samme innrykk nivå som pygame.AVSLUTT hvis blokker):

Wow! De er mange linjer med kode. Hvis du bryter det ned i hvis uttalelsene om, det er ikke så komplisert.,

Første du sjekke for å se om en tast trykkes ned eller utgitt. Så du vil sjekke hvilken tast blir trykket inn, eller utgitt, og hvis tasten trykkes på eller frigjøres er en av tastene du bruker, kan du oppdatere tastene variabel tilsvarende.

til Slutt, du trenger å oppdatere playerpos variabel i respons til tastetrykk. Dette er faktisk veldig enkelt.

Legg til følgende kode til slutten av spillet.,py (med ett innrykk nivå, for å sette det på samme nivå som for-løkke):

 # 9 - Move player if keys: playerpos-=5 elif keys: playerpos+=5 if keys: playerpos-=5 elif keys: playerpos+=5

Denne koden bare sjekker hvilke av tastene trykkes ned og legger til eller trekker fra spillerens x-eller y-posisjon (avhengig av tasten trykkes) til å flytte spilleren.

Kjør spillet, og du bør få en spiller akkurat som før. Prøv å trykke WASD. Yay! Det fungerer.,

Trinn 4: Snu Bunny

Ja, kaninen beveger seg nå når du trykker på tastene, men ville ikke det være enda kulere om du kan bruke musen til å rotere bunny på å møte en retning du velger, så han ikke vender mot samme måte hele tiden? Det er enkelt nok til å gjennomføre bruke trigonometri.,

Ta en titt på følgende illustrasjon:

I bildet ovenfor, hvis (5,3) er plasseringen av bunny og (2,4) er den gjeldende posisjon for musen, kan du finne det rotasjon vinkel (z) ved å anvende atan2 trigonometriske funksjonen til forskjell i avstand mellom to punkter. Selvfølgelig, når du vet rotasjon vinkel, kan du bare vri bunny tilsvarende. :]

Hvis du er litt forvirret om denne del, ikke bekymre deg – du kan fortsette på uansett. Men dette er grunnen til at du bør betale oppmerksomhet i mattetimen!, :] Du vil bruke denne ting hele tiden i spillet programmering.

Nå er du trenger å bruke dette konseptet til spillet. For å gjøre dette, kan du bruke PyGame Overflaten.roter(grader) – funksjonen. Forresten, husk at Z-verdien er i radianer. : Hva med å la bunny skyte fiender ved hjelp av pilene? Dette er ingen mild-mannered kanin!

Dette trinnet er litt mer komplisert fordi du er nødt til å holde styr på alle piler, oppdatere dem, rotere dem og slette dem når de går utenfor skjermen.,

Først av alt, legge de nødvendige variablene til slutten av oppstart-delen, del #2:

acc=arrows=

Den første variabel som holder styr på spillerens korrektheten og den andre matrisen spor alle piler. Korrektheten variabel er i hovedsak en liste over det antall skudd som er avfyrt og antall grevlinger hit. Senere, vi skal bruke denne informasjonen til å beregne en nøyaktighet prosent.

Neste, legger pilen bilde på slutten av avsnittet #3:

arrow = pygame.image.load("resources/images/bullet.png")

Nå når en bruker klikker på musen, vises en pil behov for å brann., Legge til følgende på slutten av avsnittet #8 som en ny hendelse handler:

Denne koden kontrollerer om mus ble klikket på, og hvis det var, det blir musen posisjon og beregner pil rotasjon basert på rotert spiller posisjon og markørposisjonen. Denne rotasjonen verdien som er lagret i pilene i tabellen.

Neste, du må faktisk tegne piler på skjermen. Legg til følgende kode rett etter avsnittet #6.1:

vely og velx verdiene er beregnet ved hjelp av grunnleggende trigonometri. 10 er hastigheten av piler., En if-setning bare sjekker om kulen er out of bounds og hvis det er det, det sletter pil. Den andre for uttalelse looper gjennom pilene, og trekker dem med riktig rotasjon.

Prøv og kjør programmet. Du bør ha en kanin som skyter piler når du klikker på musen! 😀

Trinn 6: Ta Opp Armene! Grevlinger!

OK, du har et slott, og du har en helt som kan bevege seg og skyte. Så hva mangler? Fiender som angriper castle at helten kan skyte på!,

I dette trinnet, vil du opprette tilfeldig generert grevlinger som kjører på slottet. Det vil bli mer og mer grevlinger som spillet utvikler seg. Så, la oss lage en liste over hva du trenger å gjøre.

  1. Legg til skurkene en liste til en matrise.
  2. Oppdatere bad guy array hver ramme, og sjekk om de er off-skjermen.
  3. Vis de slemme gutta.

Lett, ikke sant?, :]

Først, legg til følgende kode til slutten av avsnittet #2:

badtimer=100badtimer1=0badguys=]healthvalue=194

De ovennevnte setter opp en tidtaker (samt et par andre verdier), slik at spillet legger til en ny grevling etter en viss tid har gått. Du redusere badtimer hver ramme til den er null, og deretter du lager en ny grevling.

Nå kan du legge til følgende på slutten av avsnittet #3:

badguyimg1 = pygame.image.load("resources/images/badguy.png")badguyimg=badguyimg1

Den første linjen ovenfor er lik alle de forrige bilde-legge inn koden. Den andre linjen setter opp en kopi av bildet, slik at du kan animere dårlig fyr mye lettere.,

Neste, du må oppdatere og vise de slemme gutta. Legg til denne koden rett etter avsnittet #6.2:

Mange av koden til å gå over. :] Den første linjen sjekker om badtimer er null og hvis det er, skaper en grevling og setter badtimer opp igjen basert på hvor mange ganger badtimer har kjørt så langt. Den første for-løkke oppdateringer x-posisjonen til grevling, sjekker om grevling er av skjermen, og fjerner grevling hvis det er offscreen. Den andre for-løkke trekker alle grevlinger.

for å bruke random-funksjon i koden ovenfor, må du også importere tilfeldig bibliotek., Slik legger du til følgende i slutten av punkt #1:

import random

til Slutt, legg til denne linjen rett etter mens uttalelse (avsnitt #4) for å øke verdien av badtimer for hver ramme:

badtimer-=1

Prøv alt dette koden ut ved å kjøre spillet. Nå bør du begynne å se noen reell spilling – du kan skyte, flytte, slå, og grevlinger prøver å løpe mot deg.

Men vent! Hvorfor er ikke grevlinger sprenge slottet? La oss raskt legge til at i…

Legg til denne koden rett før indeks+=1 i den første for-løkke i punkt #6.,3:

Denne koden er ganske enkel. Hvis grevling i x-verdien er mindre enn 64 til høyre, og deretter slette som bad guy og redusere spillet helse verdien av en tilfeldig verdi mellom 5 og 20. (Senere du vil vise gjeldende helse-verdien på skjermen.)

Hvis du bygge og kjøre programmet, bør du få en haug med å angripe grevlinger som forsvinner når de treffer slottet. Selv om du ikke kan se det, grevlinger er faktisk senke din helse.,

Trinn 7: Kollisjoner med Grevlinger og Piler

grevlinger er å angripe slottet ditt, men dine piler har ingen effekt på dem! Hvordan er en bunny ment å forsvare sitt hjem?

på Tide å sette på pilene for å drepe grevlinger, slik at du kan beskytte din borg og vinne spillet! I utgangspunktet, du nødt til å gå gjennom alle de slemme gutta, og inne i hver av de loops, er du nødt til å gå gjennom alle pilene og se om de kolliderer. Hvis de gjør, deretter slette grevling, slette pil, og legge den til din nøyaktighet forhold.

Rett etter avsnittet #6.3.,1, kan du legge til dette:

Det er bare én viktig ting å merke seg i denne koden. En if-setning er en innebygd PyGame funksjon som sjekker om to rektangler krysser hverandre. Den andre par linjer bare gjøre det som jeg har forklart ovenfor.

Hvis du kjører programmet, bør du til slutt være i stand til å skyte og drepe grevlinger.

Trinn 8: Legg til en HUD med Helse-Måleren og Klokke

spillet går ganske bra. Du har dine angripere, og du har din forsvarer. Nå er alt du trenger er en måte å holde stillingen, og for å vise hvor godt bunny er å gjøre.,

Den enkleste måten å gjøre dette på er å legge en HUD (Heads Up Display) som viser dagens helse nivå av slottet. Du kan også legge til en klokke til å vise hvor lenge slottet har overlevd.

Først legge til klokken. Legg til følgende kode rett før begynnelsen av avsnittet #7:

koden ovenfor oppretter en ny skrift med standard PyGame skrift satt til størrelse 24. Så at skriften brukes til å gjengi tekst av tiden på en overflate. Etter at teksten er plassert, og tegnet på skjermen.

Neste legg til helse bar., Men før du tegner helse bar, trenger du å laste inn bilder for bar. Legg til følgende kode til slutten av avsnittet #3:

healthbar = pygame.image.load("resources/images/healthbar.png")health = pygame.image.load("resources/images/health.png")

Den første er den røde bildet som brukes for full helse bar. Den andre er den grønne bildet som brukes for å vise gjeldende helse-nivå.

Nå kan du legge til følgende kode rett etter avsnittet #6.4 (som du nettopp har lagt til) å trekke helse bar på skjermen:

 # 6.5 - Draw health bar screen.blit(healthbar, (5,5)) for health1 in range(healthvalue): screen.blit(health, (health1+8,8))

– koden først trekker all-rød helse bar. Så det trekker en viss mengde grønne over baren, i forhold til hvor mye liv har slottet igjen.,

Hvis du bygge og kjøre programmet, bør du ha en tidtaker og en helse bar.

Trinn 9: Vinner eller Taper

Men hva er dette? Hvis du spiller lenge nok, selv om helsen din går ned til null, spillet fortsetter! Ikke bare det, du kan fortsette å skyte på grevlinger, også. Som ikke kommer til å fungere, nå er det? Du trenger noen form for en seier/tap scenario for å gjøre spillet verdt å spille.

Så la oss legge de vinner og taper tilstand så vel som vinner eller taper skjermen. :] Du gjøre dette ved å gå ut ut av de viktigste loop og går inn i en vinn/tap-løkke., I vinne/tape loop, du er nødt til å finne ut om brukeren har vunnet eller tapt, og vise skjermen.

Her er en grunnleggende oversikt over de vinner/taper scenarier:

Hvis tiden er ute (90000 ms eller 90 sekunder) så:

  • Slutte å kjøre spillet
  • Angi utfallet av spillet til 1 eller vinne

Hvis slottet er ødelagt så:

  • Stopp kjører spillet
  • Angi utfallet av spillet til 1 eller vinne

Beregn den nøyaktighet uansett.

Merk: acc*1.0 er bare konvertere acc-et til en float., Hvis du ikke gjør dette, divisjon operand vil returnerer et heltall som 1 eller 2 i stedet for en dupp som 1.5

Legg til disse linjene til slutten av game.py:

Dette er den lengste bit av koden ennå! Men det er ikke så komplisert.

Den første if-setningen sjekker om tiden er ute. Den andre kontrollerer om castle (slott) er ødelagt. Den tredje beregner din nøyaktighet forhold. Etter det, kan en rask hvis uttalelse sjekker om du har vunnet eller tapt, og viser riktig bilde.

selvfølgelig, hvis du ønsker å vise bildene for å vinne og tape skjermer, så disse bildene må lastes først., Så legg til følgende kode til slutten av avsnittet #3:

gameover = pygame.image.load("resources/images/gameover.png")youwin = pygame.image.load("resources/images/youwin.png")

En mer rask ting. Endre delen #4 fra:

# 4 - keep looping throughwhile 1: badtimer-=1

Til:

# 4 - keep looping throughrunning = 1exitcode = 0while running: badtimer-=1

Den kjører variabel som holder styr på hvis spillet er over, og avslutt kode variabel som holder rede på om spilleren har vunnet eller tapt.

Kjøre spillet på nytt, og nå kan du enten vinne eller dø i forsøket! Kul. :]

Trinn 10: Umotivert Musikk og lydeffekter!

spillet ser ganske bra ut, men hvordan høres det ut? Det er litt rolig, er det ikke?, Å legge til noen lydeffekter kan endre hele følelsen av et spill.

PyGame gjør lasting og spille av lyder super enkelt. Først, må du initialisere det mikser ved å legge til dette på slutten av avsnittet #2:

pygame.mixer.init()

legg Deretter lyder og angi volumnivået på slutten av avsnittet #3:

de Fleste av koden ovenfor er rett og slett legge lyd filer og konfigurere lyd volum. Men ta hensyn til pygame.mikser.musikk.legg i linje – at linje laster bakgrunnsmusikk for spillet og neste linje angir bakgrunnsmusikk for å gjenta for alltid.,

Som tar seg av lyd-konfigurasjon. :] Nå er alt du trenger å gjøre er å spille de ulike lyd-effekter som er nødvendig. Gjøre det som per retningene i kommentarfeltet for det-koden nedenfor:

Kjøre spillet en gang til og du vil legge merke til at du nå har bakgrunnsmusikk og lydeffekter for kollisjoner og skyte. Spillet føles som mye mer levende! :]

Hvor Skal du Gå Fra Her?

Du bør være stolt av deg selv: du har nettopp ferdig med å lage et morsomt spill fullpakket med musikk, lydeffekter, en killer rabbit, kamikaze grevlinger og mer. Jeg fortalte deg at du kunne gjøre det!, :]

Du kan laste ned den siste kildekoden til spillet her.

På dette punktet, føl deg fri til å utvide dette spillet til din egen kreasjon! Kanskje prøv å skifte ut kunst med dine egne tegninger, eller legge til forskjellige våpen eller typer monstre i spillet!

har du spørsmål eller kommentarer om hva du har gjort i denne opplæringen? Hvis så, bli med i diskusjonen i forumet! Jeg ville elske å høre fra deg.


Dette er et innlegg av Opplæringen Medlem av Teamet, Julian Meyer, en 13-år-gamle python-utvikler.

raywenderlich.,com Ukentlig

raywenderlich.com nyhetsbrevet er den enkleste måten å holde seg oppdatert på alt du trenger å vite som en mobil utvikler.

Få en ukentlig sammendrag av vår opplæring og kurs, og motta et gratis i dybden e-kurset som en bonus!

– >

Gjennomsnittlig Rating

4.1/5

Legg til en vurdering for denne innhold

Logg på for å legge til en sekundær rating

15 rangeringer

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *