package grid;

import position.Position;

/**
 * Annak érdekében, hogy könnyebb legyen játéktáblák különböző megvalósításait
 * megadni, hozzuk létre a grid csomagban a nyilvános, absztrakt AbstractGrid
 * osztályt.
 * @param <T> Az osztály típussal paraméterezett, és megvalósítja az előbbi Grid
 * interfészt ugyanezzel a paraméterrel.
 */
public abstract class AbstractGrid<T> implements Grid<T> {

	/**
	 * Vegyünk fel két nyilvános, nem módosítható int típusú adattagot: rows és
	 * cols. Ezek jelölik a játéktábla sorainak és oszlopainak számát.
	 */
	private final int rows, cols;

	/**
	 * Egy konstruktort, amely inicializálja a két adattagot.
	 * @param rows paraméterül várja a játéktábla sorainak
	 * @param cols és oszlopainak számát
	 */
	public AbstractGrid(int rows, int cols) {
		this.rows = rows;
		this.cols = cols;
	}

	/**
	 * Az isValid metódust, mely igaz értéket ad vissza, ha a paraméterül várt
	 * pozíció a játéktáblán van. Ez akkor teljesül, ha a pozíció mindkét
	 * koordinátája nemnegatív, és a függőleges koordináta kisebb a sorok
	 * számánál, a vízszintes koordináta kisebb az oszlopok számánál.
	 */
	@Override
	public boolean isValid(Position p) {
		//System.out.println(p);
		//System.out.println(p.h);
		//System.out.println(rows);
		//System.out.println(p.h > 0);
		//System.out.println(p.h < rows);
		//System.out.println(p.v > 0);
		//System.out.println(p.v < cols);
		return p.h >= 0 && p.v >= 0 && p.v < rows && p.h < cols;
	}

}
