Projekt właściwy – start!

Zacząłem używać WordPressa i traktuję to, jako element projektu, bo

Giewont
W poszukiwaniu inspiracji moje ukochane miejsce w Zako (http://chatak34.pl/) – widok z okna.

gdyby nie DSP to nigdy chyba nie założyłbym bloga i nie nabył stosownych umiejętności. Mam nadzieję, że Maciej, szef konkursu uzna tą argumentację, jak nie… to zostało jeszcze 10 pełnych tygodni, czas przejść do projektu właściwego.

Wczoraj cały wieczór walczyłem z OpenShiftem, miałem nadzieję, że pokażę w działaniu program, który jest materiałem wyjściowym projektu. Okazało się, że kontenery przy pierwszym podejściu się nie poddadzą, więc zmieniłem kolejność, dzisiaj pokażę statycznie stary, wyjściowy projekt a konfiguracja OpenShift będzie tematem któregoś kolejnego wpisu. Wtedy pokażę też program w działaniu.

Pretekstem do kodowania była gra Reversi (znana również pod nazwą Otello). Dlaczego akurat ta gra? Bo to jedna z pierwszych programów, jaki napisałem dla zabawy. Były to lata osiemdziesiąte, właśnie przesiadłem się z ośmiobitowego CP/M na mojego pierwszego PC pod DOS bo Windows jeszcze nie było i zacząłem ćwiczyć nowinkę C. Po drodze do pracy kupiłem Bajtka (pamięta ktoś?), Reversi był tam kod gry Reversi w Basicu na Spectrum – taki prosty dla dwóch żywych graczy, bez żadnej inteligencji. Niewiele myśląc postanowiłem (dla celów dydaktycznych), przepisać w C. Gra była kodowana w trybie znakowym i wyglądało to mniej więcej tak:

Gra ponoć znana od końca XVIII w. (https://pl.wikipedia.org/wiki/Reversi), ale nie wyobrażam sobie gry analogowej, z przewracaniem pionów po każdym ruchu, dla mnie to taka gra, w którą da się grać dopiero w erze komputerów. Mam do tej gry wielki sentyment, jak to do pierwszego programu napisanego w języku „nowego typu” czytaj innego niż asembler, Fortran, Pascal, Basic.

Przy pierwszym podejściu do oprogramowania gry przyjąłem pewne założenia. Moim celem nie było proste oprogramowanie, tylko osiągnięcie pewnych celów dydaktycznych i temu podporządkowałem działania i wybór technologii. Moimi celami było:

  1. Zrobienie od zera projektu aplikacji webowej w technice trójwarstwowej
  2. Wykorzystanie Springa
  3. Wykorzystanie Hibernate
  4. Opanowanie wielu sesji (wielu graczy), łącznie z komunikacją pomiędzy graczami
  5. Bezpieczne zakładanie konta i logowanie

Programowałem od 3 września do 17 października zeszłego roku. Kod gry dostępny jest na GitHubie: https://github.com/RobertPod/reversi i dokładny opis znajduje się w pliku README.md. Gra działa w dwóch wersjach:

  1. standalone (gałąź https://github.com/RobertPod/reversi/tree/master/robert.reversi-v2 – jar do pobrania tamże),Reversi - wersja współczesna głównie do testowania „inteligencji” gry. Dlatego też ta wersja ma dość skomplikowaną klawiszologię, żeby było łatwo uruchamiać testować algorytm. Wersja ta nie będzie zmieniana zewnętrznie natomiast być może zrobię refaktoring, żeby projekt był bardziej koszerny w sensie Clean Code i obowiązkowo będę pracował nad inteligencją gry. Interfejs zaprogramowałem z użyciem Swing i HTML5 Canvas.
  2. wersja webowa (https://github.com/RobertPod/reversi/tree/master/robert.reversi-v5web – wkrótce ponownie dostępna sieciowo do grania). Program korzysta z inteligencji wersji standalone i implementuje założone funkcjonalności. Jak tylko opanuję nowy serwer nie omieszkam natychmiast powiadomić.

Start w tej edycji Daj Się Poznać jest bardzo spontaniczny. Jestem w bardzo dynamicznym miejscu życia i nie potrafię przewidzieć ile czasu poświęcę na projekt, dlatego cele projektu też stawiam sobie dynamicznie. Po pierwsze chcę „upchać” w projekcie wszystko, czego się przy tej okazji nauczę. Dlaczego zacząłem od WordPressa, następny krok to będzie opanowanie OpenShift lub czegoś podobnego. W samym projekcie chcę przepisać aplikację webową, bez ograniczenia funkcjonalności zaimplementować REST i frontend zaimplementowany w React. Wisienką na torcie byłoby rozszerzenie aplikacji o wersję mobilną na Androida.

Autor: Robert

Biegnąc za marzeniami (nie tylko po górach)....

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *