lär dig att göra ett enkelt spel med Python!

detta är ett inlägg av handledning teammedlem Julian Meyer, en 13-årig python utvecklare. Du kan hitta honom på Google + och Twitter.

har du någonsin undrat hur TV-spel skapas? Det är inte så komplicerat som du kanske tror!

i den här handledningen skapar du ett enkelt spel som heter Bunnies och Badgers, där hjälten, kaninen, måste försvara ett slott mot en attackerande hord av badgers., : O

för att skriva det här spelet använder du Python. Nej, jag pratar inte om en stor orm! :]

Python är ett datorprogrammeringsspråk. Vi valde Python för denna handledning eftersom det är ett enkelt språk att börja med, och är roligt och lätt att lära sig.

om du är ny på Python, innan du börjar kolla in den här boken: Tänk Python: hur man tänker som en datavetare. Det borde få dig igång.

dyka sedan tillbaka hit och gör dig redo – det är ett krig som pågår mellan kaninerna och badgers. Fortsätt läsa för att hoppa in i striden!,

komma igång: installera Python

om du vill prova denna handledning på en Windows-dator måste du installera Python. Se till att du tar tag i 2.7.3-versionen och inte 3.3.0-versionen! Efter att ha kört installationsprogrammet, bör du ha inaktiv i mappen Alla program i start-menyn. Starta IDLE för att komma igång.

Om du är på en Mac har du redan Python installerat! Bara öppna Terminal (/Program/Verktyg / Terminal.app), skriv in python och tryck på Enter.

Obs: Om du installerar Python från python.,org (och kan behöva om du vill få Pygame att fungera), då har du också tillgång till IDLE på Mac också. Det borde vara i mappen ”/Applications/Python 2.7”.

Om du gjorde det korrekt bör du se något så här:

Obs: Om du vill avsluta Python-prompten (trippelvinkelfästena, >>>) kan du antingen skriva ut() vid Python-prompten och trycka på Return eller så kan du trycka på Control+D.,

När du är på Python prompten, för att testa om Python fungerar korrekt, skriv in print 1+1 och tryck på Enter / Return. Det ska skriva ut 2. Du har just skrivit ditt första Python-program!

Nu när du vet att Python fungerar korrekt måste du installera PyGame för att skriva ett spel med Python.

PyGame är ett Python-bibliotek som gör att skriva spel mycket enklare! Det ger funktionalitet som bildhantering och ljuduppspelning som du enkelt kan införliva i ditt spel.,

gå hit och ladda ner Pygame-installationsprogrammet som är lämpligt för ditt system. Se till att du laddar ner en Python 2.7-version.

Obs! Pygame-installationsprogrammet från länken ovan fungerar inte med standard Python från Apple som är installerat på en Mac. Du måste ladda ner Python från python.org och installera det för att kunna använda PyGame. Eller så kan du installera både Python och PyGame via MacPorts.

för att verifiera att du har Pygame installerat korrekt, öppna IDLE eller kör Python via terminalen och skriv in import pygame vid Python-prompten., Om detta inte resulterar i någon utgång, då är du bra.

om det å andra sidan matar ut ett fel som det som visas nedan, är Pygame inte installerat.

om du får ett fel som detta, posta på forumet och jag hjälper dig att få det att fungera.

kör Python-kod från fil

medan du kan köra korta bitar av Python-kod vid Python-prompten, om du vill arbeta med ett större program (som ett spel), Vill du förmodligen spara din kod till en fil så att du inte behöver skriva in den om och om igen.

det finns flera sätt att köra ett Python-program som en fil., Ett sätt är att använda en vanlig textredigerare som anteckningsblock (Windows) eller TextEdit (Mac). Öppna en ny textfil, skriv in din Python-kod (som Skriv ut 1+1). Spara sedan det som XXX.py (XXX kan vara vilket beskrivande filnamn som helst).

dubbelklicka sedan på den här filen för att köra den i Windows. På Mac, Öppna Terminal och skriv python, dra sedan filen som du sparade i terminalfönstret och tryck på Enter.

det andra sättet är att skriva in din kod med IDLE-redigeraren, vilket är vad du ska göra i den här handledningen. För att köra tomgång, skriv bara tomgång från Terminal., Välj sedan Arkiv \ Nytt fönster från IDLE-menyn och du bör ha ETT textredigeringsfönster där du kan skriva in Python-kod. Du kan spara dina kodändringar via File\Save och även köra koden via Run \ Run Module (F5).

Observera att Kör-menyn endast är tillgänglig om du har en fil öppen i ett redigeringsfönster.

lägga till spelresurser

du är nästan redo att skapa ditt spel. Men vad är ett spel utan några bra grafik och ljudeffekter? Jag har sammanställt all grafik och ljudeffekter du behöver för ditt spel i ett ZIP-arkiv. Du kan ladda ner den här.,

När du har laddat ner filen, skapa en mapp för ditt spel på hårddisken och extrahera mappen resurser i den mappen så att din spelmapp har en undermapp som heter resurser, med de olika resurserna grupperade i ytterligare mappar inuti den, så här:

du är nu redo att börja skapa kaniner och Badgers. :]

Steg 1: Hello Bunny

kör IDLE och öppna ett nytt textredigeringsfönster, som nämnts i föregående avsnitt., Skriv följande kod i redigeringsfönstret:

spara filen i din spelmapp (den där resursundermappen är) och namnge den game.py.

låt oss gå igenom kodavsnittet-för-avsnitt:

  1. importera Pygame-biblioteket. Detta låter dig använda funktioner från biblioteket i programmet.
  2. initiera Pygame och ställ in visningsfönstret.
  3. ladda bilden som du ska använda för kaninen.
  4. Fortsätt looping över följande indragen kod.,

    Obs! där andra språk som Objective-C, Java eller PHP använder lockiga hängslen för att visa ett kodblock som ska utföras inom ett tag loop eller en if-sats, använder Python indentering för att identifiera kodblock. Så korrekt indrag är mycket viktigt i Python-kom ihåg det. :]

  5. Fyll skärmen med svart innan du ritar något.
  6. Lägg till kaninbilden som du laddade på skärmen vid x=100 och y=100.
  7. uppdatera skärmen.
  8. leta efter nya händelser och om det finns en, och det är ett Avsluta kommando, avsluta programmet.,

    Obs! enligt Pygame-dokumentationen behöver du inte ringa pygame.avsluta() eftersom tolken automatiskt kallar det när tolken stängs av. Men åtminstone på Mac OS, spelet skulle hänga på exit om pygame.avsluta() kallades.

om du kör koden nu (via Run\Run Module i Idle-menyn), bör du se en skärm som liknar den nedan:

w00t kaninen är i scenen, och redo för action!

men spelet ser skrämmande och ensam med kaninen bara står där på en svart bakgrund., Dags att prettify saker lite. :]

steg 2: Lägg till landskap

låt oss börja med att lägga till en bakgrund till spelscenen. Detta kan göras med ett par fler skärm.blit () samtal.

i slutet av avsnitt #3, Efter att ha laddat spelarens bild, Lägg till följande kod:

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

detta laddar bilderna och sätter dem i specifika variabler. Nu måste de dras på skärmen. Men om du kontrollerar gräsbilden märker du att den inte täcker hela skärmområdet, vilket är 640 x 480., Det betyder att du måste kakel gräset över skärmområdet för att täcka det helt.

Lägg till följande kod till game.py i början av avsnitt # 6 (innan spelaren ritas på skärmen):

som du kan se, loopar for statement genom x först. Sedan, inom den för slinga, loopar den genom y och drar gräset vid X och y-värdena som genereras av for looparna. Nästa par linjer ritar bara slotten på skärmen.

om du kör programmet nu ska du få något så här:

mycket bättre – det här börjar se bra ut!, :]

steg 3: Gör kaninen flytta

nästa måste du lägga till några faktiska spelelement, som att göra kaninen svara på tangenttryckningar.

för att göra det, först implementerar du en bra metod för att hålla reda på vilka tangenter som trycks in vid ett visst ögonblick. Du kan göra detta helt enkelt genom att göra en rad viktiga stater som håller tillståndet för varje nyckel du vill använda för spelet.

Lägg till följande kod till game.py i slutet av avsnitt #2 (när du har ställt in skärmens höjd och bredd):

keys = playerpos=

den här koden är ganska självförklarande., Tangenterna array håller reda på tangenterna som trycks in i följande ordning: WASD. Varje objekt i matrisen motsvarar en nyckel-den första till W, den andra till A och så vidare.

playerpos-variabeln är där programmet drar spelaren. Eftersom spelet kommer att flytta spelaren till olika positioner, är det lättare att ha en variabel som innehåller spelarens position och sedan helt enkelt dra spelaren på den positionen.

nu måste du ändra den befintliga koden för att rita spelaren för att använda den nya playerpos-variabeln., Ändra följande rad i avsnitt # 6:

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

till:

 screen.blit(player, playerpos)

uppdatera sedan tangentarrayen baserat på vilka tangenter som trycks in. PyGame gör det enkelt att upptäcka knapptryckningar genom att lägga till händelse.viktiga funktioner.

i slutet av avsnitt #8, Strax efter blockkontrollen för händelsen.typ==pygame.Avsluta, sätt den här koden (på samma indenteringsnivå som Pygame.Avsluta om block):

Wow! Det är många rader kod. Om du bryter ner det i if-uttalandena är det inte så komplicerat.,

kontrollera först om en tangent trycks ned eller släpps. Sedan kontrollerar du vilken tangent som trycks eller släpps, och om den tangent som trycks eller släpps är en av de tangenter du använder, uppdaterar du tangentvariabeln i enlighet därmed.

Slutligen måste du uppdatera playerpos-variabeln som svar på tangenttryckningarna. Det här är faktiskt väldigt enkelt.

Lägg till följande kod i slutet av spelet.,py (med en indragningsnivå, sätta den på samma nivå som for loop):

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

den här koden kontrollerar helt enkelt vilken av tangenterna som trycks in och lägger till eller subtraherar från spelarens x-eller y-position (beroende på vilken tangent som trycks in) för att flytta spelaren.

kör spelet och du borde få en spelare precis som tidigare. Försök trycka på WASD. Hurra! Det fungerar.,

steg 4: svarvning av kaninen

ja, din kanin rör sig nu när du trycker på tangenterna, men skulle det inte vara ännu svalare om du kunde använda musen för att rotera kaninen för att möta en riktning som du väljer, så att han inte står inför samma sätt hela tiden? Det är enkelt att implementera med trigonometri.,

ta en titt på följande illustration:

i ovanstående bild, om (5,3) är kaninens position och (2,4) är musens nuvarande position, kan du hitta rotationsvinkeln (z) genom att applicera atan2 trigonometrisk funktion på skillnaden i avstånd mellan de två punkterna. Naturligtvis, när du känner till rotationsvinkeln, kan du helt enkelt rotera kaninen i enlighet med detta. :]

om du är lite förvirrad om den här delen, oroa dig inte – du kan fortsätta ändå. Men det är därför du bör vara uppmärksam i matte klass!, :] Du kommer att använda det här hela tiden i spelprogrammering.

nu måste du tillämpa detta koncept på ditt spel. För att göra detta kan du använda Pygameytan.rotera (grader) funktion. Förresten, kom ihåg att Z-värdet är i radianer. : Vad sägs om att låta kaninen skjuta fiender med pilar? Det här är ingen mild kanin!

det här steget är lite mer komplicerat eftersom du måste hålla reda på alla pilar, uppdatera dem, rotera dem och ta bort dem när de går utanför skärmen.,

först och främst lägger du till de nödvändiga variablerna i slutet av initieringssektionen, avsnitt # 2:

acc=arrows=

den första variabeln håller reda på spelarens noggrannhet och den andra matrisen spårar alla pilarna. Noggrannhetsvariabeln är i huvudsak en lista över antalet skott avfyrade och antalet badgers slog. Senare kommer vi att använda denna information för att beräkna en noggrannhet procent.

ladda sedan pilbilden i slutet av avsnitt #3:

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

När en användare klickar på musen måste en pil avfyras., Lägg till följande i slutet av avsnitt # 8 som en ny händelsehanterare:

den här koden kontrollerar om musen klickades och om den var, får den muspositionen och beräknar pilrotationen baserat på den roterade spelarpositionen och markörpositionen. Detta rotationsvärde lagras i arrayen pilar.

Därefter måste du faktiskt rita pilarna på skärmen. Lägg till följande kod direkt efter avsnitt # 6.1:

vely-och velx-värdena beräknas med hjälp av grundläggande trigonometri. 10 är pilarnas hastighet., If-uttalandet kontrollerar bara om kulan är out of bounds och om den är, tar den bort pilen. Den andra för Uttalande loopar genom pilarna och drar dem med rätt rotation.

försök och kör programmet. Du bör ha en kanin som skjuter pilar när du klickar med musen! : D

steg 6: Ta till vapen! Grävlingar!

OK, du har ett slott och du har en hjälte som kan flytta och skjuta. Vad saknas? Fiender som attackerar slottet som hjälten kan skjuta på!,

i det här steget skapar du slumpmässigt genererade grävlingar som körs på slottet. Det kommer att finnas fler och fler grävlingar under spelets gång. Så, låt oss göra en lista över vad du behöver det att göra.

  1. Lägg till skurkar i en lista en array.
  2. uppdatera den dåliga killen array varje ram och kontrollera om de är utanför skärmen.
  3. Visa skurkarna.

enkelt, eller hur?, :]

lägg först till följande kod i slutet av avsnitt #2:

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

ovanstående ställer in en timer (liksom några andra värden) så att spelet lägger till en ny badger efter en tid har gått. Du minskar badtimer varje ram tills det är noll och sedan leka en ny grävling.

lägg nu till följande i slutet av avsnitt # 3:

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

den första raden ovan liknar all föregående bildläsningskod. Den andra raden sätter upp en kopia av bilden så att du kan animera den dåliga killen mycket lättare.,

Därefter måste du uppdatera och visa skurkarna. Lägg till denna kod direkt efter avsnitt # 6.2:

massor av kod att gå över. :] Den första raden kontrollerar om badtimer är noll och om det är, skapar en grävling och sätter badtimer upp igen baserat på hur många gånger badtimer har kört så långt. Den första för loop uppdaterar grävlingens X-position, kontrollerar om grävlingen är av skärmen och tar bort grävlingen om den är offscreen. Den andra för loop drar alla badgers.

för att kunna använda slumpfunktionen i ovanstående kod måste du också importera det slumpmässiga biblioteket., Så lägg till följande i slutet av avsnitt #1:

import random

Lägg till den här raden direkt efter det att uttalandet (avsnitt #4) för att minska värdet av badtimer för varje ram:

badtimer-=1

prova all denna kod genom att köra spelet. Nu bör du börja se några riktiga gameplay-du kan skjuta, flytta, vända, och grävlingar försöker köra på dig.

men vänta! Varför spränger inte grävlingarna slottet? Låt oss snabbt lägga till det…

Lägg till den här koden strax före indexet+=1 på den första för loop i Avsnitt #6.,3:

den här koden är ganska enkel. Om grävlingens x-värde är mindre än 64 till höger, ta bort den dåliga killen och minska spelhälsovärdet med ett slumpmässigt värde mellan 5 och 20. (Senare kommer du att visa det aktuella hälsovärdet på skärmen.)

om du bygger och kör programmet, bör du få en massa attackerande grävlingar som försvinner när de träffar slottet. Även om du inte kan se det, sänker badgers faktiskt din hälsa.,

Steg 7: kollisioner med grävlingar och pilar

grävlingarna attackerar ditt slott men dina pilar har ingen effekt på dem! Hur ska en kanin försvara sitt hem?

tid att ställa in pilarna för att döda grävlingar så att du kan skydda ditt slott och vinna spelet! I grund och botten måste du slinga genom alla skurkarna och inuti var och en av dessa loopar måste du slinga genom alla pilarna och kontrollera om de kolliderar. Om de gör det, ta bort badger, ta bort pilen och Lägg till en i ditt noggrannhetsförhållande.

direkt efter avsnitt #6.3.,1, Lägg till detta:

det finns bara en viktig sak att notera i den här koden. If-satsen är en inbyggd Pygame-funktion som kontrollerar om två rektanglar skär. De andra raderna gör bara vad jag förklarade ovan.

om du kör programmet, bör du äntligen kunna skjuta och döda grävlingar.

steg 8: Lägg till en HUD med hälsomätare och klocka

spelets framsteg ganska bra. Du har dina angripare, och du har din försvarare. Nu allt du behöver är ett sätt att hålla poäng och för att visa hur väl kaninen gör.,

det enklaste sättet att göra detta är att lägga till en HUD (Heads Up Display) som visar slottets nuvarande hälsonivå. Du kan också lägga till en klocka för att visa hur länge slottet har överlevt.

lägg först till klockan. Lägg till följande kod strax före början av avsnitt # 7:

ovanstående kod skapar helt enkelt ett nytt teckensnitt med standardpygame-teckensnittet inställt på storlek 24. Då används teckensnittet för att göra texten av tiden på en yta. Därefter placeras texten och ritas på skärmen.

lägg sedan till hälsofältet., Men innan du ritar hälsofältet måste du ladda bilderna till baren. Lägg till följande kod i slutet av avsnitt # 3:

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

den första är den röda bilden som används för hela hälsofältet. Den andra är den gröna bilden som används för att visa den nuvarande hälsonivån.

lägg nu till följande kod direkt efter Avsnitt #6.4 (som du just har lagt till) för att rita hälsofältet 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 drar först den röda hälsofältet. Sedan drar en viss mängd grönt över baren, beroende på hur mycket liv slottet har kvar.,

om du bygger och kör programmet ska du ha en timer och en hälsofält.

steg 9: Vinn eller förlora

men vad är det här? Om du spelar tillräckligt länge, även om din hälsa går ner till noll, fortsätter spelet fortfarande! Inte bara det, du kan fortsätta att skjuta på badgers också. Det kommer inte att fungera, eller hur? Du behöver någon form av en win/lose scenario för att göra spelet värt att spela.

så låt oss lägga till vinst och förlora skick samt vinna eller förlora skärmen. :] Du gör detta genom att gå ut ur huvudslingan och gå in i en win/lose loop., I win / lose loop måste du ta reda på om användaren vann eller förlorade och visa skärmen i enlighet därmed.

här är en grundläggande kontur av win/lose scenarios:

om tiden är slut (90000 ms eller 90 sekunder) då:

  • sluta köra spelet
  • Ställ resultatet av spelet till 1 eller vinna

om slottet förstörs då:

  • sluta köra spelet
  • Ställ resultatet av spelet till 1 eller vinna

om slottet förstörs då:

  • sluta köra spelet
  • beräkna noggrannheten hur som helst.

    Obs: acc*1.0 konverterar bara acc till en flottör., Om du inte gör det returnerar divisionsoperan ett heltal som 1 eller 2 istället för en flottör som 1.5

    Lägg till dessa rader i slutet av game.py:

    detta är den längsta bit av koden ännu! Men det är inte så komplicerat.

    den första if-satsen kontrollerar om tiden är slut. Den andra kontrollerar om slottet förstörs. Den tredje beräknar ditt noggrannhetsförhållande. Därefter kontrollerar en snabb if-sats om du vann eller förlorade och visar rätt bild.

    självklart, om du vill visa bilder för win och lose-skärmarna, måste dessa bilder laddas först., Så lägg till följande kod i slutet av avsnitt # 3:

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

    en mer snabb sak. Ändra avsnitt # 4 från:

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

    till:

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

    den löpande variabeln håller reda på om spelet är över och Exit-kodvariabeln håller reda på om spelaren vann eller förlorade.

    kör spelet igen och nu kan du antingen triumfera eller dö försöker! Cool. :]

    steg 10: Gratis Musik och ljudeffekter!

    spelet ser ganska bra ut men hur låter det? Det är lite tyst, eller hur?, Lägga till några ljudeffekter kan ändra hela känslan av ett spel.

    PyGame gör lastning och spelar ljud super enkelt. Först måste du initiera mixern genom att lägga till detta i slutet av avsnitt #2:

    pygame.mixer.init()

    ladda sedan ljuden och ställ in volymnivån i slutet av avsnitt #3:

    det mesta av ovanstående kod laddar bara ljudfilerna och konfigurerar ljudvolymnivåerna. Men uppmärksamma pygame.mixer.musikalisk.load line-den linjen laddar bakgrundsmusiken för spelet och nästa rad ställer in bakgrundsmusiken för att upprepa för alltid.,

    som tar hand om ljudkonfigurationen. :] Nu allt du behöver göra är att spela de olika ljudeffekter som behövs. Gör det enligt anvisningarna i kommentarerna till koden nedan:

    kör spelet en gång till och du kommer märka att du nu har bakgrundsmusik och ljudeffekter för kollisioner och skytte. Spelet känns så mycket mer levande! :]

    Var ska man gå härifrån?

    Du bör vara stolt över dig själv: du har just skapat ett roligt spel fyllt med musik, ljudeffekter, en mördare kanin, kamikaze badgers och mer. Jag sa ju att du kunde göra det!, :]

    Du kan ladda ner den slutliga källkoden för spelet här.

    vid denna punkt, gärna utöka detta spel till din egen skapelse! Kanske försöka ersätta konsten med dina egna ritningar, eller lägga till olika vapen eller typer av monster i spelet!

    har du några frågor eller kommentarer om vad du har gjort i den här handledningen? Om så är fallet, gå med i diskussionen i forumet! Jag vill gärna höra från dig.


    Detta är ett inlägg av handledning gruppmedlem Julian Meyer, en 13-årig python utvecklare.

    raywenderlich.,com Weekly

    raywenderlich.com nyhetsbrev är det enklaste sättet att hålla dig uppdaterad om allt du behöver veta som en mobil utvecklare.

    få en veckovis digest av våra tutorials och kurser, och få en gratis djupgående e-postkurs som en bonus!

    Medelbetyg

    4.1/5

    Lägg till ett betyg för detta innehåll

    logga in för att lägga till ett betyg

    15 betyg

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *