Lær at lave et simpelt spil med Python!

Dette er et indlæg af Tutorial teammedlem Julian Meyer, en 13-årig python-Udvikler. Du kan finde ham på Google + og T anditter.

har du nogensinde spekuleret på, hvordan videospil oprettes? Det er ikke så kompliceret, som du måske tror!

i denne tutorial opretter du et simpelt spil kaldet Bunnies and Badgers, hvor helten, bunny, skal forsvare et slot mod en angribende horde af badgers., : O

for at skrive dette spil bruger du Python. Nej, jeg taler ikke om en stor slange! :]

Python er et computer programmeringssprog. Vi valgte Python til denne tutorial, fordi det er et simpelt sprog at starte med, og det er sjovt og nemt at lære.

Hvis du er ny til Python, før du begynder tjek denne bog: Tænk Python: Sådan tænker du som en computerforsker. Det burde få dig op i fart.

dyk derefter tilbage her og gør dig klar – der kommer en krig mellem bunnies og badgers. Fortsæt med at læse for at hoppe ind i krisen!,

Kom godt i Gang: Installation af Python

Hvis du ønsker at prøve denne tutorial på en Windows PC, skal du installere Python. Sørg for, at du griber fat i 2.7.3-versionen og ikke 3.3.0-versionen! Når du har kørt installationsprogrammet, skal du have inaktiv i mappen Alle programmer i din startmenu. Start tomgang for at komme i gang.

Hvis du er på en Mac, har du allerede Python installeret! Bare åbne Terminal (/Programmer/Hjælpeprogrammer / Terminal.app), skriv python og tryk på Enter. Bemærk: Hvis du installerer Python fra python.,org (og måske nødt til, hvis du ønsker at få PyGame arbejde), så har du også adgang til tomgang på Mac så godt. Det skal være i mappen”/Applications / Python 2.7″.

Hvis du gjorde det korrekt, burde du se noget som dette:

Bemærk: Hvis du ønsker at forlade Python-prompten (triple vinkel beslag, >>>), du kan enten skrive exit() på Python-prompten, og tryk på Retur eller du kan trykke på Ctrl+D.,

Når du er ved Python-prompten, skal du indtaste print 1+1 og trykke på Enter / Return for at teste, om Python fungerer korrekt. Det skal udskrive 2. Du har lige skrevet dit første Python-program!

nu hvor du ved, at Python fungerer korrekt, skal du installere PyGame for at skrive et spil ved hjælp af Python.PyGame er et Python-bibliotek, der gør skrivespil meget lettere! Det giver funktionalitet som billedhåndtering og lydafspilning, som du nemt kan indarbejde i dit spil.,

gå her og Do .nload det PyGame-installationsprogram, der passer til dit system. Sørg for at do .nloade en Python 2.7 version.

Bemærk: PyGame-installationsprogrammet fra linket ovenfor fungerer ikke med standard Python fra Apple, der er installeret på en Mac. Du skal do Pythnloade Python fra python.org og installere det for at bruge PyGame. Eller du kan installere både Python og PyGame via MacPorts.

for at bekræfte, at du har PyGame installeret korrekt, skal du åbne tomgang eller køre Python via terminalen og indtaste import pygame ved Python-prompten., Hvis dette ikke resulterer i noget output, så er du god.

Hvis det på den anden side udsender en fejl som det, der er vist nedenfor, er PyGame ikke installeret.

Hvis du får en fejl som denne, skal du skrive på foraene, så hjælper jeg dig med at få det til at fungere.

at Køre Python-Kode fra Fil

Mens du kan køre korte stumper af Python-kode i Python-prompten, hvis du ønsker at arbejde på et større program (som et spil), har du sandsynligvis ønsker at gemme din kode i en fil, så du ikke behøver at skrive det i igen og igen.

der er flere måder at køre et Python-program som en fil., En måde er at bruge en almindelig teksteditor som Notepad (Windowsindo .s) eller te .tedit (Mac). Åbn en ny tekstfil, skriv din Python-kode (som print 1+1). Gem det derefter som XXX.py (X.. kan være et beskrivende filnavn).

dobbeltklik derefter på Windowsindo .s på denne fil for at køre den. Åbn Terminal på Mac, og skriv python, træk derefter den fil, du har gemt, til terminalvinduet, og tryk på Enter.den anden måde er at indtaste din kode ved hjælp af inaktiv editor, hvilket er hvad du skal gøre i denne tutorial. For at køre tomgang skal du blot skrive tomgang fra Terminal., Vælg derefter File\ne.Windowindo. fra TOMGANGSMENUEN, og du skal have et tekstredigeringsvindue, hvor du kan indtaste Python-kode. Du kan gemme dine kodeændringer via File\Save og endda køre koden via Run\Run Module (F5).bemærk, at menuen Kør kun er tilgængelig, hvis du har en fil åben i et editorvindue.

tilføjelse af spilressourcer

du er næsten klar til at oprette dit spil. Men hvad er et spil uden nogle gode grafik og lydeffekter? Jeg har sammensat alle de grafik og lydeffekter, du har brug for til dit spil, i et .ip-arkiv. Du kan do .nloade det her.,

Når du har downloadet filen, skal du oprette en mappe til dit spil på din harddisk og udvinde de ressourcer, mappe i denne mappe, så dit spil-mappen har en undermappe navngivet ressourcer, med forskellige ressourcer, inddelt i flere mapper inde i det, som dette:

Du er nu klar til at begynde at skabe Gækkebreve og Grævlinger. :]

Trin 1: Hej Bunny

Kør tomgang og åbn et nyt tekstredigeringsvindue, som nævnt i det foregående afsnit., Indtast følgende kode i editorvinduet:

Gem filen i din spilmappe (den, hvor undermappen ressourcer er), og navngiv den game.py.

lad os gennemgå koden sektion for sektion:

  1. Importer PyGame-biblioteket. Dette giver dig mulighed for at bruge funktioner fra biblioteket i dit program.
  2. Initialiser PyGame og indstil displayvinduet.
  3. indlæs det billede, du vil bruge til kaninen.
  4. hold looping over følgende indrykket kode.,bemærk: hvor andre sprog som Objective-C, Java eller PHP bruger krøllede seler til at vise en blok kode, der skal udføres inden for et stykke tid loop eller en if-sætning, bruger Python indrykning til at identificere kodeblokke. Så korrekt indrykning er meget vigtig i Python – husk det. :]
  5. fyld skærmen med sort, før du tegner noget.
  6. tilføj det kaninbillede, du har indlæst på skærmen ved 100=100 og y=100.
  7. Opdater skærmen.
  8. kontroller for nye begivenheder, og hvis der er en, og det er en afslutningskommando, skal du afslutte programmet.,bemærk: i henhold til PyGame-dokumentationen skal du ikke ringe til pygame.Afslut () da tolken automatisk vil kalde det, når tolken lukker ned. Men i det mindste på Mac OS, spillet ville hænge på e .it medmindre pygame.Afslut () blev kaldt.

Hvis du kører koden nu (via Køre\Run Modul i Tomgang menu), bør du se en skærm, der ligner den nedenfor:

w00t bunny er i den scene, og klar til action!

men spillet ser skræmmende og ensomt ud med kaninen, der bare står der på en sort baggrund., Tid til at prætificere tingene lidt. :]

Trin 2: Tilføj sceneri

lad os starte med at tilføje en baggrund til spilscenen. Dette kan gøres med et par mere skærm.blit () opkald.

i slutningen af afsnit #3, efter ilægning af spilleren billede, skal du tilføje følgende kode:

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

Dette indlæser billederne og sætter dem ind i specifikke variabler. Nu skal de tegnes på skærmen. Men hvis du tjekker græsbilledet, vil du bemærke, at det ikke dækker hele skærmområdet, hvilket er 640.480., Dette betyder, at du skal flise græsset over skærmområdet for at dække det helt.

tilføj følgende kode til game.py i begyndelsen af afsnit #6 (før afspilleren tegnes på skærmen):

som du kan se, løber for-sætningen først gennem x. Derefter, inden for det for loop, løber det gennem y og trækker græsset ved de values-og y-værdier, der genereres af for-sløjferne. De næste par linjer tegner bare slottene på skærmen.

Hvis du kører programmet nu, skal du få noget som dette:

meget bedre – dette begynder at se godt ud!, :]

Trin 3: Gør Bunny flytte

næste skal du tilføje nogle faktiske gameplay elementer, som at gøre bunny reagere på tastetryk.for at gøre det skal du først implementere en god metode til at holde styr på, hvilke taster der trykkes på et givet tidspunkt. Du kan gøre dette ved blot at lave en række nøglestater, der holder tilstanden for hver nøgle, du vil bruge til spillet.

tilføj følgende kode til game.py 2 (Efter at du har indstillet skærmens højde og bredde):

keys = playerpos=

denne kode er ret selvforklarende., Keys array holder styr på de taster, der trykkes i følgende rækkefølge: WASASD. Hvert element i arrayet svarer til en nøgle-den første til W, den anden til A og så videre.

playerpos-variablen er, hvor programmet trækker afspilleren. Da spillet vil flytte spilleren til forskellige positioner, er det lettere at have en variabel, der indeholder spillerens position og derefter blot trække spilleren på den position.

nu skal du ændre den eksisterende kode til tegning af afspilleren for at bruge den nye playerpos-variabel., Skift følgende linje i Afsnit # 6:

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

til:

 screen.blit(player, playerpos)

opdater derefter tastearrayet baseret på hvilke taster der trykkes på. PyGame gør det nemt at opdage tastetryk ved at tilføje begivenhed.hovedfunktion.

i slutningen af afsnit #8, lige efter blokken kontrol for begivenhed.type==pygame.Afslut, læg denne kode (på samme indrykningsniveau som pygame.Afslut hvis Blok):

Wowo!! Det er mange kodelinjer. Hvis du bryder det ned i if-udsagnene, er det dog ikke så kompliceret.,

Kontroller først, om en tast trykkes ned eller frigives. Derefter kontrollerer du, hvilken tast der trykkes eller frigives, og hvis tasten, der trykkes eller frigives, er en af de taster, du bruger, opdaterer du tastevariablen i overensstemmelse hermed.

endelig skal du opdatere playerpos-variablen som svar på tastetryk. Dette er faktisk meget simpelt.

tilføj følgende kode til slutningen af spillet.,py (med et indrykningsniveau, der sætter det på samme niveau som for-løkken):

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

denne kode kontrollerer blot, hvilken af tasterne der trykkes på, og tilføjer eller trækker fra spillerens position-eller y-position (afhængigt af den trykede tast) for at flytte afspilleren.

Kør spillet, og du skal få en spiller ligesom før. Prøv at trykke på WASASD. Yay! Det virker.,

Trin 4: drejning af Bunny

Ja, din kanin bevæger sig nu, når du trykker på tasterne, men ville det ikke være endnu køligere, hvis du kunne bruge musen til at rotere kaninen for at møde en retning, du vælger, så han ikke vender på samme måde hele tiden? Det er simpelt nok at implementere ved hjælp af trigonometri.,

Tag et kig på følgende illustration:

På billedet ovenfor, hvis (5,3) er positionen af bunny og (2,4) er den aktuelle position af musen, kan du finde drejevinkel (z) ved at anvende atan2 trigonometriske funktion til forskellen i afstand mellem to punkter. Når du først kender rotationsvinklen, kan du naturligvis blot rotere kaninen i overensstemmelse hermed. :]

Hvis du er lidt forvirret over denne del, skal du ikke bekymre dig – Du kan fortsætte alligevel. Men det er derfor, du skal være opmærksom i matematik klasse!, :] Du bruger disse ting hele tiden i spilprogrammering.

nu skal du anvende dette koncept til dit spil. For at gøre dette kan du bruge Pygame-overfladen.rotere (grader) funktion. Husk i øvrigt, at value-værdien er i radianer. : Hvad med at lade bunny skyde fjender ved hjælp af pile? Dette er ingen mild-manierede kanin!

dette trin er lidt mere kompliceret, fordi du skal holde styr på alle pilene, opdatere dem, rotere dem og slette dem, når de går off-screen., tilføj først de nødvendige variabler til slutningen af initialiseringsafsnittet, afsnit #2:

acc=arrows=

den første variabel holder styr på spillerens nøjagtighed, og det andet array sporer alle pilene. Nøjagtighedsvariablen er i det væsentlige en liste over antallet af skud, der er fyret, og antallet af badgers hit. Senere bruger vi disse oplysninger til at beregne en nøjagtighedsprocent.Indlæs derefter pilebilledet i slutningen af afsnit #3:

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

nu, når en bruger klikker med musen, skal en pil fyres., Tilføj følgende til slutningen af afsnit # 8 som en ny begivenhedshåndterer:

denne kode kontrollerer, om musen blev klikket, og hvis den var, får den musepositionen og beregner pilens rotation baseret på den roterede spillerposition og markørpositionen. Denne rotationsværdi gemmes i Arro.array.

Dernæst skal du faktisk tegne pilene på skærmen. Tilføj følgende kode lige efter Afsnit #6.1:

vely-og vel. – værdierne beregnes ved hjælp af grundlæggende trigonometri. 10 er pilens hastighed., If-sætningen kontrollerer bare, om kuglen er uden for grænserne, og hvis den er, sletter den pilen. Den anden til sætning løber gennem pilene og trækker dem med den rigtige rotation.

prøv at køre programmet. Du skal have en kanin, der skyder pile, når du klikker med musen! : D

Trin 6: Tag våben op! Grævlinger!

OK, du har et slot, og du har en helt, der kan flytte og skyde. Så hvad mangler? Fjender, der angriber slottet, at helten kan skyde på!,

i dette trin opretter du tilfældigt genererede badgers, der kører på slottet. Der vil være flere og flere grævlinger som spillet skrider frem. Så lad os lave en liste over, hvad du skal bruge den til at gøre.

  1. Tilføj onde til en liste et array.
  2. opdater den dårlige fyr array hver ramme og kontrollere, om de er slukket skærmen.
  3. Vis de onde.

let, ikke?, :]

Tilføj først følgende kode til slutningen af afsnit #2:

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

ovenstående indstiller en timer (såvel som et par andre værdier), så spillet tilføjer en ny grævling efter nogen tid er gået. Du sænker badtimer hver ramme, indtil den er nul, og så gyder du en ny grævling.

Tilføj nu følgende til slutningen af afsnit #3:

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

den første linje ovenfor ligner alle de forrige billedindlæsningskoder. Den anden linje opretter en kopi af billedet, så du kan animere den dårlige fyr meget lettere.,

Dernæst skal du opdatere og vise de onde. Tilføj denne kode lige efter afsnit #6.2:

masser af kode til at gå over. : ] Den første linje kontrollerer, om badtimer er nul, og hvis det er, opretter en badger og sætter badtimer op igen baseret på hvor mange gange badtimer har kørt indtil videre. Den første til loop opdaterer bad-positionen på grævlingen, kontrollerer, om grævlingen er væk fra skærmen, og fjerner grævlingen, hvis den er offscreen. Den anden for loop trækker alle badgers.

for at bruge den tilfældige funktion i ovenstående kode skal du også importere det tilfældige bibliotek., Så tilføj følgende til slutningen af afsnit #1:

import random

Endelig, så tilføj denne linje lige efter, mens erklæring (afsnit #4) at formindske værdien af badtimer til hvert billede:

badtimer-=1

Prøv at søge på hele denne kode ud af spillet kører. Nu skal du begynde at se nogle rigtige gameplay – du kan skyde, flytte, dreje og badgers forsøge at køre på dig.

men vent! Hvorfor sprænger grævlingen ikke slottet i luften? Lad os hurtigt tilføje det ind…

Tilføj denne kode lige før indekset+=1 på den første For loop i Afsnit #6.,3:

denne kode er ret simpel. Hvis badgerens value-Værdi er mindre end 64 til højre, skal du slette den dårlige fyr og mindske spilets sundhedsværdi med en tilfældig værdi mellem 5 og 20. (Senere vil du vise den aktuelle sundhedsværdi på skærmen. hvis du bygger og kører programmet, skal du få en masse angribende badgers, der forsvinder, når de rammer slottet. Selvom du ikke kan se det, sænker badgers faktisk dit helbred.,

Trin 7: Kollisioner med Grævlinger og Pile

grævlinger angriber dit slot, men dine pile har ingen effekt på dem! Hvordan skal en kanin forsvare sit hjem?

tid til at indstille pilene til at dræbe grævlinger, så du kan beskytte dit slot og vinde spillet! Dybest set, du er nødt til at sløjfe gennem alle de onde og inde i hver af disse sløjfer, du er nødt til at sløjfe gennem alle pilene og kontrollere, om de kolliderer. Hvis de gør det, skal du slette grævlingen, slette pilen og tilføje en til dit nøjagtighedsforhold.

lige efter Afsnit #6.3.,1, Tilføj dette:

Der er kun en vigtig ting at bemærke i denne kode. If-sætningen er en indbygget PyGame-funktion, der kontrollerer, om to rektangler skærer hinanden. De andre par linjer gør bare hvad jeg forklarede ovenfor.

Hvis du kører programmet, skal du endelig kunne skyde og dræbe badgers.

Trin 8: Tilføj en HUD med Sundhed Meter og Ur

spillet fremad temmelig godt. Du har dine angribere, og du har din forsvarer. Nu er alt hvad du behøver, er en måde at holde score og for at vise, hvor godt bunny gør.,

den nemmeste måde at gøre dette på er at tilføje en HUD (Heads Up Display), der viser det aktuelle sundhedsniveau for slottet. Du kan også tilføje et ur for at vise, hvor længe slottet har overlevet.

Tilføj først uret. Tilføj følgende kode lige før begyndelsen af afsnit # 7:

ovenstående kode opretter simpelthen en ny skrifttype ved hjælp af standard PyGame-skrifttypen indstillet til størrelse 24. Derefter bruges denne skrifttype til at gengive tidens tekst på en overflade. Derefter placeres teksten og tegnes påskærmen.

næste Tilføj sundhedslinjen., Men før du tegner sundhedslinjen, skal du indlæse billederne til baren. Tilføj følgende kode til slutningen af afsnit # 3:

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

den første er det røde billede, der bruges til hele sundhedslinjen. Det andet er det grønne billede, der bruges til at vise det aktuelle sundhedsniveau.tilføj nu følgende kode lige efter Afsnit #6.4 (som du lige har tilføjet) for at tegne sundhedslinjen på skærmen:

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

koden trækker først den røde sundhedslinje. Derefter trækker det en vis mængde grønt over baren, alt efter hvor meget liv slottet har tilbage.,

Hvis du bygger og kører programmet, skal du have en timer og en sundhedsbjælke.

trin 9: vind eller tab

men hvad er det her? Hvis du spiller længe nok, selvom dit helbred går ned til nul, fortsætter spillet stadig! Ikke bare det, du kan fortsætte med at skyde på badgers, også. Det kommer ikke til at fungere, nu er det? Du har brug for en slags winin/lose scenario at gøre spillet værd at spille.

så lad os tilføje gevinsten og tabe tilstand samt vinde eller tabe skærmen. :] Du gør dette ved at forlade hovedsløjfen og gå ind i en winin/lose loop., I winin / lose loop skal du finde ud af, om brugeren vandt eller tabte og vise skærmen i overensstemmelse hermed.

Her er en grundlæggende oversigt af vinder/taber situationer:

Hvis tiden er up (90000 ms eller 90 sekunder), derefter:

  • Standse spillet
  • Angiv resultatet af spil til 1 eller vinde

Hvis slottet er ødelagt, så:

  • Stoppe med at køre spil
  • Angiv resultatet af spil til 1 eller vinde

Beregne nøjagtigheden enten måde.

Bemærk: acc*1.0 Er bare at konvertere acc til en float., Hvis du ikke gør dette, vil divisionen operand returnere et heltal som 1 eller 2 i stedet for en flyde som 1.5

tilføj disse linjer til slutningen af game.py:

Dette er den længste smule kode endnu! Men det er ikke så kompliceret.

den første if-sætning kontrollerer, om tiden er gået. Den anden kontrollerer, om slottet er ødelagt. Den tredje beregner dit nøjagtighedsforhold. Derefter kontrollerer en hurtig if-erklæring, om du har vundet eller tabt og viser det korrekte billede.

selvfølgelig, hvis du vil vise billeder til winin og lose skærme, skal disse billeder indlæses først., Så tilføj følgende kode til slutningen af afsnit # 3:

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

en mere hurtig ting. Skift punkt #4:

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

Til:

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

Den kører variabel der holder styr på, om spillet er slut, og exit-koden variabel der holder styr på, om spilleren har vundet eller tabt.

Kør spillet igen, og nu Kan du enten triumf eller dø forsøger! Cool. :]

Trin 10: Gratis Musik og lydeffekter!

spillet ser ret godt ud, men hvordan lyder det? Det er lidt stille, ikke?, Tilføjelse af nogle lydeffekter kan ændre hele fornemmelsen af et spil.

PyGame gør indlæsning og afspilning af lyde super simpelt. Først skal du initialisere mi .eren ved at tilføje dette i slutningen af afsnit #2:

pygame.mixer.init()

Indlæs derefter lydene og indstil lydstyrkeniveauet i slutningen af afsnit #3:

det meste af ovenstående kode indlæser blot lydfilerne og konfigurerer lydstyrkeniveauerne. Men vær opmærksom på pygame.mixer.Musik.load line – denne linje indlæser baggrundsmusikken til spillet, og den næste linje sætter baggrundsmusikken til at gentage for evigt.,

der tager sig af lydkonfigurationen. : ] Nu er alt hvad du skal gøre, at spille de forskellige lydeffekter efter behov. Gør det i henhold til anvisningerne i kommentarerne til koden nedenfor:

Kør spillet endnu en gang, og du vil bemærke, at du nu har baggrundsmusik og lydeffekter til kollisioner og optagelse. Spillet føles så meget mere levende! :]

hvor skal man hen herfra?

Du bør være stolt af dig selv: du er lige blevet færdig med at skabe et sjovt spil fyldt med musik, lydeffekter, en killer rabbit, kamikaze grævlinger og meget mere. Jeg sagde Jo, du kunne!, :]

Du kan do .nloade den endelige kildekode til spillet her.

På dette tidspunkt er du velkommen til at udvide dette spil til din egen skabelse! Måske prøve at erstatte kunsten med dine egne tegninger, eller tilføje forskellige våben eller typer af monstre i spillet!

har du spørgsmål eller kommentarer til, hvad du har gjort i denne tutorial? Hvis ja, deltage i diskussionen i fora! Jeg vil meget gerne høre fra dig.


Dette er et indlæg af Tutorial teammedlem Julian Meyer, en 13-årig python-Udvikler.

Ray .enderlich.,kom ugentlig

den raywenderlich.com nyhedsbrev er den nemmeste måde at holde dig ajour med alt hvad du har brug for at vide som mobiludvikler.

få en ugentlig fordøjelse af vores tutorials og kurser, og modtag et gratis dybtgående e-mail-kursus som en bonus!

Gennemsnitlig Bedømmelse

4.1/5

Tilføje en bedømmelse af dette indhold

Log på for at tilføje en bedømmelse

15 ratings

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *