Ruutu.java

package datastructureproject.luokat.tietorakenteet;

import chess.model.Side;
import datastructureproject.luokat.Pelilauta;

/**
 * Kuvaa shakkiruutua sijaintina
 */
public class Ruutu {
    private final char alkuMerkki = 'a';
    private int x;
    private int y;

    /**
     * 
     * @param x shakkiruudun vaakatason sijainti indeksina alkaen nollasta.
     * @param y shakkiruudun pystytason sijainti indeksina alkaen nollasta.
     */
    public Ruutu(final int x, final int y) {
        this.x = x;
        this.y = y;
    }
    /**
     * 
     * @param pos UCI protokollan mukainen representaatio shakkiruudusta
     */
    public Ruutu(final String pos) {
        x = (int) pos.toLowerCase().charAt(0) - (int) alkuMerkki;
        y = Integer.parseInt(pos.substring(1, 2)) - 1;
    }

    public Ruutu kopioi() {
        return new Ruutu(x, y);
    }

    /**
     * Miten tämä ruutu esitettäisiin, jos se olisi osana UCI-muotoista siirtoa
     * @return shakkiruudun merkkijono-muotoinen esitys
     */
    public String getAsString() {
        char eka = (char) ((int) alkuMerkki + x);
        int toka = y + 1;
        return "" + eka + toka;
    }

    public int getX() {
        return x;
    }

    public void setX(final int x) {
        this.x = x;
    }

    public void addX(int x) {
        this.x += x;
    }

    public int getY() {
        return y;
    }

    public void setY(final int y) {
        this.y = y;
    }

    public void addY(int y) {
        this.y += y;
    }
    
    /**
     * Kertoo onko ruutu sallittu ruutu laudalla. 
     * @param lauta lauta jota tutkitaan
     * @return onko ruutu laudan dimensioiden sisällä.
     */
    public boolean olenLaudalla(Pelilauta lauta) {
        return getX() >= 0 && getY() >= 0 && getX() < lauta.getKoko() && getY() < lauta.getKoko();
    }

    /**
     * Palauttaa nappulan y-akselin sijainnnin, kun sitä liikutetaan eteenpäin y-askelta
     * (toimii molemmilla puolilla)
     * 
     * @param puoli kumman puolen pelaajan kannalta katsotaan suuntaa
     * @param y y-akselin askeleiden määrä
     * @return y-akselin koordinaatti
     */
    public int getEteenpainY(Side puoli, int y) {
        return getY() + (puoli == Side.WHITE ? y : -y);
    }

    @Override
    public String toString() {
        return getAsString();
    }
    
}