#include <tigcclib.h>

void pausa(int retar) {
        short int num_aleatorio;
        while (retar-- > 0) {num_aleatorio = rand() % num_aleatorio;}
}

void _main(void) {
    int inc_x=1,inc_y=1,puntos=0,vidas=3,x_vidas=100,retardo=301;
    int gana_vida=20; //Indice para ganar vidas que se incrementa x1,5 cada vez redondeado a la decena
    int p=100;//Pos pala
    int automatico=1;// 1=Juego manual, -1=automático
    unsigned int x=90,y=50;//Pos Pelota
    // declaramos los SPRITES, PELOTA DE 8 BIT Y PALA DE 32
    //unsigned char Pelota2[] = {0x3C,0x3C,0x5E,0x7E,0x7E,0x7E,0x3C,0x3C};
    unsigned char Pelota[] = {0x3C,0x7E,0x5E,0xFF,0xFF,0x7E,0x7E,0x3C};
    unsigned char Vida[] = {0x66,0x7e,0xdf,0xFf,0x7E,0x7e,0x3c,0x18};
    unsigned long int Pala[] = {0x00000000,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0x00000000};

    ClrScr();
    FontSetSys(F_4x6);
    Printf_xy(160,0,"A=Auto");
    FontSetSys(F_6x8);
    Printf_xy(8,120,"ESC=Salir, Flechas=Mover, ENTER=Pausa");
    FontSetSys(F_8x10);printf_xy(0,0,"Puntos: %d",puntos);
    Sprite8(x_vidas,2,8,Vida,LCD_MEM,SPRT_XOR);x_vidas+=10;
    Sprite8(x_vidas,2,8,Vida,LCD_MEM,SPRT_XOR);x_vidas+=10;
    Sprite8(x_vidas,2,8,Vida,LCD_MEM,SPRT_XOR);
    Sprite32(p,110,8,Pala,LCD_MEM,SPRT_XOR);

  //INICIO bucle ppal del PROGRAMA **********************************
  while (1)
    {
    Sprite8(x,y,8,Pelota,LCD_MEM,SPRT_XOR);

    pausa(retardo);
    if (_keytest (RR_ESC)) break;
    if (_keytest (RR_LEFT) && p>2) {Sprite32(p,110,8,Pala,LCD_MEM,SPRT_XOR);p-=2;Sprite32(p,110,8,Pala,LCD_MEM,SPRT_XOR);}
    if (_keytest (RR_RIGHT) && p<204) {Sprite32(p,110,8,Pala,LCD_MEM,SPRT_XOR);p+=2;Sprite32(p,110,8,Pala,LCD_MEM,SPRT_XOR);}
    if (_keytest (RR_A)) {automatico=-automatico;}

    Sprite8(x,y,8,Pelota,LCD_MEM,SPRT_XOR);
    x=x+inc_x;
    y=y+inc_y;

    if (x>210){inc_x=-inc_x;}
    if (y==1){inc_y=-inc_y;}

    if (y==104 && abs(x-p)<=32) //Se cumple cuando la pelota golpea la pala
    {
      inc_y=-inc_y;
      puntos++;printf_xy(0,0,"Puntos: %d",puntos);
      if (puntos==gana_vida){vidas++;x_vidas+=10;Sprite8(x_vidas,2,8,Vida,LCD_MEM,SPRT_XOR);gana_vida=10*(int)(1.5*gana_vida/10);} //Aumentamos vidas si llega a x ptos: 20,30,40,60,90,130...
      if (puntos==7 || puntos==20 || puntos==40|| puntos==80){retardo-=75;} //Aumentamos velocidad juego si llega a x ptos
    }
    if (y>104)  //La pelota no ha golpeado la pala............
    {
      Sprite8(x_vidas,2,8,Vida,LCD_MEM,SPRT_XOR);
      if (vidas>1)
      {
        y=40;vidas--;x_vidas-=10;inc_y=-inc_y;
      }
      else break;
    }

    if (automatico==-1)  //Juego automático, la pala se mueve sola
    {Sprite32(p,110,8,Pala,LCD_MEM,SPRT_XOR);p=x-10;Sprite32(p,110,8,Pala,LCD_MEM,SPRT_XOR);}

  }
  //FIN bucle ppal del programa **********************************

    Printf_xy(70,60,"FIN Partida");
    Ngetchx();    // Esperamos a que se pulse una tecla
    Ngetchx();    // Esperamos a que se pulse una tecla
}