#include "Snake.h"
#include <iostream>
using namespace std;
int dlugosc = 0;
int kierunek = 1; //bool PRAWO   PRAWO/GÓRA/LEWO/DÓŁ


vector < int > pozycjaX;
vector < int > pozycjaY;
vector < int > tmpX;
vector < int > tmpY;
vector < int >::iterator iter;

Snake::Snake(int x, int y, BITMAP *b){
	Snake::Dodaj();
	rectfill( b, 20*pozycjaX[0], 20*pozycjaY[0], 20+20*pozycjaX[0], 20+20*pozycjaY[0], makecol( 0, 0, 255 ) ); 
}

Snake::~Snake(){

}

void Snake::Rysuj(BITMAP *b){
	rectfill( b, 20*pozycjaX[0], 20*pozycjaY[0], 20+20*pozycjaX[0], 20+20*pozycjaY[0], makecol( 0, 255, 255 ) );

	for(int i=1;i<=dlugosc;i++){
	
		rectfill( b, 20*pozycjaX[i], 20*pozycjaY[i], 20+20*pozycjaX[i], 20+20*pozycjaY[i], makecol( 0, 0, 255 ) ); 
	}


}
bool Snake::Sprawdz(){
		
		for(int i = 1;i<=dlugosc;i++){
				if (( pozycjaX[0] == pozycjaX[i]) && (pozycjaY[0] == pozycjaY[i]))
					return false;
			}


			if ((pozycjaX[0]<0) ||   (pozycjaX[0]>39) ||   (pozycjaY[0]<0)  ||   (pozycjaY[0]>29)           ){
					return false;
			}
	return true;

}

void Snake::Aktualizuj(BITMAP *b){
	

		for(int i = 0;i<=dlugosc;i++){
			tmpX[i] = pozycjaX[i];
			tmpY[i] = pozycjaY[i];
		}

				if( (key[ KEY_LEFT ]) && (kierunek!=1) )kierunek=3;
				if( key[ KEY_RIGHT ] && (kierunek!=3)) kierunek=1;
				if( key[ KEY_UP ] && (kierunek!=4)) kierunek=2;
				if( key[ KEY_DOWN ] && (kierunek!=2)) kierunek=4;

				switch(kierunek)
				{
				case 1:  pozycjaX[0]++;  break;             
				case 2:  pozycjaY[0]--; break;
				case 3: pozycjaX[0]--;  break;
				case 4:	pozycjaY[0]++; break;
				}

		for(int i = 1;i<=dlugosc;i++){
			pozycjaX[i] = tmpX[i-1];
			pozycjaY[i] = tmpY[i-1];
		}

	

}

void Snake::Wypisz(){
	
		
		cout << "Dlugosc: "<< dlugosc<<'\n';
		cout << "Pozycje weza:"<<'\n';
		int i = 0;
		for( iter=pozycjaX.begin(); iter!=pozycjaX.end(); ++iter )
		   {
			 cout<< *iter  << " - " << pozycjaY[i]<<'\n';
			 i++;
		   }

	}
	
void Snake::Ustaw_Wartosci(int d, int k){
	dlugosc = d;
	kierunek = k;

}

int Snake::pobierzX(){
	return pozycjaX[0];
}
int Snake::pobierzY(){
	return pozycjaY[0];
}
void Snake::Dodaj(){
		pozycjaX.push_back(0);
		pozycjaY.push_back(0);
		tmpX.push_back(0);
		tmpY.push_back(0);

}