/*
 * Snake07:
 *  1) Methode setzeNeuesKopfElement() um Herz-Abfrage erweitern
 *  2) Füge counter hinzu
 *  3) kollisionMitSichSelbst() hinzufügen
 */

package snake07;

import java.awt.Color;
import java.awt.Graphics2D;
import java.util.ArrayList;

public class Schlange implements Konstanten{
		
	//Globale Variablen
	private ArrayList<SnakeElement> snake;
	private Graphics2D g2D;
	private int[][] spielfeld;
	private int richtung = LINKS;
	private int vorhergehendeRichtung = RUNTER;  	//Neu ab snake06
	private int startZeile;
	private Color farbe;
	private int counter=0;
	private SnakeApplet snakeApplet;
	
	//Konstruktor, wird beim Ereugen aufgerufen
	public Schlange(SnakeApplet snakeApplet, int startZeile, Color farbe){
		this.snakeApplet = snakeApplet;
		this.g2D = snakeApplet.getG2D();
		this.spielfeld = snakeApplet.getSpielfeld();
		this.startZeile = startZeile;
		this.farbe = farbe;
		erzeugeSnakeArrayList();
	}
	
	public void erzeugeSnakeArrayList(){
		snake = new ArrayList<SnakeElement>();
		snake.add(new SnakeElement( 10,startZeile ) );
		snake.add(new SnakeElement(11,startZeile ) );
		snake.add(new SnakeElement(12,startZeile) );
	}

	public void zeichneSchlange() {
		for (int i=0; i< snake.size(); i++) {
			//Kopf mit Augen zeichnen
			if(i==0){
				//Bitte vervollständigen
				// ...
				}
			}else{
				//g2D.drawImage(snakePNG,element.x*20,element.y*20,this);
				g2D.setColor(farbe);
				g2D.fillRoundRect(snake.get(i).x*20, snake.get(i).y*20, 20, 20, 20, 10);
			}
		}
	}
	
	public boolean setzeNeuesKopfElement(){
		richtung = richtungsTest();				//Neu ab snake06
		switch (richtung) {
		//Bitte vervollständigen
		// ...	
		}
	}
	
	//Neu ab snake06
	private int richtungsTest() {
		switch (richtung) {
			case LINKS:	if(vorhergehendeRichtung == RECHTS){ //Schlange läuft in die Richtung
							return vorhergehendeRichtung; 	// aus der sie kommt
						}else{
							return richtung;
						}
			
			case HOCH: 	if(vorhergehendeRichtung == RUNTER){ //Schlange läuft in die Richtung
							return vorhergehendeRichtung; // aus der sie kommt
						}else{
							return richtung;
						}
			case RUNTER:if(vorhergehendeRichtung == HOCH){ //Schlange läuft in die Richtung
							return vorhergehendeRichtung; // aus der sie kommt
						}else{
							return richtung;
						}
			case RECHTS:if(vorhergehendeRichtung == LINKS){ //Schlange läuft in die Richtung
							return vorhergehendeRichtung; // aus der sie kommt
						}else{
							return richtung;
						}
		}
		return 1;
	}

	public void setzeNeuesKopfElementZufaellig(){
		//Bitte vervollständigen
		// ...	
		
	}
	
	/**
	 * Kollisionstest mit   e i n e r  anderen Schlange
	 * @param s
	 * @return
	 */
	public boolean kollision(Schlange s){
		//Bitte vervollständigen
		// ...	
	}
	
	/**
	 * Kollisionstest für ein Array mit Objekten vom Typ Schlange
	 * @param schlangen
	 * @return
	 */
	public boolean kollision(Schlange[] schlangen) {
		//Bitte vervollständigen
		// ...	
	}
	/*
	 * Neu ab snake07
	 * Die Methode liefert true, falls eine Kollision mit sich selbst vorliegt
	 */
	public boolean kollisionMitSichSelbst(){
		//für jedes Element der Schlange testen, ob es die gleichen 
		//Koordinaten wie ein anderes Element hat.
		//Bitte vervollständigen
		// ...	
	}
	
	private ArrayList<SnakeElement> getSchlangenArrayList() {
		return snake;
	}

	private SnakeElement getKopf(){
		return snake.get(0);
	}
	
	private void addKopf(int x, int y){
		snake.add(0, new SnakeElement(x,y));
	}
	
	private void loescheSchwanz(){
		snake.remove(snake.size()-1);
	}
	
	public void setRichtung(int richtung){
		this.vorhergehendeRichtung = this.richtung;  //Neu ab snake06
		this.richtung = richtung;
	}
	
	public int getCounter(){
		return counter;
	}
	
}

