Labb 7

Den andra milstolpen i vårt spelutvecklingsprojekt handlar om att ha en fullständig bana implementerad samt möjligheten att plocka upp mynt.

För att slippa ha banan i koden, ska vi specificera ett filformat som vi lagrar banan i. D.v.s. vi lagrar banan som text i en fil och när vi kör vårt spel, så läser vi in denna textfil och skapar banan enligt den.

Vi ska även implementera mynten i spelet. Se föreläsningsbilder för mer ytterligare information och tips.

Implementerat sedan tidigare

  • funktion som skapar en abstrakt datatyp som representerar ett rum
  • lagring av alla rum i ett dictionary
  • textgränssnitt för navigation mellan rummen
  • felhantering i textgränssnittet samt i funktioner relaterade till den abstrakta datatypen för rum

Att implementera i denna labb

  • Inläsning av bana från fil
  • Poäng: Börja med 100 poäng. Minuspoäng för varje förflyttning. Pluspoäng för varje mynt. Ni bestämmer avdraget för förflyttningar och hur mycket upplockat mynt är värt.
  • Mynt i rummen
  • Möjlighet för spelaren att plocka upp mynt

Filformat för banan

Första raden i filen har namnet på startrummet. Andra raden i filen har namnet på målrummet.

Varje rum i vårt spel lagras som en rad i en textfil. Vi låter tab-tecknet separera de olika attributen och använder ordningen

  • namn
  • beskrivning
  • namn på rum norrut
  • namn på rum österut
  • namn på rum söderut
  • namn på rum västerut
  • antal mynt i rummet

Nedanstående är ett exempel på hur en bana i detta format kan se ut:

Hall
Exit
Hall\tThe floorboards creak as you enter the hall\tStone Room\t\t\t\t4
Stone Room\tThere floor is made of stone\tExit\t\t\t\t0
Exit\tYou have reached the exit\t\t\t\t\t0

Där \t är ett tab-tecken - ni använder ett riktigt tab-tecken i er fil, men här används \t för att tab-tecknet ska synas.

Läsa från fil

Varje rum motsvaras alltså av en rad i filen efter de två första raderna. Varje attribut i den abstrakta datatypen rum, motsvaras av en tab-tecken-separerade strängar.

Se föreläsningsbilderna för mer information om hur fil-läsning går till.

Uppgifter

  1. Lägg till mynt till rum-representationen, dvs i den abstrakta datatypen för rum.
  2. Lägg till mynt i utskriften av rum-beskrivningen.
  3. Lägg till variabel för att hålla koll på hur många mynt spelaren har, samt funktionalitet för att plocka upp mynt från ett rum.
  4. Definiera en bana i en text-fil.
  5. Implementera funktionen load_levels(filename) i följande steg:
    1. Använd en for-loop för att läsa in en rad i taget från den textfilen.
    2. Använd str.split(“\t”) för att spara de tab-separerade fälten som en lista av strängar.
    3. Skriv en funktion add_room(name, description, north_exit, east_exit, south_exit, west_exit, coins) som skapar ett rum, sätter alla attribut till de korrekta värdena, samt lägger till rummet till det dictionary som ni använder för att spara alla rum.
  6. Implementera någon form av poängräkning. Till exempel att spelaren har 100 poäng när hen börjar och att för varje förflyttning hen gör, dras t.ex. 1 poäng bort. För varje mynt hen plockar upp får hen t.ex. 5 poäng.

Inlämning

Skicka in kod via e-post till din handledare. Lämna in papperskopia om du fått instruktioner av din handledare att göra det.


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