gra w statki - koncepcja

0
leonpro778 napisał(a):

Ale jakiego wyścigu? Chodzi o wykonanie skryptu zanim poprzedni się skończy?

Znów musimy odróżnić

  • wyścig na aktywną akcję (nalezy blokować użytkownikowi, który nie ma prawa wykonać ruchu)
  • asynchroniczne pobieranie / wyświetlanie - a niech sobie będzie ile chce jednocześnie
leonpro778 napisał(a):

To już musisz sobie sprawdzać po stronie serwera. Przykładowo - jest tura gracza A, w tym czasie co nie nacisnąłby gracz B to żaden endpoint mu "nie odpowie" poprawną odpowiedzią

I to jest ta wskazówka

szatkus napisał(a):

Możesz na razie iść w tym kierunku, w którym idziesz czyli wersja offline w JS. Jak już będziesz miał to gotowe to rozbij kod na część kliencką i serwerową (jakbyś zmienił PHP na JS to nawet nie musisz się przejmować różnicami w składni), a w punktach styku postaw obiekty do wysyłania/obsługi zapytań. Ma to taką wartość edukacyjną, że od razu wyjdzie, co sknociłeś w oryginalnym projekcie.

Potem zmień kawałek kodu do przechowywania stanu gry na bazę danych, a AI na człowieka grającego na innej przeglądarce.

Ja sam bym sie zakopał, jakbym zaczął od wesji single - JS only, nie objął bym myślą / intelektualnie
Być może właściwą radą jest może nawet i single, ale posiadające serwer (wtedy jeszcze jakiś uproszczony)

O ile bym znał jakiś inny język "serwerowy", bym w nim pisał nie (tylko) dlatego, że PHP nie lubię, ale PHP jest bardzo ubogi w strukturach danych, właściwie jedyną strukturą jest baza danych.
W Javie / C# / Pytnonie demon serwera gry by trzymał po prostu tablicę (gry by nie miały historii, ale robiłbyś lekką istotę algorytmu, a nie ciezką administrację)

0

Dobra, dzięki za dyskusję. Teoretycznie da się to zrobić przy pomocy zaproponowanego stosu. Zanim jednak na poważnie się za to wezmę, to przeprowadzę kilka prób. Konkretnie sprawdzę, czy faktycznie to zadziała w systemie turowym.

0

Jeżeli chodzi o race condition, to żadnego tu nie widzę. Musisz zabezpieczyć przede wszystkim po stronie serwera, żeby gracz, którego nie jest kolej, nie mógł zmienić stanu planszy.

PHP jest najgorszym językiem w jakim przyszło mi pisać, ale jeżeli chcesz to jasne - da się. Będziesz jednak skazany na bazę danych do przechowywania. W sumie to nawet ciekawy problem.

Czy zastanawiałeś się już jak będziesz przechowywać dane? Ja bym widział dwa wyjścia, albo każde pole w postaci rekordu, albo cała plansza w jednej krotce. Może to być w postaci ciągu znaków. Ciąg taki miałby n*m znaków (wysokość i szerokość planszy) i każdy znak to np. 0 - puste, 1 - strzał, 2 - statek, 3 - statek zatopiony. W ten sposób ograniczysz operacje na bazie.

0

Nad przechowywaniem danych w bazie jeszcze pomyślę. Na pewno będą 2 tabele:
a) historia rozgrywek
b) aktualna rozgrywka i tutaj zawsze na początku byłoby polecenie Truncate

Co do alternatyw, to widzę tylko 2:
a) .NET
b) nodeJS

1
kosmonauta80 napisał(a):

b) aktualna rozgrywka i tutaj zawsze na początku byłoby polecenie Truncate

Eeee? Mogę wiedzieć po cholerę Tobie truncate?

0

Zaczynam grę, tworzę planszę, czyli tabelę o układzie, który wymaga jeszcze przemyślenia.
A co ze startą? Pasuje skasować, nie jest potrzebna. Truncate jest szybsze niż Delete. Ponadto Truncate tak naprawdę robi "reset" tabeli.

3

Ok, nie obraź się teraz ale lepiej rzeczywiście zacznij od czegoś prostszego. Zapomnij o multiplayer tylko zacznij od kółko i krzyżyk w przeglądarce. Będzie łatwiej.

0

Po co trzymać w tabeli informację w postaci układu planszy powiedzmy 10x10 pól? Pisałem o 2 tabelach: na historię wyników i bieżącą rozgrywkę. Podczas rozgrywki gdzieś muszę przechowywać aktualny stan planszy. Potem zliczam punkty, zapisuję w 2 tabeli, a planszę kasuję.

Zapisz stan początkowy i historię ruchów w rozgrywce.
Stan aktualny wyliczysz z powyższych. To zapewni pełną historię.
Nie oszczędzaj miejsca w bazie.

EDIT: Doczytałem i widzę że ciągle myślisz jakby cały serwer był zarezerwowany wyłącznie na aktualną rozgrywkę dwóch osób. Wymyśl jak sprawić aby serwer był w stanie obsługiwać naraz wiele par graczy.

1

Zacząłem w ramach rozgrzewki wersję single player w czystym JS. Jak zakończę, to pokażę w dziale Code Review. Wykorzystane doświadczenia wykorzystam też do podjęcia decyzji co dalej.
A na razie umownie zamknijmy wątek. Wiem już mniej więcej, na co się porywam.

0

Oto wersja singleplayer napisana w JS:
gra w statki - single player (szybki projekt)

1 użytkowników online, w tym zalogowanych: 0, gości: 1