Labb1
- Inlämningsdatum Inget inlämningsdatum
- Poäng 18
Lab 1: Gissa talet jag tänker på
Mål
HTTP protokollet, GET, POST och sessionskakor
Översikt
I den här labben ska ni implementera ett HTTP-baserat gissningsspel i Java eller Python, baserat på vanliga sockets. Spelet går ut på att spelaren får gissa på ett tal mellan 1 och 100 och servern ska gratulera vid korrekt gissning och ge en ledtråd vid fel gissning och låter spelaren försöka igen. Den svåra biten i den här labben är hur servern ska hålla isär olika spelomgångar som spelas av olika spelare på flera simultant.
För att ni ska kunna se vad vi förväntar oss och hur din lösning ska fungera, har vi gjort ett exempel som du kan spela spelet (länken nedan). Det finns även en version som stegvis visar och detaljerad förklarar vad som händer hos servern medan du spelar spelet, vilket kan hjälpa dig att förstå hur du ska genomföra labben. Länk till denna version visas när du har lyckats gissa rätt på det tänkta talet i exemplet https://course-dd1389-vt19.csc.kth.se/~vahid/guess.php.
I git-repon för lab1 finner du hjälpfilerna Server.java, main.py och socket_wrapper.py som du kan kanske ha nytta av. Git-repon kommer att sättas upp inom kort.
Specifika krav
- Servern kommer ihåg användaren genom att spara ett SESSION-ID i en kaka.
- Använd Javas ServerSockets eller Pythons socket. I din gits-15 repo finns en exempelkod, startfiler, till din hjälp för att lättare komma igång. Exempelkoden är en sever som tar emot request från klienten och beroende på om det en GET- eller POST-request gör den olika saker. Utgå från koden och bygg den vidare till en komplett lösning.
- Du får inte använda javascript i din lösning.
- Vid en gissning ska servern svarar med ledtråden på vilken räckvidd din nästa gissning ska vara, se exemplet.
- Ni ska spara HTML:en i egen fil guess.html som läses av er server som med hjälp av ett unikt påhittat ankare sätter in de värden som ändras mellan gissningar. Se exempelvis moustache för inspiration (notera dock att ni inte får använda ett externt bibliotek).
- HTML:en måste vara valid. Enklaste sättet att kolla det är att använda WC3 validator, https://validator.w3.org Links to an external site..
- När användaren gissar rätt ska följande ske:
- Sessionen avslutas, vilket inkluderar att sessionskakan invalideras, och all info om sessionen och avklarade spelomgången raderas från minnet.
- Användaren får en sida med information om att gissningen var korrekt med antal gjorda gissningar, se exemplet.
- Det ska finnas en knapp (länk) så att användaren kan starta en ny omgång, se exemplet.
- Om användaren uppdaterar sidan genom att klicka in i adressfältet och trycka på enter ska programmet visa samma sida, se exemplet.
- Servern får inte krascha.
Tips:
- Du kan använda dig av HTML:en från vår exempelsida genom att använda en funktion som finns hos webbläsarens som visar källkoden. Funktionen brukar finnas under menyn och kallas “Visa källkod”. Fokusera dock på att få igång servern först. För att hjälpa er så har vi gett er skelett (se startfiler i gits-15) i Java och Python.
- Starta med att servern hanterar bara en klient åt gången och expandera därifrån.
Bonusuppgift X1
Om du har löst uppgiften i Python lös den nu i Java, eller om du har löst den i Java lös den i Python.
Matris
Kriterier | Bedömningar | Poäng |
---|---|---|
Description of criterion
tröskel:
poäng
|
poäng
--
|