Ale masz chorobliwe problemy logiczne :P
Też kiedyś miałem bzika na czołgi multiplayer, ale mimo że było to wprawdzie moje pierwsze "prawdziwe coś", to nie miałem praktycznie problemów z obmyśleniem jak to ma być...
Może powinieneś się przyjrzeć najpierw kilku podobnym grom open source'owym?
Twoja mapa to tablica wartości.. no, cóż.. jakbym nie potrafił inaczej to robiłbym i tak.. ale dlaczego akurat intów? przecież każdy int to 4 bajty, a ile różnych wartości ty tam trzymasz? pewnie nie przekraczasz nawet 10, bo ileż stanów może mieć mapka. wysyłasz 4 razy więcej bajtów niż potrzebujesz.
poza tym według mnie serializacja to zły pomysł dla gry real-time multiplayer, powinieneś raczej słać czyste wartości w pakietach (czy nie wiem jak to nazwać).. przed każdym takim pakietem wysłać w 2 lub 3 bajtach długość pakietu. kolejny bajt lub dwa to typ pakietu... reszta to tablica bajtów. kolejność i typy danych powinien znać tak client jak serwer - informacje o tym jaki to typ pakietu (id) dostaje przecież przy jego odbieraniu. wiemy zatem, że np pakiet o id 1 ma taką składnię int,int,bajt. pakiet o id 2 int,string itd. wiemy też co np. client chciał osiągnąć, wysyłając ten pakiet... powiedzmy, że pakiet o id 2 to wiadomość prywatna, wiemy co z tym zrobić: pierwszy int to identyfikator innego gracza, string to wiadomość dla niego.
to tyle jeśli chodzi ogółem o komunikację client<->serwer. nie wiem, może są lepsze sposoby na to - ja robiłem to tak :)
dalej... stan całej mapy powinien być wysyłany tylko raz - kiedy client się połączy. wszelkie zmiany stanów mapy powinny być wysyłane w pojedynczych pakietach. o np takiej składni: bajt,bajt,bajt - gdzie pierwsze dwa to x,y mapy, trzeci to nowy stan dla tego pola mapki.
i to serwer ma decydować o zmianach stanów tych pól, nie client. client co najwyżej może powiedzieć, że chce strzelić, a serwer może mu na to pozwolić bądź nie (bo np. nie ma amunicji albo przeładowuje). serwer, jesli client moze strzelac, powinien wtedy wyslac wszystkim pakiet o tym, ze dany client strzelił, z danymi takimi jak id clienta, który strzelił; stronę, w którą strzelił (może być kąt nachylenia, a jak nie umiesz, moze byc tez NSWE)
więcej na razie lepiej nie napiszę, bo się okaże jeszcze, ze bzdury plotę.. a im więcej tych bzdur napiszę, tym dłużej będę się potem ciął w kącie płacząc nad swoją bezsensownością :P