masz np. 3 klientów - A, B i C i serwer - S
klient a przesuwa się o jedno pole do przodu to dzieje się to tak
A -> S "przesuń do przodu o 1"
S - "sprawdza czy A może przesunąć się do przodu o 1"
S -> A "OK", A przesuwa się do przodu o 1
S - > B "A przesunął się do przodu o 1", B powinien w swoich lokalnych danych przesunąć A o 1 do przodu
S - > C "A przesunął się do przodu o 1", C powinien w swoich lokalnych danych przesunąć A o 1 do przodu
i tak to mniej więcej wygląda - czyli klient coś chce zrobić, pyta serwer czy może, serwer potwierdza lub zaprzecza, jeśli potwierdził to wysyła info do pozostałych klientów. Inny przykład
A -> S "strzelam do w kierunku X,Y"
S - "sprawdza czy A w coś trafił"
S -> A "trafiłeś C - zginął"
S -> B "A trafił C i C zginął"
S -> C "A cię trafił i zginąłeś"
Oczywiście są techniki poprawy płynności przy słabym łączy czy obciążonym serwerze - "jechanie na pałę" czyli klient przez pewien czas porusza się bez komunikacji z serwerem a jedynie opierając się na danych jakie ma "u siebie" a po potwierdzeniu wszystkich ruchów aktualizuje swoje lokalne dane (może się okazać, że zamiast przejechać 20 punktów do przodu to zginął będąc w punkcie 15). Innym sposobem jest wysyłanie danych między klientami do siebie (aby odciążyć serwer) a aktualizacja lokalnych danych z serwerem co jakiś czas lub jeśli przychodzące dane od innego klienta są kluczowe (np. A -> C "trafiłem cię") lub "niepewne" (np. przeskok o 100 pól, który normalnie nie występuje).
BTW baza danych do tego wcale nie jest konieczna, w szczególności przy FPSach jest wręcz niewskazana do trzymania danych userow - jest po prostu za wolna na dużą ilość klientów i ilość danych jakie oni generują. Nic natomiast nie stoi na przeszkodzie aby w bazie trzymać bardziej "statyczne" dane - np. wyposażenie, statystyki itp. Natomiast jeśli mówimy o grze przeglądarkowej to jak najbardziej opiera się ona o BD