Proszę o pomoc ->początki z java

0

Witam. Otrzymałem od wykładowcy takie oto zadanie. Problem w tym że nie mam pojęcia od czego zacząć pisanie klasy Gracz. Rozszerzenie klasy abstr. i co trzeba zrobić dalej?

ZADANIE:

Zadanie 03:

Proszę napisać niepubliczną klasę Gracz, która rozszerza abstrakcyjną klasę Gra. Zadanie polega na zatopieniu wskazanej liczby okrętów za pomocą możliwie najmniejszej liczby strzałów. Należy wykorzystać informacje o tym, że statki nie mogą się ze sobą stykać burtami. Dla ułatwienia wszystkie okręty będą tego samego rozmiaru - jednego pola.

Państwa klasa zostanie poddana testom za pomocą mojego oprogramowania. Metoda main() zostanie napisana przeze mnie. Klasa implementująca interfejs PlanszaI zostanie napisana przeze mnie. Zarówno klasa testująca jaki i implementacja PlanszaI nie zostaną udostępnione.

Obiekt klasy Gracz zostanie utworzony za pomocą konstruktora domyślnego (bezargumentowego).

Uwagi

Modyfikacja klas bazowych i interfejsów jest zabroniona.
Proszę nie przesyłać w rozwiązaniach klas czy interfejsów, które sam publikuje
Klasę uruchamiającą program (Start) w tym projekcie pisze sam

W programie testującym (klasa Start) wykonane zostaną takie operacje:
Gra g = new Gracz();

g.rejestracjaPlanszy( p ); // p to wskaźnik do obiektu typu PlanszaI

Kody źródłowe plików Gra.java i PlanszaI.java


plik Gra.java

abstract public class Gra {
/**
Metoda pozwala na przeslanie referencji do obiektu typu PlanszaI.
Metoda ta na pewno zostanie wykonana jako pierwsza.
@param p Referencja do obiektu typu PlanszaI
*/
public void rejestracjaPlanszy( PlanszaI p );

/**
Metoda uruchamia gre. Ma sie zakonczyc po zatopieniu
wskazanej liczby okretow.
@param liczbaOkretowDoZatopienia Liczba jednostej znajdujacych
sie na planszy. Wszystkie nalezy zatopic.
*/
public void graj( int liczbaOkretowDoZatopienia );
}



plik PlanszaI.java


public interface PlanszaI {
/**
Metoda pozwala na poznanie rozmiaru planszy. Plansza jest dwowymiarowa i
kwadratowa.
@return Dlugosc boku planszy w liczbie pol
*/
public int rozmiar();

/**
Strzal na podana pozycje. Pozycje x i y liczymy od 0 do rozmiar() - 1.
@return Wynik strzelania na podana pozycje. 0 pudlo, 1 trafiony.
Jesli oddane zostana dwa strzaly na ta sama pozycje, na ktorej stoi jednostka,
to oba zakoncza sie zwroceniem 1
*/
public int strzal( int poz_x, int poz_y );
}

Bardzo proszę o pomoc / nakierowanie mnie. Z java dopiero zaczynam zabawę i nie jest mi łatwo pogodzić wszystko naraz (praca / szkoła ). Jeszcze raz podkreślam, nie oczekuję od Państwa gotowej klasy, tylko podpowiedzi/sugestii co i jak.

Bardzo dziękuję za okazaną pomoc.
Tomek

0

Nie wiem ile już tam masz, ale idąc od początku:
Tworzysz sobie Java project w Eclipse i w źródłach, w domyślnym pakiecie tworzysz sobie klasy i interfejsy podane przez nauczyciela łącznie z klasą Start. Poprawiasz błędy podpowiadane przez eclipse i generujesz klasę Gracz jak niżej:
class Gracz extends Gra {
@Override
public void rejestracjaPlanszy(PlanszaI p) {
// TODO Auto-generated method stub
}

@Override
public void graj(int liczbaOkretowDoZatopienia) {
	// TODO Auto-generated method stub
}

}
Teraz w metodzie rejestrujPlansze zapisujesz sobie referencję do obiektu planszy w jakimś polu. Potem jest wywoływana metoda graj, zapewne z funkcji main klasy Start. Najpierw pobierasz rozmiar planszy, a potem strzelasz we wszystkie pola po kolei, aż trafisz wskazaną w wywołaniu liczbę okrętów. Zliczasz sobie to, co zwraca metoda strzal. Najważniejsza rzecz, to oznaczyć pola, na których był statek i wszystkie sąsiadujące, żeby w nie nie strzelać.

Drugie podejście, to inna interpretacja treści zadania:
"Zadanie polega na zatopieniu wskazanej liczby okrętów za pomocą możliwie najmniejszej liczby strzałów.
Jesli oddane zostana dwa strzaly na ta sama pozycje, na ktorej stoi jednostka, to oba zakoncza sie zwroceniem 1"
Wynika z tego, że wystarczy znaleźć na planszy jeden statek, a potem strzelać do niego aż do uzyskania oczekiwanej liczby zatopień, gdyż każdy kolejny strzał zwróci 1. Ale to bardzo ryzykowne rozwiązanie.

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