Gra statki – pierwszy mały projekt

Odpowiedz Nowy wątek
2020-02-15 02:52

Rejestracja: 3 miesiące temu

Ostatnio: 1 tydzień temu

0

Witam bawię się Javą od 3 mies . Postanowiłem napisać sobie pierwszy mały projekcik. Gra statki to klasyczna gra w papierowe statki . Program rozstawia nam statki na planszy w sposób zupełnie losowy a zadaniem gracza jest je wszystkie wyeliminować . Jestem ciekaw co o tym myślicie .

Zaznaczę że jest to moja pierwsza tak duża "zbieranina" kodu i zdaje sobie sprawę że od strony technicznej sam kod i struktura programu są słabe .
Dużą satysfakcją dla mnie jest fakt że udało się z tym dojechać do końca nie pogubić w połowie i że efekt finalny się w ogóle kompiluje :)

Co wy o tym sądzicie ? Czy po trzech miesiącach progres jest odpowiedni ?

edytowany 2x, ostatnio: furious programming, 2020-02-18 10:55

Pozostało 580 znaków

2020-02-15 07:02

Rejestracja: 6 lat temu

Ostatnio: 28 minut temu

2

Czemu *.rar? Nie możesz tego wrzucić jak człowiek na jakiegoś Githuba? :)


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);

Pozostało 580 znaków

2020-02-15 15:50

Rejestracja: 1 miesiąc temu

Ostatnio: 1 tydzień temu

Aplikacja według mnie całkiem porządnie wykonana (nie udało mi się jej jakoś specjalnie zepsuć, czy wywołać błędu),a to jak na brak wcześniejszego doświadczenia jest bardzo ok, niestety jeśli chodzi o sterowanie wyjątkowo nieprzyjazne (nie mogłem się zmusić by klikać wszystkie pola) :) Zamiast za każdym razem wybierać, nowe współrzędne można by klikać na pole, w które strzelamy (te pomalowane pola by działały jak przyciski) lub może sugerować graczowi kolejne wolne pole (skróciłoby czas sprawdzania aplikacji), Dodatkowo, oznaczyłbym zatonięte statki np innym kolorem, Obok zrobił listę z statkami jakie zostały do zatopienia. Jakbyś chciał dalej rozwijać aplikację, to nieuniknione będzie dodanie gracza komputerowego -> standardowe statki ale na przykład z broniami obszarowymi, lub rozgrywka online. Podsumowując jest ok :). Na minus brak informacji kiedy zatopię wszystkie statki. Jak mam porównać wynik z moim kolegą ?

edytowany 1x, ostatnio: Kamil Kubica, 2020-02-15 15:55

Pozostało 580 znaków

2020-02-15 16:04

Rejestracja: 8 lat temu

Ostatnio: 33 minuty temu

0

@okon66113: wrzuc jakies screeny i gameplaya :)

Pozostało 580 znaków

2020-02-15 17:12

Rejestracja: 1 miesiąc temu

Ostatnio: 1 tydzień temu

1

Zapomniałem, dodać uwag do kodu. Całkiem w porządku jednak, pewne nawyki są do poprawienia. Nazewnictwo klas Support, Support1 z nazwy niech ktoś spróbuję zgadnąć za co są odpowiedzialne. Mieszanie polskich i angielskich nazw np.
boolean goodPio=false;
boolean goodPz=false;
boolean pionowo=false;
boolean poziomo=false;
Zakomentowane w kodzie funkcje , chyba w celu weryfikowania
// System.out.println("pionowo= "+pionowo+" poziomo= "+poziomo); //w
literowki w nazwach np. int numebrField;
Powtórzenia kodu kilkakrotnie (przynajmmniej 4 razy) np.
for(int i=0;i<st.numebrField;i++){
table[x+i][y]=st.numebrField;
}
Powinno znaleźć się w osobnej funkcji.
Nie wiem jak w Javie, ale w C# lepiej jakby tablica była [,] niż [][] . W sensie czytelniej jakby plansza była to tablica [x,y] (dwuwymiarowa) niż tablica składająca się z tablic [] (każda z tablic mogłaby mieć inne wymiary) .
Należy unikać używania stałych (liczb w funkcjach) np. Jak masz wielkość planszy,
marks=new String[]{"A","B","C","D","E","F","G","H","I","J"};
JLabel[]labelNumbers=new JLabel[11];
JLabel[]labelText=new JLabel[11];
To wyobraź sobie że chcesz zmienić rozmiar planszy na 20 na 18. W Twoim przypadku wymagane byłoby zmienienie w wielu miejscach wielu wartości. Liczby odpowiedzialne za wielkość powinny być przypisywane do zmiennej size=11 i później wykorzystywane.

Dzięki wielkie . Wszystkie uwagi mają dla mnie bezcenną wartość . Bo poza forum nie mam z kim o javie porozmawiać :P - okon66113 2020-02-16 00:32

Pozostało 580 znaków

2020-02-16 00:35

Rejestracja: 3 miesiące temu

Ostatnio: 1 tydzień temu

0

Mam jeszcze jedno pytanie . Jak trudne jest opanowie java.net. Chodzi mi o stworzenie aplikacji która umożlwiała by grę dwóm graczom za pośrednictwem internetu ? Czy lepiej na początku nie zaprzątać sobie tym głowy . Zaznaczę że nie mam o tym bladego pojęcia .

Pozostało 580 znaków

2020-02-16 11:27

Rejestracja: 1 miesiąc temu

Ostatnio: 1 tydzień temu

1

Proszę o sprostowanie przez bardziej, doświadczonych użytkowników.
Niestety stworzenie całkowicie online aplikacji, może okazać się trudne ze względu na problem znalezienia Twojego komputera przez gracza z innej sieci (brak publicznego ip).
Natomiast gra w sieci LAN powinna działać bez problemów.
Musisz stworzyć aplikacje client-server ( tutoriale w googlu Java client-server mnóstwo krótkich filmów) . Komunikacja pomiędzy 2 aplikacjami nie jest specjalnie wymagająca jeśli weźmiemy pod uwagę przesyłania komend typu "A2" w formie tekstowej. Zarządzanie ponownym nawiązywaniu połączenia, dbanie o zgodność stanu planszy na 2 aplikacjach (turowość) może być trochę kłopotliwe. Przykładowy film pokazujący komunikacje przez Sockety

. W Twoim przypadku zadbałbym o to by po każdej komendzie wysłanej z jednej aplikacji do 2 oczekiwać potwierdzenia (np "OK") w innym przypadku wysłać ponownie komendę, w celu wyeliminowania sytuacji gdzie 1 z graczy czeka na 2 drugiego który już wykonał swój strzał.

Podsumowując powinieneś stworzyć menu, w którym gracz miałby opcję typu stwórz pokój (aplikacja działa jako serwer i czeka na podłączenie klienta) , druga opcja podłącz (aplikacja działająca jako klient, w tym przypadku potrzebne wpisanie IP serwera do którego ma się podłączyć. Do testowania uruchamia się 2 razy aplikację (1 jako serwer a drugą jako klient) często w filmach wykorzystywane jest localhost/5000 oznacza komputer na którym jest uruchomiony na porcie 5000.

Sockety odpowiednie tworzysz po wybraniu trybu działania aplikacji. Kod rozgrywki może być 1 i ten sam dla klienta i serwera w tym przypadku . Należy pamiętać że gracz 1 strzela na plansze gracza 2 a gracz 2 na planszę gracza 1. (Da się to przesłać do funkcji przy tworzeniu rozgrywki). Po wystrzale pole jest przesyłane między aplikacjami . Druga aplikacja aktualizuje stan u siebie zwraca "trafiono" lub "nietrafiono" aktualizacja stanu w 1 aplikacji. Oczywiście czy aplikacje będą znały pozycję wroga po rozpoczęciu (wymienić się tymi danymi) aby uprościć działanie aplikacji to kwestia programisty 😅 wyżej opisałem jakby aplikację nawzajem nie wiedziały o rozstawieniu wroga. Końcem rozgrywki może być brak statków (trudniejsza implementacja) lub ilość trafień (jesteśmy wstanie wyliczyć ile trafień w statki trzeba by wszystkie były zniszczone)
Planszę gry (rozgrywkę) użytkownik widzi po podłączeniu się statków.

Pozostało 580 znaków

Odpowiedz

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