Labb 6

Observera! Labb 6 kommer att bytas ut till HT2014

  • Allmänna instruktioner för labb 6, 7, och 8 finns här: http://www.ida.liu.se/~729G04/labbar/labbserien.sv.shtml. Se även förläsningsbilderna från 2013-11-12.
  • Labb 6 är den första labben i en serie labbar. Serien går ut på att ni ska skriva ett spel. Spelet går ut på att hitta ut ur en labyrint. På vägen så ska man försöka så många mynt som möjligt.
  • Spelet implementeras i tre steg. Varje steg ses som en milstolpe i utvecklingsprocessen med en leverans som ska lämnas in.

Leveransen för labb 6 ska innehålla

  • funktioner som används för att skapa och manipulera den abstrakta datatyperna för rum
  • sju rum som sitter ihop
  • ett embryo till själva spelet:
    • huvudpersonen börjar i ett rum
    • användaren kan navigera mellan rummen med via ett textgränssnitt
    • användaren kan be om en beskrivning av rummet med hjälp av kommandot titta/look

Felhantering

  • Inmatningen från användaren ska felhanteras. Dvs användaren ska kunna skriva in vad som helst utan att programmet kraschar.
  • förflyttningar ska felhanteras -- feedback ska ges till användaren om hen försöker gå åt ett håll som det inte finns ett rum
  • set-funktionerna ska också innehålla felhantering, dvs de ska kontrollera så att argumenten är av rätt typ.

Kodkrav på inlämningen

  • Inlämningen ska följa PEP-8
  • Kommentera koden så att er labbhandledare kan förstå vad ni försöker åstadkomma. Ni behöver inte kommentera varje rad, men se till att det går att förstå hur nu tänkt med er kod.
  • All hantering av den abstrakta datatypen för rum ska ske via hjälpfunktionerna!

Förberedelser

Abstrakt datatyp för rum

I denna labb ska vi använda ett dictionary för att implementera vår abstrakta datatyp för rummen. Dictionaryt ska ha följande nycklar:

  • name
  • description
  • exits

Värdet på name är en sträng med namnet på rummet. Värdet på description är en sträng med en textbeskrivning av rummet. Värdet på exits är en lista som innehåller namnen de rum man kan komma till från rummet. Ordningen på utgångsrummen är [norr, öst, söder, väster]. Om ingen utgång finns åt ett visst håll används en tom sträng. Exempel på ett rum:

{"name": "Lobby",
 "description":"The lobby is cold and dark. You hear the wind blowing to the east.",
 "exits":["Garden", "Hallway", "", ""]}

Implementationssteg

Följ stegen nedan för labb 6.

  1. Skapa en funktion create_room(name, description, north_exit, east_exit, south_exit, west_exit) som skapar ett rum, dvs returnerar ett rum enligt beskrivningen ovan.
  2. Skapa funktionen set_room_description(room, description) som tar ett rum som argument och ändrar på dess beskrivning. Room är använder den struktur som skapats av create_room() som representerar ett rum. Beskrivningen är en sträng.
  3. Skapa funktionerna set_north_exit(room, exit_room), set_east_exit(room, exit_room), set_south_exit(room, exit_room) och set_west_exit(room, exit_room) som används för att ändra på ett rums utgångar. Dessa funktioner tar alltså in två argument: room är ett rum, dvs ett dictionary som är vår implementation av den abstrakta datatypen room, samt exit_room som är sträng med namnet på vilket rum man kommer till om man går åt det hållet.
  4. Skapa get-funktioner för alla attribut hos rum som ni kan sätta.
  5. Skapa sju rum som hänger ihop, spara dem i ett dictionary. Använd rummens namn som nycklar.
  6. Spara spelarens position (en referens till ett rum) i en global variabel current_room
  7. Skriv en funktion main() som innehåller huvudloopen. Huvudloopen innehåller implementationen av textgränssnittet som ska möjliggöra att du kan gå mellan rum. Gör så att man kan avsluta spelet om man skriver "quit" eller "avsluta".
  8. Skriv en funktion describe_room(room) som skriver ut ett rums beskrivning samt berättar vilka håll som det finns dörrar åt.
  9. Implementera kommadot look eller titta som använder describe_room(room) för att ge en beskrivning av rummet.
  10. Implementera kommandon för förflyttning, dvs användaren ska kunna ge ett förflyttningskommando (t.ex. n, e, s, w) och spelaren ska då om möjligt förflytta sig. Skriv ut ett meddelande som berättar om förflyttningen lyckades eller inte.

Nedan följer ett skissartat körexempel.

>>> main()
Welcome to the LABYRINTH

--------------------
Room: Start
The walls and floor are made of stone. You feel cold.
Exits: north
--------------------
Command: north
You walk through the north exit.
Command: look
--------------------
Room: North room
The walls and floor are made of stone. You feel cold. Deja vu.
Exits: east, south
--------------------
Command: 

Tips

Alla tips har flyttat till denna kompissida: http://www.ida.liu.se/~jodfo/kompis/labb6tips

Inlämning

Labben lämnas in via e-post till din handledare.


Sidansvarig: Jody Foo
Senast uppdaterad: 2013-11-12