Level 4PGZ - Hangman

Skrevet av: Ole Kristian Pedersen, Kodeklubben Trondheim

Kurs: Python
Tema: Tekstbasert, Spill
Fag: Programmering
Klassetrinn: 5.-7. klasse, 8.-10. klasse

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:

Bilde av en svart blank skjerm

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:

>>> remaining_letters =['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'

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)

flagTest 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:

Bilde av hangman i Python

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 til state["used_tries"].

  • Hint: Sjekk om state["used_tries"] er større eller lik TRIES.

flagTest 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:

  • Bilde av hvordan det kan se ut når spilleren vinner
    Bilde av hvordan det ser ut når spilleren taper
Lisens: CC BY-SA 4.0

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!