gra w statki - koncepcja

0

Przymierzam się do napisania projektu zaliczeniowego. Uznałem, że gra w statki będzie odpowiednia. Z jednej strony spełnia wymagania co do złożoności projektu, z drugiej strony dużo można się nauczyć. Stos przy pomocy którego zamierzam to zrealizować, to HTML/CSS/JS/PHP. I moje pytanie dotyczy tego ostatniego.
Chcę zrobić to tak, że gra będzie umieszczona na jakimś serwerze. Każdy chętny loguje się i może rozpocząć grę. Założenie jest jednak takie, że gra może odbyć się tylko wtedy, gdy w danym momencie zalogują się 2 osoby. Czyli odpalam to przeglądarką w normalnym trybie oraz incognito.
Czy takie coś da się zrealizować w gołym PHP? O ile mechanikę gry (reakcja na naciśnięcie, zliczanie punktów itp zrealizuję w JS), to pozostałą część może zrobić tylko serwer.

1

Oczywiście możesz to zrobić i w gołym PHP i w ubranym też.
Zliczenia punktów i tego typu rzeczy też powinieneś zrobić po stronie serwera.

0

Gdyby to była gra stworzona jako program do grania z "komputerem", to sprawa wydaje się prosta. Ale im więcej myślę, tym bardziej mam wrażenie, że webowa wersja tej gry jest trudniejsza w implementacji. Już nie mówiąc o tym, że to ma być dla 2 fizycznych graczy. No i właśnie, jak zrobić, by gracze korzystali z tej samej planszy? Wychodzi na to, że po stronie serwera potrzebna jest jakaś baza danych typu tablica 10x10. A po stronie przeglądarki jakieś automatyczne odświeżanie planszy po ruchu przeciwnika. Ewentualnie utworzyć 2 tablice dla każdego gracza.

0

Jeśli chcesz trzymać wyniki gier, czy historię to tak. Jeśli nie to wystarczy tworzyć kolejne instancje klasy Board.

0

Kolejna konkluzja: klasa Board to tak naprawdę kod HTML wyświetlający tabelę 10x10, gdzie każda komórka to element typu form, którego wartość za każdym razem wysyłam POSTem. Dobrze myślę, czy można prościej?

1
kosmonauta80 napisał(a):

Kolejna konkluzja: klasa Board to tak naprawdę kod HTML wyświetlający tabelę 10x10, gdzie każda komórka to element typu form, którego wartość za każdym razem wysyłam POSTem. Dobrze myślę, czy można prościej?

I tak, i nie. Widzę, ze słowo "tablica" u ciebie zmienia znaczenia.
Rzeczywiście jest znaczeń kilka.

  • tablica - widok, View, w jakimś sensie jest prawdą, że tworzysz dwie, i że jest to HTML, bo View jest per-user, i ostatecznie rzecz biorąc jest w jego przeglądarce.
  • tablica - Model, struktura danych (baza) na serwerze, która odwzorowuje stan gry. Elementy (maszty statków) maja właściciela, i dla tego drugiego są niewidoczne (do chwili trafienia).
0

Zgadza się, pisząc tablica mam na myśli to co widać oraz to, co generuje sam PHP.
Zastanawiam się teraz, czy JS jest tu potrzebny, skoro każde kliknięcie tak naprawdę to wywołanie skryptu php.
Jedyne zastosowanie JS jakie widzę, to gra z "komputerem". Bo mogę zrobić grę w wersji 1-osobowej, oraz 2-osobowej.
Niby proste z początku, a jednak złożoność narasta liniowo :) W sumie dobrze, bo to ma być na zaliczenie semestru.

2

JS i tak użyjesz, aby w ludzki sposób odświeżać ekran po ruchu przeciwnika (bo nie jakieś pragrmy refresh sprzed 30 lat).

A skoro już mamy JS, to nie wiem, czy 10*10* Form (sumbit = post) to dobra wizja (bo jakaś wizja to na pewno jest).
Czy może JavaScriptowy OnClick ?

Dynamikę możesz uzyskać na sposób REST/SPA (dominująca rola frameworku client-side) albo nieco więcej angażującą PHP metodą na AJAX (produkcja świeżego fragmentu / tablicy View na serwerze). Tradeof m.in w którym języku się lepiej czujesz.

To takie luźne myśli z dystansu, od faceta, który tego nie uprawia.

0

Generalnie to głowię się nad tym, jak za każdym razem wyświetlić aktualny stan tablicy. Gdzieś ona musi być przechowywana. Jeżeli dobrze rozumiem co piszecie, to można to uzyskać BEZ bazy danych na serwerze.

0

Możesz mieć przecież klasę Gra/Game.
Która zawiera klasy User - dwa takie pola bo dwóch graczy. Klasa Game ma też pole Board/tablica.
Za każdym razem jak rozpoczyna się nowa gra tworzysz po prostu nową instancję klasy Game i dodajesz ja sobie do jakiejś listy obecnie trwających gier.
Dane o tym gdzieś rozlokowane są statki i czy jakiś jest już zatopiony trzymasz w klasie Board. Na upartego niczego nigdzie nie zapisujesz.

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