Open maro512 opened 7 years ago
Na wstępną wersję gry online potrzeba przede wszystkim przycisku do logowania (plus ekran do podania nazwy użytkownika). Przy kliknięciu "graj online" będzie się odpalało połączenie z losowym graczem (chyba, że od razu dodamy ekran z podaniem nazwy przeciwnika).
Poszukajcie czcionki z polskimi znakami, chyba taka istnieje :D
PS. Wstawiłem do "new-ui" aktualny model gry. Zmieniłem Game
tak, że nie powinno być remisów.
tak na szybko, żeby nie zapomnieć
Chyba jest drobny błąd, bo mogę kliknąć płytkę niepodświetloną (niepasującą) i wstawić (oczywiście wywala wyjątek).
Można dodać takie coś do ClickListener
i działa:
if (((Button) e.getTarget()).isDisabled()) return;
new-ui można chyba scalić z masterem. Jak ktoś chce, to stary interfejs można zachować w osobnym branchu. Do jutra.
zbieram sobie wszystko w jedno miejsce
W niedzielę zdołałem stworzyć kod, który pilnuje, aby użytkownik nie przesunął za bardzo planszy (jak ktoś przesunie planszę bardzo daleko, to potem jest mała szansa, że zdoła przyciągnąć płytki z powrotem). Dalej można wyrzucić płytki poza ekran, ale nie za daleko. Jest to wykorzystanie tych metod getMaxX()
... Boarda. Wstawia się cztery warunki ograniczające do metody touchDragged
...
Jutro chyba pushnę całość, także możesz dorzucić poprawkę. Potem możemy zrobić merge
co do ekranu logowania i rejestracji - jakie metody powinny być zapewnione? czy uzupełnicie to przy połączeniu gry z trybem online?
W zasadzie potrzebne jest tylko wprowadzanie koniecznych danych (pewnie przy rejestracji hasło dwa razy) i przycisk. Powinno się dać wyświetlić informację o niepowodzeniu (i to najlepiej różnego typu: "problem z połączeniem", "nazwa użytkownika zajęta", ...). Wg. mojej wizji ekrany powinny implementować ConnectionListener
, ale to chyba my będziemy zapewniać.
Interfejs powinien w jakiś sposób powiązać graczy z kolorem linii. Może nazwy niech wyświetlają/podświetlają się w dobrym kolorze (o ile wiem, to po lewej jest biały, a po prawej czarny, zgodnie z numeracją w Game). Można też ustalić domyślne nazwy graczy na "Biały" i "Czarny" chyba, że przypisanie do kolorów (w przypadku offline) będzie losowe (Ale może lepiej, żeby losowe było kto zaczyna, a nie jaki ma kolor).
poszedł push, zostawiłem ekrany logowania i rejestracji z todo, żebyście spokojnie mogli podpiąć. gdyby ktoś sprawdził czy działa przycisk cofania dobrze na androidzie - byłoby miło
PS. wiem, że wywala exception przy zakończeniu gry, poprawię to jeszcze dziś
Jak odpalam w emulatorze to cofanie prawie działa - aplikacja się chowa, ale jak ją wyciągnę z powrotem to widzę poprzedni ekran. No i dalej wszystko jest mikroskopijne... Ważna sprawa - udostępnij gdzieś reakcję na faktyczne zamknięcie aplikacji - trzeba wtedy wysłać do serwera komunikat wylogowania (i ewentualne przerwanie gry online).
Wiem jak schować klawiaturę. To dość oczywiste, jak się rzuci okiem na API pól tekstowych: textField.getOnscreenKeyboard().show(false);
Nie wiem, czy wystarczy dla jednego pola to wywołać, czy lepiej dla wszystkich. Oczywiście trzeba to dodać w wielu miejscach.
A żeby przycisk cofania nie zamykał okna trzeba ustawić Gdx.input.setCatchBackKey(true);
.
cofanie działa dziwnie, tzn cofa do poprzedniego ekranu ale zaraz po tym się wyłącza
textField.getOnscreenKeyboard().show(false); to prawdopodobnie nie pozwala w ogóle wysunąć się klawiaturze
Na wirtualnym androidzie oba mechanizmy (tj. poprawione cofanie i chowanie klawiatury) działają mi zgodnie z oczekiwaniami, ale nie będę się upierał, że to doskonałe rozwiązania.
ramki wokół planszy i graczy nie są tak łatwe do zrobienia, nie ma metody ustawienia tła dla pojedynczego cella z table'a. chwilowo to zostawiam. dziś dorzucę deadTile, ścieżkę wygrywającą i polskie litery. Za chwilę zrobię pusha, który powinien naprawić chowanie klawiatury, proszę o test, Piotr - dodaj potem poprawki do cofania jakbyś mógł.
ok, pushnięte, sprawdźcie prosze cofanie w Register i ukrywanie klawiatury wszędzie gdzie są pola tekstowe
Zauważyłem, że jak pola tekstowe wsadzi się do Table
zamiast do VerticalGroup
to można im zmienić szerokość (dotąd były chyba zbyt krótkie) - wywołjąc np. table.add(---).padBottom(---).width(stage.getWidth()*.7f);
I warto by wydzielić jakoś ten kod tworzący stage, bo te wszystkie klasy screenów mają niemal identyczny kod i nie wiem, czy to nie będzie jakiś minus...
cofanie działa (chociaż nie zawsze, trzeba zobaczyć na innych urządzeniach. U mnie jest tak, że register chyba zawsze działa, ale po cofnięciu nie da się już wyjść z gry poprzez naciśnięcie back, a np. wyjście z opcji poprzez back wychodzi z aplikacji) chowanie klawiatury też działa jeśli chodzi o ścieżkę wygrywającą to nie potrzebnie wyświetlasz puste komórki przy zmianie języka na polski wywala się na końcu gry logo wrzuć na górę menu a nie na środek
Przy kończeniu gry (na emulatorze) czasem się wywala ale zupełnie nie rozumiem od czego to zależy.
udało mi się zrobić ramki dodając table.add(bv).pad(10).colspan(BUTTONS_AMOUNT).fill(); tylko że tło nie jest wyświetlane tak jakbym chciał ramki do graczy mozna dodać jako buttony
Chyba dobrą rozdzielczość można uzyskać używając innego obiektu Viewport
(np. StretchViewport
albo FitViewport
). Pojawiają się problemy z widgetem (aktualizacją jego wielkości), ale pewnie jakoś można sobie z nimi poradzić. Na razie mam jakiś problem z testowaniem na androidzie, więc nie widziałem jak to tam zadziała. (W weekend mogę mieć problemy z internetem, ale będę dopracowywał bazę.)
Mam już wstępny mechanizm zapytań do bazy i typ osłonowy na pozycję w rankingu. Warto przygotować prezentację takiej tabeli w aplikacji.
trzeba ustawić płytki w menu na dole ekranu wg z góry określonej kolejności, bo teraz są losowo i to może być frustrujące przy wielokrotnym graniu
deadTile to jest EmptyCell i przy wyswietlaniu petli wygrywajacej po prostu znika, trzeba by ifa dodać zeby to pole tez się wyświetlało
to już było gdzieś robione, ale trzeba zmienić metodę która określa kto wygrywa, bo w obecnej sytuacji jak jest remis to wygrywa biały, a powinien wygrać gracz, którego był ruch
public List
U mnie jest tak, czyli chyba dobrze:
public List<Tile> getWinningLine()
{
if( board.isBlackWin() )
{
if (!board.isWhiteWin() || currentPlayer==1)
return board.getWinningLine(Board.BLACK);
else
return board.getWinningLine(Board.WHITE);
}
else return board.getWinningLine(Board.WHITE);
}
dodałem commita, w którym usunąłem opcje. język dobiera się automatycznie, gdy nie ma tłumaczenia - jest angielski. dodałem też polskie litery. skalowanie nie działa tylko na planszy - zostawmy to na razie tak jak jest. przycisk cofania też zachowuje się dziwnie. reszta działa, możecie mergować i podpinać grę online.
Niechcący zmergowałem w drugą stronę (tj. nadpisałem new-ui
). Jak to problem, to jutro to cofnę i zrobię w "dobrą stronę".
Domergowałem zmiany w UI do online-play
(musiałem to zrobić dzisiaj, bo nie miałbym kodu w domu na weekend) i chyba udało mi się poprawić skalowanie planszy.
nie da się naszego projektu odpalić bez SQL servera na kompie nie ? :/
Można obejść/wyłączyć bazę ustawiając jedno true
w konstruktorze LoopServer
a. Dla pewności można poprawić konstruktor DataBase
, gdyby rzucał wyjątkiem przy ładowaniu sterownika (nie powinien).
Właśnie próbowałem ale mi się nie udawało :(