LU-LSP-b13:projekts
Uzdevums: izstrādāt klienta un servera programmatūru, kas realizē daudzlietotāju spēli datortīklā.
Par spēli izvēlēta Galcon spēles tēma ar vienkāršotiem noteikumiem, kas definēti zemāk.
Kursa projekta mērķis ir pielietot kursā apgūto par sistēmas resursiem, servisiem un programmēšanu lai izstrādātu programmatūru.
Tai skaitā:
- starpprocesu komunikācija lietojot "sockets"
- vairāku procesu vai pavedienu arhitektūra
Spēles noteikumi
Spēles vēsture un apraksts pieejami šeit.
Šajā projektā lietojami vienkaršoti spēles noteikumi.
Spēles mērķis ir iekarot pēc iespējas vairak planētas.
- Planētas tiek iekarotas sūtot uz tām kosmosa kuģus.
- Katrai planetai ir vērtība, kas nosaka, cik kuģu nepieciešams lai to iekarotu.
- Iekarojot planētu tiek zaudēti tik kuģi cik ir planētas vērtība.
- Bez tam par katru pretinieka kuģi, kas atrodas uz planētas, tiek zaudēts arī iekarotāja kuģis.
- ja pēc planētas iekarošanas paliek pari vismaz viens spēlētāja kuģis, tad planēta pāriet spēlētaja īpašumā.
- Katra spēlētāja iekarotā planeta ražo kuģus.
- Planētas ražība, t.i. saražoto kuģu skaits laika vienībā ir atkarīga no tās lieluma.
Spēles realizācijas principi
Jums jārealizē:
- servera programmatūra, kas modelē pasauli ar planētam un spēlētāju kuģiem, ka arī apkalpo spelētāju klienta programmatūru.
- klienta programmatūra, kas ļauj spēlētājiem pieslēgties spēles serveriem un piedalīties spēlē.
Spēles parametri tiek definēti konfigurācijas failā, kuru jāprot ielasīt un realizēt jebkuram serverim.
Konfigurācijas faila formāts tiek kopīgi izstrādāts piedaloties visiem studentiem un pasniedzēiem.
Komunikācijas protokols starp servera un klienta programmatūrām arī tiek izstrādāts kopīgi tā, lai jebkurš klients un jebkurš serveris būtu savietojami.
Klienta un servera programmatūru izstrādā katra komanda pati.
Komunikācijas protokols
Piedāvāju versiju komunikācijas protokolam, (paldies Kārlim Babrim).
Aicinu vadīties pēc šī protokola. Kritiskos gadījumos var tikt pieņemtas arī atkāpēs no šī protokola, vai papildinājumi. Protams, projekta grupas ietvaros visam jādarbojas korekti. Piemēram, ja klienta programmatūrā ieviesti protokola papildinājumi, tie jāatbalsta arī servera programmatūrai.
Piezīmes:
- Spēle notiek pozitīvu koordināšu sistēmā.
- Protokols TCP
- Servera atbildē pirmais simbols ir tās pašas komandas, kura tika sūtīta.
- Spēlētāju lietotājvārdi var saturēt tikai a-z simbolus, nekādu diakritisko vai speciālo simbolu.
Komandas:
-- Reģistrācija
K: J USERNAME S: J USERID SECONDS
- USERNAME - lietotājvārds
- USERID - lietotāja ID vai 0, ja netika reģistrēts
- SECONDS - atlikušās sekundes līdz spēles sākumam
Piemērs:
K: J karlis S: J 1 15
-- Dati par planētām
K: M S: M PLANET_COUNT PID_X_Y_UID_CAPACITY_SHIPS [...]
- PLANET_COUNT - planētu skaits kartē
- PID - planētas ID
- X un Y - planēta koordinātes
- UID - attiecīgās planētas īpašnieka ID, 0, ja nepieder nevienam
- CAPACITY - planētas ietilpība
- SHIPS - planētā esošo kuģu skaits
Piemērs:
K: M S: M 2 1_12_15_1_100_50 2_20_45_2_90_40
-- Kuģa nosūtīšana uzbrukumā
K: S FROM TO AMOUNT S: S SENT_AMOUNT ARRIVAL_TIME
- FROM - no kuras planētas sūta
- TO - uz kuru planētu sūta
- AMOUNT - cik kuģus sūta
- SENT_AMOUNT - nosūtīto kuģu skaits. 0, ja nevarēja nosūtīt
- ARRIVAL_TIME - laiks sekundēs pēc kura ieradīsies. 0, ja nevarēja nosūtīt
Piemērs:
K: S 1 2 30 S: S 30 65
-- Spēlētāju saraksta iegūšana
K: U S: U COUNT ID_USERNAME [...]
- COUNT - skaits, cik spēlētāju ir kopā
- ID - konkrētā spēlētāja ID
- USERNAME - konkrētā spēlētāja lietotājvārds
Piemērs:
K: U S: 2 1_karlis 2_janis
-- Saņemt klientam visus vērstos uzbrukumus
K: A S: A COUNT PID_AMOUNT_FROM_UID_TIME
- COUNT - uzbrukumu skaits
- PID - planēta, kurai uzbrūk
- AMOUNT - skaits, cik kuģi tiek sūtīti
- FROM - planēta, no kuras nāk uzbrukums
- TIME - laiks sekundēs pēc kāda ienāks uzbrukums
Servera konfigurācija:
- PLAYERS - maksimālais spēlētāju skaits kartē
- SPEED - vienību daudzums cik koordināšu sistēmā vienas sekundes laikā veic kuģis
- START_TIME - laiks sekundēs pēc servera ieslēgšanas, kurā sākas spēle, ja vēl nav sasniegts PLAYERS limits
- MIN_CAPACITY - minimālais maksimālo kuģu skaits planētā
- MAX_CAPACITY - maksimālais maksimālo kuģu skaits planētā
Piemērs:
PLAYERS 10 SPEED 5 START_TIME 30 MIN_CAPACITY 20 MAX_CAPACITY 100