Web
Analytics
 

Assignment 4b (Phase 2, Sprint 2)

Innehåll

Observera att denna uppgift ges som ett alternativ till inlupp 4 HT2018 på grund av att inluppen kommer ut något sent. Den är valbar för alla under 2018, även om jag tror att de flesta kommer att få mer ut av inlupp 4 (när den blir klar…).

1 Nästan ett MUD – mer av ett SUD

MUD står för ”Multi User Dungeon” och är en benämning på textorienterade rollspel där man spelar en person som utforskar en värld och interagerar med andra personer i världen. Som du kan se på t.ex. http://www.topmudsites.com/ finns det hundratals ”muddar” med olika världar, syfte och stämning.

Om du inte är bekant med MUD-begreppet gör du klokt i att följa länken ovan eller på annat sätt bekanta dig med det. Det kommer förmodligen att hjälpa dig att förstå resten av uppgiftstexten.

2 PollaxMUD

MUD-värden som du skall bygga skall vara en kopia av Polacksbacken. För enkelhets skull begränsar vi oss till plan 2. Rummen i datormodellen är sammankopplade och det går att gå mellan dem på samma sätt som i verkligheten. Korridorer modelleras som rum.

Denna specifikation är avsiktligt lös och lämnar många designbeslut över till er. Minns att det viktiga är inte vad programmet ni skriver gör, utan hur ni skriver programmet och dess objektorienterade design.

(Det kan också vara lämpligt att låta sig influeras av vilka mål som kvarstår att redovisas.)

2.1 Avataren

Avataren i spelet är en ung modig student av obestämt kön som traskar runt i MUD-världen. Avataren har följande egenskaper:

  • Oavslutade kurser. En lista av oavslutade kurser som avataren är registrerad på. Den är tom i starten.
  • Avslutade kurser. En lista av avslutade kurser som avataren är registrerad på. Den innehåller 6 kurser från början.
  • HP. En siffra mellan 0–180 som startar på 60.

Avataren har därutöver en ryggsäck som rymmer 10 liter.

2.2 Uppdraget

Avatarens uppdrag är att ta ut sin examen. Examensbeviset vaktas av Sfinxen som gömmer sig i något rum. För att få ut examensbeviset måste avataren leta upp Sfinxen, samla 180 HP och ha en tom lista av oavslutade kurser. Går man in till Sfinxen med 180 HP eller mer har man klarat spelet.

HP samlar man genom interaktion med varelser i andra rum.

2.3 Rum

Man kan gå runt i rummen med enkla terminalkommandon. När man går in i ett rum får man en textuell beskrivning av rummets utseende, vilka vägar ut ur rummet som finns, eventuella föremål i rummet som man kan ta eller interagera med, samt eventuella varelser i rummet.

Kommandot för att gå ut ur ett rum är ”go” och sedan ett väderstreck. Vi gör en förenkling och utgår från att inget rum har fler än en dörr i samma väderstreck.

Vissa dörrar är låsta och kan bara öppnas med hjälp av nycklar (se nedan).

2.4 Föremål

Det finns att antal föremål spridda i rummen i spelet.

  1. Nycklar. Alla nycklar passar i alla dörrar, men en nyckel kan bara användas för att låsa upp en dörr – sedan är den förbrukad. För att använda en nyckel skriver man ”use key with” väderstreck.
  2. Böcker. Böcker hjälper avataren att klara av kurser. En bok är knuten till en särskild kurs, se interaktion med varelser nedan.

För att plocka upp ett föremål skriver man ”pick up” och sedan namnet på föremålet. Föremål tar olika mycket plats. En nyckel tar 1 liter och böcker 1–3. Om ryggsäcken som rymmer 10 liter blir full kan man ta bort föremål med ”drop” och namnet på föremålet. Kommandot ”inventory” listar innehållet i ryggsäcken.

2.5 Varelser

  1. Lärare. Lärare bor i olika rum. En lärare är knuten till en särskild kurs som också är knuten till en bok och till ett antal HP.

    Om man går in i ett rum där det finns en lärare som är knuten till en kurs som är i studentens lista över oavklarade kurser är det 75% chans att läraren ställer en fråga på kursen. Denna fråga är en flervalsfråga (3 alternativ). Om man svarar rätt får man så många poäng som kursen avser; om man svarar fel händer ingenting.

    Om läraren istället skulle vara knuten till en avklarad kurs är det 50% chans att denne ställer en flervalsfråga (3 alternativ). Svarar man fel läggs kursen tillbaka i listan över oavslutade kurser och kursens HP försvinner från studentens HP.

    Om läraren är knuten till en kurs som inte finns i någon av studentens listor kan man välja att registrera sig på kursen. Detta görs med ”enroll” och kursens namn.

    Vid flervalsfrågor har man en fördel om man har kursboken. Då försvinner ett av de felaktiga alternativen.

  2. Studenter finns litet här och var i de olika rummen. Varje student går en kurs och har klarat en annan. Om man kan ge studenten kursboken för den kurs som studenten går kan man få något i utbyte: antingen kursboken för den andra kursen, eller rätt svar på lärarens fråga för den kursen.

    För att prata med en student används ”talk” och studentens namn. För att byta böcker med en student används ”trade” och namnet.

2.5.1 Sfinxen

Är stationär under hela spelet i något rum med bara en ingång. Sfinxen sitter på examensbeviset som inte kan ryckas loss.

Sfinxen kan man bara interagera med på två sätt: ”talk” och ”graduate”. I det första fallet kommer Sfinxen att dela med sig av någon irrelevant visdom; i det andra fallet kommer Sfinxen att syna avataren för att se om hen uppfyller alla kriterier för att få ut sin examen. Gör hen det så är spelet slut och en fint diplom skrivs ut över avklarade kurser. Om inte händer ingenting.

2.5.2 Skapandet av världen

Världen skall finnas beskriven i en radorienterad textfil där varje post är ;-separerad. Formatet är:

  1. Rummets namn
  2. Namnet på rummet vartåt rummets norra öppning vetter eller X om ingen finns
  3. -”- östra -”-
  4. -”- södra -”-
  5. -”- västra -”-
  6. True om rummets norra öppning är olåst, annars false
  7. -”- östra -”-
  8. -”- södra -”-
  9. -”- västra -”-

Nedanstående deklarerar alltså två rum, ”Room 1357” och ”Hallway 4” som är sammankopplade i väster respektive öster med en låst dörr.

Room 1357; X; X; X; Hallway 4; X; X; X; False
Hallway 4; X; Room 1357; X; X; X; False; X; X

Vilka kurser som finns, deras kursböcker och HP finns beskrivet i en annan radorienterad, ;-separarad textfil, t.ex.:

Folklivsforskning 101;Kaffekokning i pumpa av ohärdat glas;10

Vilka böcker som finns och vilka som skrev dem finns beskrivet i en radorienterad, ;-separarad textfil, t.ex.:

Kaffekokning i pumpa av ohärdat glas;Annie Melin;1965;2

Den sista siffran avser hur många ”liter” boken tar och begränsar hur många böcker man kan bära omkring på samtidigt.

Ett lämpligt antal lärare och studenter bör slumpas fram och placeras mer eller mindre slumpvist på kartan. För varje låst dörr på kartan bör 1,5 nycklar placeras ut, också de slumpvist. (Vi gör en förenkling och hoppas att detta inte leder till ett olösligt spel.)

3 Objektorienterad modellering

Modellera alla aspekter ”naturligt”. Det betyder bland annat att varje rum på Polacksbacken skall representeras som ett separat objekt med föremål som kan läggas till eller tas bort, studenter och lärare som skulle kunna komma och gå, etc. Man kan modellera att två rum sitter samman med ytterligare ett objekt, vilket är en naturlig plats för placering om information om öppningen är öppen eller stängd.

Modellera alla varelser som en klasshierarki med Varelse som superklass. Fundera på om avataren platsar i denna hierarki.

Med en vettig design är det enkelt att komma på nya features eller göra utökningarna. Har man en bra modell blir det enkelt att implementera denna uppgift som en faktiskt MUD.

4 Frivilliga utökningar

  1. Implementera spelet som en faktisk MUD, d.v.s. det finns en central server med flera klienter uppkopplade mot sig. Flera avatarer kan då gå runt på Polacksbacken och samarbeta. Om två avatarer är i samma rum bör de kunna tala med varandra på textchatt. De kan också stjäla böcker av varandra med kommandot ”steal” som stjäl en slumpvis bok. Enda sättet att märka att man blivit bestulen är med hjälp av ”inventory”-kommandot.
  2. Simulering. Utrusta avatar-klassen med olika beteenden (se t.ex. strategy pattern för inspiration). Låt sedan spelet ha en puls som går och vid varje puls gör alla avatarer en handling. Vad som händer skall skrivas ut på skärmen.

    Man kan tävla genom att skriva olika beteenden och låta dem race:a mot varandra i mudden.

  3. Använd XML eller YAML för att spara data istället för det betydligt sämre sättet som specificerats här.

5 Finishing the Assignment

  1. Go over your backlog of cheats and dodges and see which ones need taking care of. Ideally this stack should be empty.
  2. Write up any necessary documentation of your program, any extra documentation needed because of design decisions you took or deals made with the teachers. Put this in a README.md in the top-level directory for this assignment.
  3. As the first section of README.md, add instructions for how to build and run the program. Ideally, this should be as easy as make followed by make run.
  4. Prepare a demonstration of z104 to give at the next lab. In addition to z104, pick another 2-3 achievements to tick off, and include these in your demonstration preparation. To back up your presentation, present evidence like places in your code where relevant things show up, documentation, paper drawings, etc. – things that support your demonstration. Think carefully about what things fit together (ask for help if you feel uncertain after trying) and what achievements tell a good story together. Make sure that not one person dominates the demonstration or answers all questions to avoid someone failing the demonstration because there was no evidence of achievements mastery.
  5. Send an email to z104@wrigstad.com with your names and usernames, a link to the GitHub repository where the code can be checked out.
  6. Create a final commit for the assignment and check it into GitHub. After the normal push, add a tag assignment4_done (be careful to spell it just like that) and push the tag to the server by adding --tags to the git push command. If your partner wants to pull the tag, he or she needs to add a --tags to the git pull command, but if you were careful to have a commit which was just a tag, then having that synced is not important.
  7. Optional Please take time to feedback on the assignment.

Författare: Tobias Wrigstad

Created: 2019-04-19 Fri 13:12

Validate