Simulacija igre Space Invaders u kojoj učestvuju jedan ili dva igrača povezana sa centralnim serverom. Igra se odvija u terminalskom okruženju i koristi TCP/UDP protokole za komunikaciju.
- Server - Centralni server koji upravlja igrom
Class1.cs- Server klase (GameServer,Position,Player,Obstacle,Bullet)Program.cs- Entry point za server aplikaciju
- Player1 - Klijentska aplikacija za prvog igrača
Class1.cs- Klijentska klasa (SpaceInvadersClient)Program.cs- Entry point za prvi klijent
- Player2 - Klijentska aplikacija za drugog igrača
Class1.cs- Klijentska klasa (SpaceInvadersClient)Program.cs- Entry point za drugi klijent
GameServer- Glavna server klasa za upravljanje igromPosition- Predstavlja poziciju na mapi (X, Y koordinate)Player- Predstavlja igrača sa svim podacima (pozicija, skor, životi, mrežni endpoint-ovi)Obstacle- Predstavlja prepreku koja se spuštaBullet- Predstavlja metak koji puca igrač
SpaceInvadersClient- Glavna klijentska klasa za komunikaciju sa serverom
- TCP protokol - Za početno povezivanje, odabir moda igre i razmenu osnovnih podataka
- UDP protokol - Za komunikaciju u realnom vremenu (kretanje, pucanje, ažuriranje pozicija)
- Dimenzije: 15x30 (visina x širina) - optimizovano za brže gaming
- Igrači se nalaze na dnu mape
- Prepreke se generišu na vrhu i spuštaju se prema dole
- Metci se kreću od igrača prema preprekama
- TCP port: 51000
- UDP port: 51001
cd Server
dotnet runcd Player1
dotnet runcd Player2
dotnet run- A ili ← - kretanje levo
- D ili → - kretanje desno
- SPACE - pucanje
- Q - izlaz iz igre
- Početak igre: Prvi igrač bira mod (1 ili 2 igrača) i broj poena potreban za pobedu
- Povezivanje: Igrači se povezuju sa serverom putem TCP-a
- Priprema: Igrači se pripremaju za igru (pritisnuti bilo koji taster kada se pojavi poruka)
- Igra:
- Server generiše prepreke koje se spuštaju ka igračima
- Igrači šalju kretanja i akcije serveru putem UDP-a
- Server ažurira stanje igre i šalje nazad igračima
- Igrači dobijaju poene kada pogode prepreku
- Igrači gube život kada ih pogodi prepreka
- Završetak: Igra se završava kada neki igrač dostigne ciljan broj poena ili svi igrači izgube sve živote
- Svi projekti koriste
127.0.0.1(localhost) - Ne treba dodatna konfiguracija
Prema materijalima o prosleđivanju porta:
-
Otkrijte lokalnu IP adresu:
ipconfig -
Konfigurišite ruter:
- Pristupite ruteru preko pregledača (obično 192.168.1.1 ili 192.168.0.1)
- Idite na "Port Forwarding" ili "Virtual Servers"
- Dodajte pravila za:
- TCP port 51000 → lokalna IP adresa servera
- UDP port 51001 → lokalna IP adresa servera
-
Otkrijte eksternu IP adresu (za server):
- Koristite sajt poput https://whatismyipaddress.com/
-
Ažurirajte kod klijenta:
- U
Player1/Class1.csiPlayer2/Class1.cs - Promenite
SERVER_IPsa "127.0.0.1" na eksternu IP adresu servera
- U
-
Testiranje konekcije:
ping [eksterna_IP_adresa_servera]
- Napredna collision detection: Dodato "near miss" prepoznavanje za brže objekte
- Stabilniji sistem: Lista-baziran pristup za sigurno uklanjanje objekata
- Bez index grešaka: Rešeni problemi sa menjanjem lista tokom iteracije
- Pouzdanije pogađanje: Metci više neće prolaziti kroz prepreke
- Brže osvežavanje igre: Update loop 100ms umesto 150ms (6.7 FPS)
- Sporiji pad prepreka: Prepreke se pomeraju svakih 200ms umesto 100ms
- Ređe generisanje prepreka: Nova prepreka svakih 4 sekunde umesto 3
- Bolja kontrola gameplay-a: Balans između brzine i kontrole
- Optimizovana mapa: Promenjena sa 20x40 na 15x30 za brži gameplay
- Poboljšana collision detection: Pouzdaniji sistem detekcije kolizija sa sigurnosnim proverama
- Sporiji refresh rate: Optimizovan za bolju kontrolu (3.3 FPS)
- Čista arhitektura koda: Uklonjen problematični "Class1" declaration
- Stabilniji gameplay: Prepreke se generišu svakih 3 sekunde umesto 2
- Ispravka UDP socket greške: Dodati timeout-ovi za UDP prijem da se izbegnu beskončne blokirajuće operacije
- Sinhronizacija igrača: Server sada čeka da se svi igrači pripremi ("READY" signal) pre početka igre
- Bolje rukovanje greškama: Ignorišu se timeout greške koje su normalne za UDP komunikaciju
- Automatska alokacija portova: UDP klijenti koriste port 0 za automatsku alokaciju dostupnog porta
- UDP Timeout: Klijenti imaju 2-sekundni timeout za UDP prijem
- Ready sistem: Igrači šalju "READY" signal kada pritisnu taster za početak
- Bolje parsiranje: Dodano
StringSplitOptions.RemoveEmptyEntriesza čišće parsiranje poruka - Robusnost: Bolje rukovanje disconnect scenario
- Game timing: Update loop 100ms, prikaz 150ms, prepreke svakih 4s
- Sporiji pad prepreka: Prepreke se pomeraju svakih 200ms za bolju kontrolu
- Advanced collision: "Near miss" detection i lista-baziran cleanup sistem
- Koristite složenu lozinku za ruter
- Portovi se automatski zatvaraju kada se server zaustavi
- Za produkciju, koristite dodatne bezbednosne mere
-
Pokretanje servera:
=== SPACE INVADERS SERVER === Server pokrenut na TCP portu 51000 i UDP portu 51001 Čekam igrače... -
Prvi igrač se povezuje i bira mod:
=== SPACE INVADERS - IGRAČ 1 === Uspešno povezan sa serverom! Odaberite mod igre: 1 - Jedan igrač 2 - Dva igrača Unesite broj (1 ili 2): 1 -
Igrač se priprema:
╔══════════════════════════════════════════════╗ ║ IGRA POČINJE ║ ╚══════════════════════════════════════════════╝ Kontrole: A / ← - kretanje levo D / → - kretanje desno SPACE - pucanje Q - izlaz iz igre Pritisnite bilo koji taster za početak... -
Igra počinje sa prikazom mape na serveru:
╔═══════════ SPACE INVADERS ═══════════╗ ║ Marko │ Skor: 0 │ Životi: 3 │ Pos:( 7,13) ║ ║ Cilj: 10 poena ║ ╚═══════════════════════════════════════╝ ┌──────────────────────────────┐ │ │ │ # │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 1 │ │ │ │ │ └──────────────────────────────┘ Prepreke: 1 │ Metci: 0 │ Status: AKTIVNA │ FPS: 6.7
- Proverite da li je server pokrenut
- Proverite da li su portovi dostupni
- Za udaljenu konekciju, proverite port forwarding
- Proverite firewall postavke
- Proverite da li su UDP portovi blokirani
- Rešeno: Timeout greške su sada ignorirane jer su normalne
- Proverite kvalitet mreže konekcije
- Proverite da li je server preopteređen
- Rešeno: Dodani su timeout-ovi da se izbegnu beskončne blokirajuće operacije
- Rešeno: UDP klijenti sada koriste port 0 za automatsku alokaciju
- Rešeno: Dodani su timeout-ovi za UDP operacije
- Rešeno: Implementiran napredni collision sistem sa "near miss" detection
- Rešeno: Lista-baziran pristup za bezbedno uklanjanje objekata
- Rešeno: Eliminisane index out of range greške
Za lokalno testiranje:
- Pokrenite server u jednom terminalu
- Pokrenite Player1 u drugom terminalu
- Opciono pokrenite Player2 u trećem terminalu
- Pratite instrukcije na ekranu
Igra je sada stabilna i optimizovana za lokalno i udaljeno testiranje!
- Server klase:
GameServer(glavna),Position,Player,Obstacle,Bullet - Klijent klase:
SpaceInvadersClient - Program klase: Entry point za svaki projekat
- Manja mapa (15x30) za brži gameplay
- Brži refresh za bolju responzivnost (6.7 FPS)
- Napredna collision detection sa sigurnosnim proverama
- Stabilniji timer sistem sa counter-based pristupom
- Update loop: 100ms (10 Hz)
- Prikaz: 150ms (6.7 FPS)
- Pad prepreka: 200ms (5 Hz)
- Generisanje prepreka: 4000ms (0.25 Hz)
Ovaj pristup čini kod jasnim i optimizovanim za performanse, sa očuvanim imenima fajlova i stabilnim gameplay-om.