Rochambeau

Deze pagina bevat uitvoerbare code.

Rochambeau, roshambo, Jon Ken Pon of gewoon steen, papier en schaar? Het spel is onder vele namen bekend en er bestaat zelfs een heuse organisatie, de Rock Paper Scissor Association… In deze opgave ga je een programma schrijven om het spel tegen de computer te spelen!

Opgelet: is je omgeving opgezet?

Voordat je hier je eerste programma gaat maken, controleer of je laptop goed ingesteld staat! Checklist:

  • python geinstalleerd en werkend

  • VS code (of een andere editor) geinstalleerd en werkend

  • VS code (of een andere editor) goed ingesteld - inclusief extensies.

En een laatste opmerking over het schrijven van code: In het bedrijfsleven zal je zien dat code meestal in het Engels geschreven wordt. Dat betekent dat alle woorden in je code bestanden Engels zijn, ook wanneer je de keuze hebt. Of, in vaktaal: ook variabele namen, comments en docstrings zijn volledig engelstalig.

Aangezien we je goed op het werkveld willen voorbereiden volgen we dit voorbeeld. We schrijven voor dit vak onze code dus ook in het Engels.

Steen, papier en schaar

In deze opgave ga je het volgende oefenen:

  • Het schrijven van eigen code door de onderstaande code aan te passen en uit te breiden

  • Werken met invoer en uitvoer van tekst in Python

  • Het maken van keuzes (op basis van de invoer van een gebruiker, jij!)

De regels

RPS-3

Bij steen, papier en schaar gaan twee spelers eerst aftellen en vormen daarna tegelijkertijd met de hand een steen (een vuist), een schaar (twee uitgestoken vingers) of papier (een vlakke hand). Hierbij verslaat de steen de schaar, de schaar het papier en het papier de steen. Indien beide spelers dezelfde keuze maken wint geen van beide.

Een begin

from random import choice  # import the function choice from the module named random

# Play a game of rock-paper-scissors in Dutch

user = input("Kies een wapen (steen, papier of schaar): ")
comp = choice(["steen", "papier", "schaar"])

print("De gebruiker (jij) koos", user)
print("De computer (ik) koos", comp)

if user == "steen":
    print("Haha! Eigenlijk koos ik papier! IK HEB GEWONNEN!")

print("Hopelijk heb je de volgende keer meer geluk...")

En verder!

Werk de code nu verder uit tot een volledig programma dat:

  • Een gebruiker uitnodigt het spel steen, papier en schaar te spelen

  • De gebruiker uit minstens drie opties laat kiezen

    • dit hoeft niet steen, papier of schaar te zijn, je mag andere wapens kiezen!

    • maar jouw programma moet wel steeds anders reageren op basis van de drie mogelijke opties die de gebruiker kan invoeren (althans, minimaal drie opties)

  • Het spel eerlijk speelt

    • maar je mag het spel ook zo maken dat de speler altijd wint (of verliest)

  • De keuze van de speler afdrukt (print)

    • je mag aannemen dat de gebruiker de keuze foutloos typt, dus altijd één van de mogelijke opties

  • Afdrukt welke keuze het zelf heeft gemaakt uit de mogelijke opties (eerlijk of niet)

  • Afdrukt wie het spel heeft gewonnen (of een gelijkspel, of een andere uitkomst)

Opdracht

De begincode staat hieronder klaar om te kopiëren naar je eigen bestand. Maak je een fout of wil je opnieuw beginnen, dan haal je hem hier weer op.

from random import choice # import the function choice from the module named random

# Play a game of rock-paper-scissors in Dutch

user = input("Kies een wapen (steen, papier of schaar): ")
comp = choice(["steen", "papier", "schaar"])

print("De gebruiker (jij) koos", user)
print("De computer (ik) koos", comp)

if user == "steen":
    print("Haha! Eigenlijk koos ik papier! IK HEB GEWONNEN!")

print("Hopelijk heb je de volgende keer meer geluk...")

Extra commentaar

Het toevoegen van extra commentaar (# ...) aan de code is optioneel, maar is aan te raden om aantekeningen in de code te maken voor jezelf (of voor anderen die jouw code gaan lezen!).

Uitbreidingen

Heb je teveel tijd over? Dan vind je hier een aantal mogelijke uitbreidingen!

RPS-5 (RPSSL)

RPS Lizard Spock

Sam Kass en Karen Bryla bedachten een uitbreiding van het spel en noemden het steen, papier, schaar, Spock en hagedis (RPSSL). Het werkt volgens hetzelfde principe, maar er komen twee extra wapens bij: een hagedis (voorgesteld door met de hand een kousenpopachtige mond te vormen) en Spock (voorgesteld door de Vulcaanse groet uit de Star Trek reeks te maken). Hierdoor wordt de kans op een gelijkspel kleiner (van 1/3 naar 1/5). In vier afleveringen van de televisiereeks The Big Bang Theory wordt deze uitgebreide variant van het spel vermeld.

De regels van steen, papier, schaar, Spock en hagedis zijn:

  • schaar snijdt papier

  • papier bedekt steen

  • steen plet hagedis

  • hagedis vergiftigt Spock

  • Spock smelt schaar

  • schaar onthoofdt hagedis

  • hagedis eet papier

  • papier weerlegt Spock

  • Spock verdampt steen

  • steen breekt schaar

RPS-25

Heb je nog meer tijd over? Je zou RPS-25, een superset van steen, papier en schaar kunnen overwegen…

RPS-25

De complexiteit neemt toe maar het probleem blijft hetzelfde!

RPS-101

Maar als je genoeg tijd hebt voor RPS-101 heb je echt een probleem!

Blijven spelen

Als je wilt dat je programma blijft spelen, kan je een lus met while True: gebruiken.

We laten twee voorbeelden zien in plaats van een gedetailleerde uitleg:

while True:
    print("Het draait nog steeds...")
    response = input("Nog een keer spelen? ")
    if response == "n":
        break

Hier zie je een andere mogelijkheid, een variant met het gebruik van een variabele running die aangeeft of het spel nog actief is of niet:

running = True
while running:
    response = input("Nog een keer spelen? ")
    if response == "n":
        running = False

Nogmaals, dit zijn voorbeelden en het is geen probleem als je niet begrijpt wat hier staat, we komen later uitgebreid terug op het gebruik van lussen (een techniek om handelingen te herhalen)!