[HOME]
Galgje

Algemeen

In deze opdracht gaan we het galgje-spel bouwen: een persoon speelt tegen een computer. Deel de opdracht op in stukjes. Probeer het steeds zo te programmeren dat je tussendoor zo veel mogelijk stukjes kunt testen zonder dat het spel helemaal af hoeft te zijn. Zo weet je zeker dat je altijd een werkend product hebt. Het is de bedoeling dat je zo veel mogelijk zelfstandig aan de slag gaan, zonder te veel hulp van de docent. Help elkaar als je vastloopt. Laat zien wat je geleerd hebt, dus ook hoe je fouten uit je eigen code kunt halen.

Inhoud

Stap 1: GitHub

  1. Maak in tweetallen, een repository aan via GitHub.
  2. Clone deze repository naar jullie computer. Kopieer de link van jullie repository en geef in Visual Studio Code aan dat je een repository wilt clonen. Hier plak je de link in en kiest een plek waar deze opgeslagen wordt.

Stap 2: Stroomdiagram

Voor dat je gaat programmeren is het verplicht om een algemeen stroomdiagram te maken. Dit doen we door middel van de volgende tool. Eventueel kun je deze video bekijken voor meer uitleg over het maken van
Bekijk hiervoor de uitleg over het basisprogramma hieronder.

Stap 3: Basis programma

In de basis zal de uitvoer van jullie programma er ongeveer zo uit zien:

Hoi. Welkom bij Galgje.
Ik heb een woord in gedachten.

Tot nu toe geraden woord: _ _ _ _ _
Je mag nog 10 keer fout gokken.
Tot nu toe geraden letters: 

Wil je een letter gokken? e
Goed geraden! De letter 'e' zit in mijn geheime woord.
Tot nu toe geraden woord: _ _ e _ _
Je mag nog 10 keer fout gokken.
Tot nu toe geraden letters: e

Wil je een letter gokken? r
Helaas, de letter 'r' zit niet in mijn geheime woord.
Tot nu toe geraden woord: _ _ e _ _
Je mag nog 9 keer fout gokken.
Tot nu toe geraden letters: e, r
…
    

In jullie hoofdprogramma zullen we het stroomdiagram terug moeten zien. Zorg er voor dat jouw programma goed te lezen is, ook voor mensen. Jullie startcode ziet er als het goed is zo uit:



# DIT IS HET GALGJE SPEL
# GESCHREVEN DOOR :
#
#
# Doel: het programma heeft een geheim woord, 
#       de gebruiker mag letter voor letter raden of die letter in het woord voorkomt
#       Het spel is afgelopen als de gebruiker het juiste woord geraden heeft, 
#       of teveel fouten gemaakt heeft.

##################
### Constantes ###
##################


###################
#GLOBALE VARIABELEN
####################
geheim_woord = ['h','a','l','l','o']	#dit is wat de gebruiker moet gaan raden

##############
# DEFINITIES 
##############
def welkomstWoord():
    print("Welkom bij Galgje!")
    print("Dit zijn de spelregels ...")

################
# HOOFDPROGRAMMA
################
welkomstWoord()
print("Dit is geheim_woord", geheim_woord) #even printen om te testen

gok = input ("Geef een letter: ") 		#vraag om gokletter
# ...
    
    

Eisen

  1. Geheim woord: Omdat we wel hebben geleerd om met lijsten te werken, maar nog niet met strings. Gelukkig kun je met een string precies zo werken als met een lijst. Als voorbeeld:
    
    mijn_string = "Hallo Wereld!"
    print(mijn_string[1]) #vraagt om het teken op index 1, dus een "a".
    for letter in mijn_string:
        print(letter)
    # zal printen:
    # H
    # a
    # l
    # etc...
            
  2. Geraden woord: Maak een 'geraden woord' met een juiste hoeveelheid puntjes.
  3. Verwerk een juiste gok: Controleer of een letter in het geheime woord voorkomt. Zo ja, print dit. Vervang ook op de juiste plek in het geraden woord het puntje door de letter. Zorg ervoor dat alle voorkomens van het letter vervangen wordt. Tip, begin maak hier een functie (def) van zodat je code overzichtelijker blijft.
  4. Gok: Laat de gebruiker een gekletter in voeren.
  5. Foute gok: geef de gebruiker ook terugkoppeling als de gok niet in het woord voorkomt.
  6. Beurten: Het spel zelf komt eigenlijk neer op een grote loop. Bij elke iteratie van de loop is de 'gebruiker een keer aan de beurt'. Aan welke condities moet zijn voldaan voordat de gebruiker nog een keer aan de beurt mag komen? Hoe bepaal je of die niet al verloren heeft? En hoe bepaal je of die gewonnen heeft?
  7. Spelstand: Toon de huidige spelstand (aantal pogingen, geraden woord tot nu toe) aan de gebruiker, en vraag om een nieuwe letter. Je hoeft (nog) geen rekening te houden met foutieve input (getallen, hele zinnen, of letters die al geraden zijn), dit doe je later.
  8. Einde spel: Toon een bericht aan het einde wanneer de gebruiker heeft gewonnen of verloren. Waar kan je aan zien of de gebruiker won of verloor? Onderscheid deze twee gevallen. Laat ook nog even zien wat het te raden woord was.
  9. Bereken woord lengte: Als je dit nog niet gedaan hebt, pas je code zo aan dat het werkt voor een woord van elke willekeurige lengte. Gebruik dus geen getal voor de waarde, maar bereken deze.
Je hebt al een aantal vergelijkbare opdrachten gemaakt. Het kan handig zijn om terug te kijken naar onderwerp 9 en onderwerp 10, met name opdrachten 9.4.1, 10.4.1 en afsluitende opdracht 9.4.

Stap 4: Uitbreiden

Na dat je aan de voorwaarden voldaan hebt, kun je jouw programma gaan uitbreiden. Hier zitten geen restricties aan, dus ga vooral los. Mocht je inspiratie nodig hebben, kijk dan eens naar onderstaande lijst.

Stap 5: Inleveren

Inleveren gaat precies zo als met het inleveren van jouw opdrachten. Dus je maakt via git een commit, en alles zou vanzelf moeten gaan. Opmerking: controleer even op github, of jouw laatste versie ook echt is opgeslagen.

Stap 6: Presenteren

In de laatste les geef je een kleine presentatie over wat je gemaakt hebt. Dit hoeft niet heel lang te zijn, zeg maar 5-10 minuten waarin je even kan opscheppen over jouw code.

Wat wij verwachten in de presentatie

Om ervoor te zorgen dat het zo leuk mogelijk blijft, dagen we je uit om zo origineel mogelijk te zijn in zowel jouw presentatie als de uitbreidingen.