//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "acerca.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm14 *Form14;
//---------------------------------------------------------------------------
__fastcall TForm14::TForm14(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm14::FormHide(TObject *Sender)
{

  Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm14::FormCreate(TObject *Sender)
{
  int i;

  imagen= new TPicture;
  imagen->Bitmap->Width=600;
  imagen->Bitmap->Height=300;

  for (i = 0; i < 100; i++) {
	  estrellas[i].x=rand()%630;
	  estrellas[i].y=rand()%300;
	  estrellas[i].z=rand()%5;
  }
  for (i = 0; i < 10; i++) {
	 malos[i].x=600+rand()%1200;
	 malos[i].y=rand()%300;
  }
  inave=new TPicture;
  inave->LoadFromFile("./res/nave.bmp");
  inave->Bitmap->Transparent=true;
  inave->Bitmap->TransparentColor=0x0000FF00;
  disparo=new TPicture;
  disparo->LoadFromFile("./res/tiro.bmp");
  disparo->Bitmap->Transparent=true;
  disparo->Bitmap->TransparentColor=0x0000FF00;
  disparando=false;
  imalo=new TPicture;
  imalo->LoadFromFile("./res/malo.bmp");
  imalo->Bitmap->Transparent=true;
  imalo->Bitmap->TransparentColor=0x0000FF00;
  ilogo=new TPicture;
  ilogo->LoadFromFile("./res/logo.bmp");
  logo.x=150;
  logo.y=-250;
  lx2=-300;

  nave.x=10;
  nave.y=120;
  nave.vidas=3;
  nave.puntos=0;
}

//---------------------------------------------------------------------------
TColor __fastcall TForm14::dameColor(int estrella){
	TColor vuelta;
   switch(estrellas[estrella].z){
	case 4:vuelta=0x00282828;break;
	case 3:vuelta=0x00585858;break;
	case 2:vuelta=0x00888888;break;
	case 1:vuelta=0x00B8B8B8;break;
	case 0:vuelta=0x00FFFFFF;break;
   }

   return vuelta;
}
void __fastcall TForm14::FormShow(TObject *Sender)
{
  Timer1->Enabled=true;
  creaParte1();
  parte=0;
  trozo=1;
  loop=0;
  puntos=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm14::Timer1Timer(TObject *Sender)
{
 int i;
 imagen->Bitmap->Canvas->Brush->Color=clBlack;
 imagen->Bitmap->Canvas->Pen->Color=clBlack;
 imagen->Bitmap->Canvas->Rectangle(0,0,600,300);
 for (i = 0; i < 100; i++) {
	  imagen->Bitmap->Canvas->Pixels[estrellas[i].x][estrellas[i].y]=dameColor(i);
   if (estrellas[i].x>0) {
	switch(estrellas[i].z){
		case 0:estrellas[i].x=estrellas[i].x-2;
		case 1:estrellas[i].x=estrellas[i].x-3;
		case 2:estrellas[i].x=estrellas[i].x-4;
		case 3:estrellas[i].x=estrellas[i].x-5;
		case 4:estrellas[i].x=estrellas[i].x-6;
	}

  } else {
	  estrellas[i].x=600+rand()%10;
  }
 }
 if (parte==0) {
	 parte0();
 }

 if (parte==1) {
	 parte1(trozo);
 }
 if (parte==2) {
	 jugar();
 }
 if (parte==3) {
	imagen->Bitmap->Canvas->Font->Size=48;
	imagen->Bitmap->Canvas->TextOut(120,100,"GAME OVER");
 }
 Image1->Picture=imagen;

}
//---------------------------------------------------------------------------
void __fastcall TForm14::parte1(int cacho){
  if (cacho==1) {
	imagen->Bitmap->Canvas->Font->Size=textos[0].tama;
	imagen->Bitmap->Canvas->TextOut(textos[0].x,textos[0].y,textos[0].texto);
	if (textos[0].x>150) {
		textos[0].x=textos[0].x-8;
	} else {
	   trozo=2;
	}
  }

  if (cacho==2) {
	imagen->Bitmap->Canvas->Font->Size=textos[0].tama;
	imagen->Bitmap->Canvas->TextOut(textos[0].x,textos[0].y,textos[0].texto);
	  textos[0].x=textos[0].x-rand()%8;
	  textos[0].x=textos[0].x+rand()%8;
	  if (loop>20) {
		if (textos[1].x>200) {
			textos[1].x=textos[1].x-6;
		}
	  }
		  imagen->Bitmap->Canvas->Font->Size=textos[1].tama;
		  imagen->Bitmap->Canvas->TextOut(textos[1].x,textos[1].y,textos[1].texto);

	  if (loop<100) {
		  loop++;
	  } else {trozo=3;loop=0;}

  }

  if (cacho==3) {
	imagen->Bitmap->Canvas->Font->Size=textos[0].tama;
	imagen->Bitmap->Canvas->TextOut(textos[0].x,textos[0].y,textos[0].texto);
	imagen->Bitmap->Canvas->Font->Size=textos[1].tama;
	imagen->Bitmap->Canvas->TextOut(textos[1].x,textos[1].y,textos[1].texto);

	if (loop>20) {
		if (textos[2].x>200) {
			textos[2].x=textos[2].x-6;
		}
	}
   imagen->Bitmap->Canvas->Font->Size=textos[2].tama;
   imagen->Bitmap->Canvas->TextOut(textos[2].x,textos[2].y,textos[2].texto);
   if (loop<200) {
	  loop++;
  } else {
	parte=2;
	textos[0].x=20;
	textos[0].y=20;
	textos[0].texto="Puntos: 0";
	textos[0].tama=12;

	 textos[1].x=20;
	 textos[1].y=280;
	 textos[1].texto="Vidas: 3";
	 textos[1].tama=12;
  }
  }


}

void __fastcall TForm14::creaParte1(){
 imagen->Bitmap->Canvas->Font->Color=clYellow;
 imagen->Bitmap->Canvas->Brush->Style=bsClear;
 textos[0].x=620;
 textos[0].y=30;
 textos[0].texto="T3k Paint V1.0";
 textos[0].tama=40;

 textos[1].x=620;
 textos[1].y=110;
 textos[1].texto="David Grau López 2013";
 textos[1].tama=20;

 textos[2].x=620;
 textos[2].y=150;
 textos[2].texto="Proyecto final de carrera";
 textos[2].tama=16;
}

void __fastcall TForm14::pintaNave(){
 imagen->Bitmap->Canvas->Draw(nave.x,nave.y,inave->Bitmap);
}

void __fastcall TForm14::jugar(){
 pintaNave();
 if (disparando==true) {
	 pintaDisparo();
 }
 pintaMalos();
 pintaTexto();
 coliBala();
 coliNave();
}
void __fastcall TForm14::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)

{
  if (Key==VK_F1) {
  parte=2;
  }
  switch (Key) {
	case VK_UP:nave.y=nave.y-10;break;
	case VK_DOWN:nave.y=nave.y+10;break;
	case VK_LEFT:nave.x=nave.x-10;break;
	case VK_RIGHT:nave.x=nave.x+10;break;
	case VK_CONTROL:iniciaDisparo();break;
  default:;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm14::iniciaDisparo(){
   tiro.x=nave.x+64;
   tiro.y=nave.y+16;
   disparando=true;
}

void __fastcall TForm14::pintaDisparo(){
 if (tiro.x<600) {
	 tiro.x=tiro.x+40;
	 imagen->Bitmap->Canvas->Draw(tiro.x,tiro.y,disparo->Bitmap);
 } else {
	 disparando=false;
 }
}

void __fastcall TForm14::pintaMalos(){
 int i;

 for (i = 0; i < 10; i++) {
   if (malos[i].x>-64) {
	   malos[i].x=malos[i].x-10;
	   malos[i].y=malos[i].y-rand()%4;
	   imagen->Bitmap->Canvas->Draw(malos[i].x,malos[i].y,imalo->Bitmap);
   }
  else {
	 malos[i].x=600+rand()%500;
	 malos[i].y=rand()%300;
 }
  }
}

void __fastcall TForm14::pintaTexto(){
   imagen->Bitmap->Canvas->Font->Size=12;
 imagen->Bitmap->Canvas->TextOut(10,10,"Puntos: "+IntToStr(nave.puntos));
 imagen->Bitmap->Canvas->TextOut(10,280,"Vidas: "+IntToStr(nave.vidas));
}

void __fastcall TForm14::coliBala(){
	int i;

	for (i = 0; i < 10; i++) {
		 if ((tiro.x>malos[i].x+64)||(tiro.x+31<malos[i].x)||
		 (tiro.y>malos[i].y+64)||(tiro.y+12<malos[i].y)) {

		 } else {
						malos[i].x=600+rand()%500;
			malos[i].y=rand()%300;
			nave.puntos=nave.puntos+100;
			disparando=false;
		 }
	}
}

void __fastcall TForm14::coliNave(){
int i;
	for (i = 0; i < 10; i++) {
		 if ((nave.x>malos[i].x+64)||(nave.x+64<malos[i].x)||
		 (nave.y>malos[i].y+64)||(nave.y+32<malos[i].y)) {

		 } else {
			if (nave.vidas>1) {
				nave.vidas--;
				malos[i].x=600+rand()%500;
				malos[i].y=rand()%300;
				nave.puntos=nave.puntos+100;
				disparando=false;
				nave.x=10;
				nave.y=120;
			} else {
				parte=3;
            }
		 }
	}
}

void __fastcall TForm14::parte0(){

 if (trozo==1)
 {
	if (logo.y<10) {
		logo.y=logo.y+10;
	}
	loop++;
	imagen->Bitmap->Canvas->Draw(logo.x,logo.y,ilogo->Bitmap);
	if (loop>=80) {
	  trozo=2;
	  loop=0;
	}
 }

 if (trozo==2) {
	if (logo.x<620) {
	   logo.x=logo.x+10;
	   if (Form14->Width<936) {
	   Form14->Width=Form14->Width+10;
	   }

	   if (loop>15)
	   {
		Image2->Canvas->Draw(lx2,logo.y,ilogo->Bitmap);
		lx2=lx2+10;
	   }

	}

	loop++;
	imagen->Bitmap->Canvas->Draw(logo.x,logo.y,ilogo->Bitmap);
	if (loop==50) {
	  parte=1;
	  trozo=1;
	  loop=0;

	}

 }


}
