Gra statki – pierwszy mały projekt

Gra statki – pierwszy mały projekt
O6
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:59
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: flowCRANE
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8398
2

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


Kamil Kubica
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:12
1

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
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:4 dni
  • Postów:3168
0

@okon66113: wrzuc jakies screeny i gameplaya :)

Kamil Kubica
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:12
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.

O6
Dzięki wielkie . Wszystkie uwagi mają dla mnie bezcenną wartość . Bo poza forum nie mam z kim o javie porozmawiać :P
O6
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:59
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 .

Kamil Kubica
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:12
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)