PGZ - Hangman
Skrevet av: Ole Kristian Pedersen, Kodeklubben Trondheim
Introduksjon
I denne oppgaven skal vi lage vårt eget hangman-spill. Vi har laget litt ferdigskrevet kode for å hjelpe deg på vei. Den kan du laste ned her. Lagre den der du pleier å lagre Python-koden din.
Det kan se ut som mye kode, men det bare den øverste delen du skal endre på. Et lite stykke ned vil det være en overskrift som ser slik ut:
###############################################################################
# Library code
###############################################################################
All koden under denne overskriften kan du bare overse. Dette er koden som hjelper deg med å tegne figurer og hente input fra brukeren.
I koden over overskriften har vi laget noen variabler:
-
TRIES
som angir hvor mange forsøk brukeren har. Ettersom det bare er tegnet figurer for 7 feil, så er det lurt å la denne være slik den er. -
WORDS
er en liste over ord som kan gjettes, men ingen av disse ordene kan inneholde æ, ø eller å. -
state
er en ordbok som inneholder spillets tilstand.
Vi har begynt å lage fire funksjoner for deg. Disse skal du gi innhold i steg 1 til 4.
Test at alt fungerer
Ved å kjøre kommandoen
pgzrun hangman.py
skal du få opp et vindu som ser slik ut:

Dersom du ikke får opp et vindu som beskrevet over, pass på at du har installert Python på riktig måte, lastet ned hangman.py og er i samme mappe som fila.
Dersom du fremdeles sitter fast bør du snakke med en veileder.
Steg 0: Installere Pygame Zero
For å gjøre denne oppgaven må du installere Pygame Zero. Start med å sjekke at du har installert Python 3, altså at Python-versjonen din er nummerert på formen 3.X.X.
Åpne kommandolinjen (engelsk: command prompt) på datamaskinen din. Bruker du Windows kan du åpne start-menyen og skrive cmd (eventuelt Ledetekst, som er det norske navnet på programmet som skal kjøre). På Mac og Linux åpner du terminalvinduet. Skriv inn følgende:
Windows og Mac:
pip install pgzero
Linux:
sudo pip install pgzero
Noen Linux-systemer kaller den pip3
, i så fall må du skrive det i stedet for pip
i koden over. Hvis pip ikke er installert kan du prøve å skrive
sudo python3 -m ensurepip
før du prøver sudo pip install pgzero
igjen.
Steg 1: Lage det hemmelige ordet
Nå skal vi skrive koden som skal kjøres når create_display_string()
kalles. Denne funksjonen har to parametere - secret_word
(det hemmelige ordet) og remaining_letters
(en liste med de bokstavene brukeren ikke har gjettet).
Her er et eksempel på hvordan funksjonen kan fungere:
'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z']
# alle bokstaver fra b til z
secret_word = 'banan'
create_display_string(secret_word, remaining_letters)
'_ a _ a _'
remaining_letters.remove('b')
create_display_string(secret_word, remaining_letters)
'b a _ a _'
create_display_string(secret_word, [])
'b a n a n'
remaining_letters =[
Her er alle bokstaver i secret_word
som også er i remaining_letters
erstatte med _
. Vi har også lagt inn et mellomrom mellom hvert tegn.
For å lage denne funksjonen trenger vi noen av tekstfunksjonene vi lærte i Tekst ABC. Dersom du ikke husker disse kan det være lurt å gå tilbake og lese igjennom alle de gule boksene i oppgaven.
Du skal nå skrive kode i funksjonen. Dette må du gjøre:
-
list("ord") ['o', 'r', 'd']
-
Hint:
s.join(lst)
-
Hint:
s.replace()
Steg 2: Å starte spillet
Nå skal vi kode funksjonen start_game()
. Denne funksjonen lager nøkkel/verdi-parene i state
. Dersom du ikke husker hvordan ordbøker fungerer kan det være lurt å repetere oppgaven om ordbøker.
Nøklene i state
er som følger:
-
"running"
forteller hjelpefunksjonene om spillet kjører -
"used_tries"
er hvor mange forsøk brukeren har brukt -
"secret_word"
er det ordet brukeren skal gjette -
"pressed_button"
er den siste knappen som ble trykket av brukeren -
"help_text"
er hjelpetekst for brukeren, som forklarer hva brukeren skal gjøre -
"remaining_letters"
er en liste over de bokstavene brukeren ikke har gjettet -
"display_string"
er det ordet som vises til brukeren (etter at vi har satt inn_
).
Dette må du gjøre:
-
-
Nøkkel:
"running"
Verdi:True
-
Nøkkel:
"used_tries"
Verdi:0
-
Nøkkel:
"pressed_button"
Verdi:""
(En tom tekstvariabel) -
Nøkkel:
"help_text"
Verdi:"Guess a letter!"
-
-
-
Hint: Bruk
lst.append(elm)
Test spillet ditt
Lagre endringene dine i hangman.py
, og kjør spillet ditt:
pgzrun hangman.py
Du skal nå få opp et vindu som ser slik ut:

Steg 3: Å avslutte spillet
I funksjonen game_over()
skal vi endre state
slik at både bruker og hjelpefunksjoner får beskjed om at spillet er over.
Dette må du gjøre:
-
Hint: Hva skal listen vi gir som argument inneholde når vi ønsker å vise alle bokstavene?
Steg 4: main()
I dette steget skal vi skrive hovedfunksjonaliteten til spillet. Vi skal skrive koden i main()
, som kjøres hver gang spillet oppdateres. Her skal vi finne ut hvilken bokstav brukeren trykket på, og så sjekke om den bokstaven er inneholdt i ordet vårt. Vi må også oppdatere antall brukte forsøk, og til slutt sjekke om brukeren har brukt opp alle forsøkene sine eller om han har gjettet riktig ord.
Dette må du gjøre:
-
-
Fjern bokstaven fra lista
-
Dersom bokstaven finnes i det hemmelige ordet vårt må du oppdatere
state["display_string"]
, hvis ikke har brukeren brukt opp ett forsøk, og du må legge til en tilstate["used_tries"]
.
-
-
Hint: Sjekk om
state["used_tries"]
er større eller likTRIES
.
Test spillet ditt
Lagre endringene dine i hangman.py
, og kjør spillet ditt:
pgzrun hangman.py
Spillet skal nå fungere fullt og helt. Nå er det noen ting vi må teste:
Forbedre denne siden
Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!