adventure

Kravspec:

Totalt omfattar kursmomentet ca 20+20+20+20 studietimmar.

Projektidé och upplägg

Du frilansar som python-utvecklare och har precis tackat ja till ett uppdrag att utveckla ett textbaserat äventyrsspel. Du tänker att “ja, ja - det här kan jag fixa, jag har mycket kod som går att återanvända”.

Kunden låter dig välja spelidé - han vill testa dig. Men vissa gränser finns det som du måste hålla dig inom och vissa saker måste du uppfylla.

Spelet skall innehålla sju rum. Varje rum innehåller någon form av problem som skall lösas, när man löst problemet kommer man vidare till nästa rum. Klarar man sista rummet så har man klarat spelet.

Spelet behöver inte nödvändigtvis vara ett klassiskt “spel”. Du kan tolka det annorlunda och välja att skapa motsvarande som kanske utbildar i Python, eller ett verktyg som tar dig igenom dagen genom att hämta och visa information från olika webbplatser. Kanske har du en idé om att skapa och utveckla din python-Tamagotchi. Fri tolkning alltså. Men håll dig inom kraven nedan. Om din spelidé kräver att du justerar kraven aningen så dokumenterar du vad du gör och varför.

Projektspecifikation

Utveckla och leverera projektet enligt följande specifikationen. Saknas info i specen så kan du själv välja väg, dokumentera dina val i redovisningstexten.

De tre första kraven är obligatoriska och måste lösas för att få godkänt på uppgiften. De tre sista kraven är optionella krav. Lös de optionella kraven för att samla poäng och därmed nå högre betyg.

Varje krav ger max 10 poäng, totalt är det 60 poäng.

Krav 1, 2, 3: Grunden

Placera din kod i katalogen me/kmom10/adventure. Programmet som startar spelet skall heta adventure.py.

Det skall gå att skicka in en parameter till adventure.py, enligt följande.

Kommando Vad händer
-h, –help Skriver ut en beskrivning av kommandot och vilka parameterar som fungerar.
-i, –info Skriver ut en beskrivning av spelet och spelets idé.
-v, –version Skriver ut versionen av spelet.
-a, –about Skriver ut en kort beskrivning av dig själv, du som gjort spelet.
-c, –cheat Skriver ut minsta möjliga väg för att klara spelet och berättar hur du kan fuska dig fram.

Spelet startar med att en text visas om spelets handling. Därefter flyttas spelaren in till den första rummet.

Spelet har sju rum. Varje rum har en beskrivning i text som visas när man kommer in i rummet. Varje rum har en textbaserad grafisk representation — en bild av själva rummet.

I rummet har du sällskap av en spelledare, din egen coach — Marvin (eller motsvarande). Se det som att din spelledare hjälper dig att utföra kommandona. Det är med spelledaren du kommunicerar.

Väl i rummet kan du skriva vad du vill göra, det är kommandon som du kan ge till din spelledare.

Följande kommandon skall fungera.

Kommando Vad händer
i, info Skriver ut beskrivningen av rummet, samma som visas när man kommer in i rummet.
h, hjälp Skriver ut en lista av de kommandon som du kan göra.
fr, fram Gå framåt till nästa rum, om det är upplåst.
ba, bak Gå bakåt till föregående rum.
se Titta dig runt omkring - spelet svarar med om det finns något särskilt att se i rummet.
l, ledtråd Ge en ledtråd, eller fler om det finns, en ledtråd för varje gång man skriver kommandot.

I ett rum finns det objekt. Ett objekt har en beskrivning. Ett objekt kan du göra något med, du kan interagera med det. När du interagerar med ett objekt så kan det ändra form. En stängd garderob kan öppnas. En stol kan flyttas. En vas kan tas sönder. När något händer med ett objekt så kan det leda till att ytterligare ett objekt kommer in i rummet.

För att ta ett exempel. Du har objektet “Det är en vit garderob från Ikea, den ser väl använd ut. Dörren är stängd.”. Du gör kommandot öppna garderob, objektet ändrar form till att vara en öppen garderob (dess beskrivning ändras). Beskrivningen är nu “Det är en öppen garderob, i garderoben finns en kristallkula.”. Objektet kristallkula tillkom när du öppnade garderoben.

Följande skall du kunna göra med ett objekt.

Kommando Vad händer
o, objekt Skriver ut vilka objekt som finns i rummet.
t [objekt], titta [objekt] Skriver ut beskrivningen av objektet.
ö [objekt], öppna [objekt] Öppna objektet om det går att öppna.
s [objekt], sparka [objekt] Sparka på objektet så det går sönder, om det kan gå sönder.
f [objekt], flytta [objekt] Flytta på objektet så det hamnar på en annan plats, om det går att flytta.

Se till att du måste utföra en, eller en serie av händelser, i rummet — innan du kan gå vidare till nästa rum.

När du kommit till sista rummet, och utfört det som är nödvändigt, så har du klarat spelet. Då skall ett meddelande skrivas ut.

Se till att din kod validerar.

Krav 4: Ryggsäck och inventarier (optionell)

I rummen kan det finnas objekt som du kan ta upp och lägga i din ryggsäck. När du har plockat upp ett objekt så kan du använda det. När du använder ett objekt så kan något hända — du kan få ett annat objekt att ändra sig. Fundera på följande sekvens.

Det ligger en nyckel på golvet.

>>> ta nyckel
Du tog upp en nyckel.
>>> inv
I din ryggsäck ligger: nyckel

Nu går du till ett annat rum.

Det står en skattkista på golvet. Den är låst.

>>> använd nyckel
Du låste upp skattkistan.

Följande kommandon skall fungera.

Kommando Vad händer
inv, inventarier Skriver ut vilka objekt som finns i ryggsäcken.
ta [objekt] Ta ett objekt, om det går, och lägg i ryggsäcken.
sl [objekt], släpp [objekt] Släpp ett objekt som ligger i din rycksäck.
a [objekt], använd [objekt] Använd ett objekt.

Krav 5: Spara eller Scrapa (optionell)

Gör spelet helt baserat på curses. Se till att hantera om spelare har olika storlekar på sin terminal. Det är rimligt att kräva en viss minsta storlek på terminafönstret.

Erbjud en möjlighet att spara spelets status till fil och läsa spelet status från fil. Använd JSON som filformat. Låt spelaren ange filnamn. Hela spelets status skall sparas. Bifoga en fil som kan läsa upp status som innebär att spelaren står i sista rummet, har utfört alla uppgifter och tagit upp alla inventarier i sin ryggsäck (om ryggsäcken är implementerad).

Skriv i cheat om hur man läser upp denna special-filen.

Krav 6: Spel i spelet (optionell)

Använd curses-spelet du gjorde tidigare i kursen, eller skapa ett nytt.