Labb 7
- Uppdatering 2012–11–16: Allmänna instruktioner för labb 6, 7, och 8 finns här: http://www.ida.liu.se/~729G04/labbar/labbserien.sv.shtml
- Uppdatering 2012–11–22: Hi-score skulle ju inte vara med i denna labb enligt föreläsningsanvisningarna. Har strykit dem här också. Ursäkta förvirringen.
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 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
Inläsning av hiscore från filSkriva highscore till 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
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
Första raden i filen har namnet på startrummet. Andra raden i filen har namnet på målrummet.
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.
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
- Lägg till mynt till rum-representationen.
- Lägg till mynt i utskriften av rum-beskrivningen.
- 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.
- Definiera en bana i en text-fil.
- Implementera funktionen load_levels(filename) i följande steg:
- Använd en for-loop för att läsa in en rad i taget från den textfilen.
- Använd str.split(“\t”) för att spara de tab-separerade fälten som en lista av strängar.
- 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.
- 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: 2012-11-10
