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.