/*******************************************************************************
 * Třída Číslo k zobrazení poohybujícícho se čísla ve vesmíru.
 * Předpokládá se přitom, že toto číslo bude identifikovat UFO.
 *
 * @author     Rudolf Pecinovský
 * @version    1.00, červen 2004
 */
public class Číslo
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Posunutí vodorovné souřadnice čísla oproti souřadnici jeho středu. */
    public static final int DX = -3;

    /** Posunutí svislé souřadnice čísla oproti souřadnici jeho středu. */
    public static final int DY = 5;


//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /* Oba atributy by měli být konstantní a pak už je jedno,
     * že jsou veřejné. */

    /** Číslo, které daná instnce představuje. */
    public final int    číslo;  //Uchovávané číslo

    /** Textová podoba čísla po převodu na řetězec. Bude se používat tak často,
     *  že je výhodné ji mít uloženou v atributu. */
    public final String cifry;  //Řetězcová podoba čísla



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================

    private double x;  //Vodorovná pozice zobrazeného čísla
    private double y;  //Svislá pozice zobrazeného čísla



//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří instanci představující zadané číslo.
     * Instance je se schopna na požádání nakreslit.
     */
    public Číslo( int číslo, double x, double y )
    {
        this.číslo = číslo;
        this.cifry = "" + číslo;
        this.x = x + DX;
        this.y = y + DY;
    }


//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Bezparametrický konstruktor ...
     */
    public int getČíslo()
    {
        return číslo;
    }


    /***************************************************************************
     * Vrátí x-ovou souřadnici pozice instance.
     *
     * @return  x-ová souřadnice.
     */
    public double getX()
    {
        return x - DX;
    }


    /***************************************************************************
     * Vrátí y-ovou souřadnici pozice instance.
     *
     * @return  y-ová souřadnice.
     */
    public double getY()
    {
        return y - DY;
    }


    /***************************************************************************
     * Nastaví novou pozici instance.
     *
     * @param x   Nová x-ová pozice instance
     * @param y   Nová y-ová pozice instance
     */
    public void setPozice( double x, double y )
    {
        this.x = x + DX;
        this.y = y + DY;
    }



//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================

    /***************************************************************************
     * Vrací textovou reprezentaci dané instance.
     *
     * @return Textový řetězec představující uchovávané číslo.
     */
    public String toString()
    {
        return cifry;
    }


//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================

    /***************************************************************************
     * Bezparametrický konstruktor ...
     */
    public void nakresli()
    {
        Vesmír.V.kresliString( cifry, (int)x, (int)y );
    }


//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
}

