Skapa klienter och servrar som spelar luffarschack i Node.js
Du skall jobba med konceptet klient och server genom att skriva ett par olika varianter av klient och server mot en och samma klass för ett luffarschack. Du jobbar i Node.js.
#Förkunskaper
Du har jobbat igenom artiklarna “Gör en kommandoradsklient i Node.js” och “Spela luffarschack med klient och server i Node.js”.
#Introduktion
I artiklarna ovan så har koncepten gåtts igenom och du har fått tillgång till viss exempelkod som du nu skall använda och bygga vidare på.
Du får själv kopiera in de filerna du anser du behöver. Spara alla filerna i katalogen me/kmom06/gomoku
.
#Krav
#Del 1 Spela lokalt
Börja med att kopiera in klassfilen för
example/nodejs/gomoku/GomokuBoard.js
. Kopiera sedan in exempletexample/nodejs/gomoku/index-random.js
och testkör så att det fungerar. Nu har du en bas att utgå ifrån. Testa att det går att köra.Du skall skapa ett program
index-game1.js
som använder modulenGomokuBoard.js
för att spela luffarschack. Du kan utgå från koden iindex-random.js
.Du skall kunna starta programmet och ange storleken på spelet, så här.
Kommando | Vad skall hända |
---|---|
./index-game1.js |
Kör igång ett spel med 20x20 rutor. |
./index-game1.js -v |
Visar versionen av programmet och avslutar med exit code 0. |
./index-game1.js -h |
Visar hjälptext om programmet och avslutar med exit code 0. |
./index-game1.js 15 |
Kör igång ett spel med 15x15 rutor. |
4. Spelet skall innehålla en mainloop där du kan placera ut nästa bricka i spelet. Du skall ange två integer på raden, först värdet på x, följt av värdet på y. Din mainloop tar dessa värden och placerar en bricka (X eller O beroende på vems tur det är) på rätt position. Därefter skrivs spelplanen ut.
Det kan se ut så här när du anger en plats för X/O.
Gomoku$ 9 9
5. Du får gärna uppdatera koden i GomokuBoard.js
, men det skall inte vara nödvändigt för att klara uppgiften.
#Del 2 Bygg en server
1. Kopiera in koden för servern example/nodejs/gomoku/GomokuServer.js
, example/nodejs/gomoku/index-server.js
samt routern som du hittar i example/nodejs/router/router.js
. Ändra sedan så att sökvägen till routern blir korrekt i importeringen överst i filen GomokuServer.js
.
var Router = require("./router");
//var Router = require("../router/router");
Nu har du en körbar server via index-server.js
. Testa den.
2. Uppdatera skriptet så att det läser av environment-variabeln LINUX_PORT
och, om variabeln är definierad, använder dess innehåll som portnummer att koppla upp sig mot. Standardvärde skall vara 1337.
3. Utöka servern GomokuServer.js
med en metod placeRandom()
som placerar ut brickan för nästa spelare på en slumpmässig plats på spelplanen.
4. Utöka API:et och lägg till följande. Verifiera att det fungerar med curl.
Länk | Vad skall hända |
---|---|
GET /place/random |
Placera draget för spelaren som står på tur, på ett slumpmässigt vis. |
#Del 3 Bygg ut klienten till servern
1. Kopiera in koden för servern example/nodejs/gomoku/GomokuClient.js
och example/nodejs/gomoku/index-client.js
. Du har nu en klient index-client.js
som går att köra och som kan koppla upp sig mot servern. Testa det.
2. Uppdatera klienten så att det läser av environment-variabeln LINUX_PORT
och, om variabeln är definierad, använder dess innehåll som portnummer att koppla upp sig mot. Standardvärde skall vara 1337.
3. Klienten skall läsa av environment-variabeln LINUX_SERVER
och, om variabeln är definierad, använda dess innehåll som adress till servern. Standardvärde skall vara localhost.
4. Utöka klienten med stöd för kommandot place random
.
Gomoku$ place random
5. Validera och publicera din kod enligt följande.
# Ställ dig i kurskatalogen
dbwebb validate gomoku
dbwebb publish gomoku
Rätta eventuella fel som dyker upp och publicera igen. När det ser grönt ut så är du klar.
#Extrauppgift
Lägg till stöd så att
GomokuBoard.js
kan se när någon har vunnit spelet.Skapa lite bättre intelligens i
placeRandom()
så att spelbrickan placeras ut på en rimlig plats. Går så gott du kan. Kanske räcker det med att placera en bricka jämte en annan.Om du hade byggt ut servern så att den styr upp klienterna så att de bara kan lägga om det är deras tur, samt stödja flera spel samtidigt. Hur hade du då gjort? Förklara i redovisningstexten, eller skriv koden för det.
#Tips från coachen
Lycka till och hojta till i forumet om du behöver hjälp!
#Revision history
- 2016-02-17: (C, mos) La till så att klienten läser av LINUX_PORT och LINUX_SERVER.
- 2016-07-04: (B, mos) Lade till om default PORT och SERVER.
- 2015-09-11: (A, mos) Första utgåvan i samband med kursen linux.