LU-LSP-b13:projekts

From DiLab
Jump to: navigation, search

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ē:

  1. 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.
  2. 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:

  1. Spēle notiek pozitīvu koordināšu sistēmā.
  2. Protokols TCP
  3. Servera atbildē pirmais simbols ir tās pašas komandas, kura tika sūtīta.
  4. Spēlētāju lietotājvārdi var saturēt tikai a-z simbolus, nekādu diakritisko vai speciālo simbolu.

Komandas:

Turpmāk "K:" apzīmē klienta komandu, bet "S:" servera komandu vai atbildi.

-- 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
  • [...] - PID_X_Y_UID_CAPACITY_SHIPS atkārtojas katrai planētai, PLANET_COUNT reizes.

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
  • [...] - atkārtojas ID_USERNAME ar pārējiem spēlētājiem, kopā COUNT reizes

Piemērs:

K: U
S: U 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

Piemērs:

K: A
S: A 2 1_50_3_2_45 2_100_4_2_15

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