Protokoll
Üldpõhimõte
Mängu toimumiseks tuleb käivitada server, kes ise kutsub
välja mänguprogrammi(d) ja hakkab mängu juhtima. Mängija
suhtleb ainult serveriga, mitte kunagi otse oma vastasega. Käigud
jõuavad vastaseni serveri vahendusel. Mängijaks võib olla
nii programm kui inimene, kes suhtleb serveriga konsooli vahendusel.
Mäng võib hõlmata palju järjestikuseid partiisid
ilma mängija ja serveri vahelist ühendust katkestamata. Seeria algul
võib server küsida mängijalt nime. Enne iga partii algust
võib server teatada mängijale vastase nime ja/või
mänguparameetrite väärtused; nimi või väärtused,
mis on samad kui eelmises partiis, võib server ka saatmata
jätta.
Partii alates teatab mängija serverile oma laevade paigutuse. Edasi
küsib server mängijalt järjest ruute, teatab vastase
ütlusi nende peale ning vastase käike. Mängija ei pea vastase
ruuduküsimustele vastama, need vastused saadab vastasele server ise.
Kui mängija rikub reegleid, st paigutab laevad lubamatul viisil
või küsib olematuid ruute, lõpetab server kohe partii ja
loeb selle mängija kaotanuks. Samuti tunnistab server partii kaotanuks
mängija, kes jääb liiga kauaks mõtlema, ja katkestab
ühenduse temaga.
Partii lõpul saadab server mängijale täisinfo vastase
laevade paigutuse kohta, eeldusel et vastane on laevade paigutuse
reeglipäraselt teinud.
Täpne protokoll
Serveri teated
Iga teade moodustab omaette rea, st lõpeb reavahetusega. Käsku
eraldab tema argumentidest tühik. Järgnevas on argumentide ridu
tähistatud iseloomustava sõnaga nurgikute vahel.
- BGN
- Server teatab uue partii algusest.
- BRD <Paigutus>
- Server teatab vastase laevade paigutuse. <Paigutus> on
string, milles on järjest kõigi laevadesse kuuluvate ruutude
kahekohalised algebralised koodid (mistahes järjekorras, aga ilma
kordusteta).
- END <Staatus>
- Server teatab partii lõpust. <Staatus> on string, mis koosneb
kahest tühikuga eraldatud osast. Esimene osa on partii lõppemise
põhjus ja võib olla “normal”, “timeout”
või “violation”. Teine osa on skoor selle mängija
poolt vaadates, kellele teate saatis; skoor võib olla “0:1”
või “1:0”.
- EXT
- Server teatab, et rohkem partiisid ei toimu, mängija võib
ühenduse katkestada.
- MOV
- Server ootab mängija laevade paigutust või ruuduküsimist
(sõltuvalt partiistaadiumist).
- NAM <Nimi>
- Server teatab vastase nime. <Nimi> võib olla suvaline
string, mis ei sisalda reavahetust. Teade saadetakse kindlasti enne seeria
algust, kuid võidakse saata ka enne järjekordse partii algust. Kui
enne partii algust seda teadet ei saadeta, siis on vastane sama mis eelmises
partiis.
- PAR <Väärtused>
- <Väärtused> on string, milles on tühikuga
eraldatult kaks osa. Esimene osa näitab laevasuuruste loendit, mis
koosneb numbritest 1–9, mille summa pole suurem kui 25. Iga number
näitab ühe laeva suurust. Teine osa on “straight”,
“tetris” või “arbitrary” ja näitab laevade
kujulaadi. Teade saadetakse kindlasti seeria algul ja kui vastane on muutunud,
kuid võidakse saata ka muudel juhtudel. Kui enne partii algust seda teadet
ei saadeta, siis on parameetrite väärtused samad mis eelmises partiis.
- RSP <Vastus>
- Server teatab vastuse viimasele ruuduküsimisele.
<Vastus> võib olla “möödas”,
“pihtas” või “põhjas”.
- SQR <Ruut>
- Server teatab vastase küsitud ruudu. <Ruut> on ruudu
kahekohaline algebraline kood.
- WHO
- Server ootab mängija nime.
Mängija teated
- BRD <Paigutus>
- Mängija teatab oma laevade paigutuse. <Paigutus> on
string, milles on järjest kõigi laevadesse kuuluvate ruutude
kahekohalised algebralised koodid (mistahes järjekorras, aga ilma
kordusteta).
- NAM <Nimi>
- Mängija teatab oma nime.
- SQR <Ruut>
- Mängija teatab oma ruuduküsimise. <Ruut> on ruudu
kahekohaline algebraline kood.