package navale;

import java.io.Serializable;

/*
 * Comme dans toutes les classes, les attributs sont privés,
 * et les méthodes que l'on veut offrir à l'utilisateur de la classe sont publiques
 * Ne pas oublier d'écrire les méthodes déclarées dans Bateau, puisque SousMarin
 * implémente Bateau.
 */

//implements Serializable pour Exercice 6
public class SousMarin implements Bateau, Serializable {
	private static final long serialVersionUID = 1L;
	/*
	 * Un sous-marin doit connaître son emplacement,
	 * savoir s'il est en plongé et s'il a été coulé.
	 * Inutile de stocker le fait d'être touché,
	 * puisque c'est la même chose qu'être coulé.
	 */
	private int x; 
	private int y;
	private boolean visible;
	private boolean coule;
	
	public SousMarin(int x, int y) {
		this.x = x;
		this.y = y;
		visible = true;
		coule = false;
	}

	@Override
	public boolean coup(int x, int y) {
		if(visible && estPresent(x,y)){
			coule = true;
			return true;
		}
		return false;
	}

	@Override
	public boolean estCoule() {
		return coule;
	}

	@Override
	public boolean estPresent(int x, int y) {
		return x==this.x && y==this.y;
	}

	@Override
	public int getX() {
		return x;
	}

	@Override
	public int getY() {
		return y;
	}

	public void plonge(){
		visible = false;
	}
	
	public void surface(){
		visible = true;
	}
	
	public boolean estVisible(){
		return visible;
	}
	
	public boolean deplace(int dx, int dy){
		if(dx<-1 || dx>1 || dy<-1 || dy >1 || !visible)
			return false;
		x+=dx; y+=dy;
		return true;
	}
}
