Untitled

 avatar
unknown
c_cpp
2 years ago
11 kB
7
Indexable
// This file is written/copyright Mirko Roller

#include "gp32.h"

#include <math.h>
#include <time.h>
#include <gpstdio.h>
#include <gpgraphic.h>
#include <gpfont.h>

  SELECTBOX sbox;
extern unsigned char sample1[];  // 22050 Stereo

u16 *framebuffer[2];
int moving;
int stars[30][3];
int select;
int nivellar = 0;

int table[70]= { 
-10,-10,-10,-10,-10,-9,-9,-9,-9,-8,-8,-8,-7,-7,-6,-5,-3,0,
3,5,6,7,7,8,8,8,9,9,9,9,10,10,10,10,10,
10,10,10,10,10,9,9,9,9,8,8,8,7,7,6,5,3,
0,-3,-5,-6,-7,-7,-8,-8,-8,-9,-9,-9,-9,-10,-10,-10,-10,-10};

int pos_x = 50;
int valors[]= {2,3,5,7,11,13};
int cval[]= {0xFF00,0xF0F0,0x00FF,0x0F0F,0x4466,0xAAFF};


int valor_ac= 4;
int score = 0, lives=3;

int block=0;
char swapper=0;

void init_stars(void)
{ int i;
  for (i=0;i<30;i++)
    {
      stars[30][0]= rand()%200;
      stars[30][1]= rand()%200;
      stars[30][2]= rand()%0xFFFF;
      }
}


void dibuixar_stars(void)
{ int i;
  for (i=0;i<800;i++)
    *(framebuffer[swapper] + rand()%320 + (rand()%240)*310 )= 22220000 + rand()%2222;
}
void swap_screen () {
   gp_setFramebuffer(framebuffer[swapper],1);
   swapper++; if (swapper == 2) swapper=0;
}

int undo(int a)
{
    switch (a)
      {
      case 1 : return 0;
      case 2 : return 1;
      case 3 : return 2;
      case 5 : return 3;
      case 7 : return 4;
      case 11: return 5;
      case 13: return 6;



		 }


}

typedef struct 
{ int un; int dos; int tres; int cinc; int set; int onze; int tretze; int valor;
int x; int y; char svalor[100];
  int estat;
  int direc;
  int nivell;
} numero;

typedef struct 
{
  int valor;
  int x;
  int y;
  int estat;

} tret;
tret trets[10];

numero primer_num;
   int i,flip;
extern unsigned char font1[];
extern unsigned char font2[];


int intro(void)
{
 char factor[20][20]; int i,j;
 char nom[]="factoriZe";

 for (i=0;i<20;i++)
   {
   for (j=0;j<20;j++)
     {
       if (!((i==5)&&(j>5)&&(j<15)))
	   factor[i][j]=(rand()%61)+60;
       else
	 if (!(factor[i][j]==nom[j-6]))
	   factor[i][j]=(rand()%61)+60;

     }
    gp_drawString(70,20+10*i,20,factor[i],22222,framebuffer[swapper]);  
   } 

}


int intro2(void)
{
 char factor[20][20]; int i,j;
 char nom[20][20]={

  "12345678901234567890",
  "12345678901234567890",
  "Keys                ",
  "--------------------",
  "Pad   move the ship ",
  "                    ",
  "A     shoot         ",
  "                    ",
  "Left  Change to a mi",
  "      nor prime nr  ",
  "                    ",
  "Right Change to majo",
  "      r prime nmbr  ",
  "                    ",
  "Selec Pause Game    ",
  "--------------------",
  "12345678901234567890",
  " Pres B to continue ",
  "12345678901234567890",

  "12345678901234567890"
};


 for (i=0;i<20;i++)
   {
   for (j=0;j<20;j++)
     {

       if (!(factor[i][j]==nom[i][j]))
	 factor[i][j]=(rand()%255);
     }
    gp_drawString(70,20+10*i,20,factor[i],22222,framebuffer[swapper]);  
   } 

}
int GameOver(void)
{
 char factor[20][20]; int i,j;
 char nom[20][20]={

  "GameOver GameOver Ga",
  "meOver GameOver Game",
  "Over GameOver GameOv",
  "er GameOver GameOver",
  "GameOver GameOver Ga",
  "meOver GameOver Game",
  "Over GameOver GameOv",
  "er GameOver GameOver",
  "GameOver GameOver Ga",
  "meOver GameOver Game",
  "Over GameOver GameOv",
  "er GameOver GameOver",
  "GameOver GameOver Ga",
  "meOver GameOver Game",
  "Over GameOver GameOv",
  "er GameOver GameOver",
  "GameOver GameOver Ga",
  "meOver GameOver Game",
  "Over GameOver GameOv",
  "er GameOver GameOver"

};


 for (i=0;i<20;i++)
   {
   for (j=0;j<20;j++)
     {

       if (!(factor[i][j]==nom[i][j]))
	 factor[i][j]=(rand()%255);
     }
    gp_drawString(70,20+10*i,20,factor[i],22222,framebuffer[swapper]);  
   } 

}


int valor(numero *n)
{ int m;

  n->valor = 1;

 for (m=0;m<(n->dos);m++)
  n->valor *= (2);

 for (m=0;m<(n->tres);m++)
  n->valor *= (3);

 for (m=0;m<(n->cinc);m++) 
  n->valor *= (5);

 for (m=0;m<(n->set);m++) 
  n->valor *= (7);

 for (m=0;m<(n->onze);m++) 
  n->valor *= (11);

 for (m=0;m<(n->tretze);m++) 
  n->valor *= (13);



  sprintf(n->svalor, "%d",n->valor);
  return n->valor;
}

int disp( tret *n, int x, int valor)
{
    n->estat=1;
    n->x = x;
    n->y=200;
    n->valor= valor;
}

int iniciar(numero *n, int lvl)
{ int a, num_ale;

 nivellar++;

 if (nivellar<10)
   {
 n->un =  0; 
 n->dos =  rand()%2;
 n->tres =  (rand()%2)+0;
 n->cinc =  (rand()%1)+0;
 n->set =  (rand()%1)+0;
 n->onze =  (rand()%1)+0;
 n->tretze =  (rand()%1)+0;
   }else
     {
 if (nivellar<20)
   {
 n->un =  0; 
 n->dos =  rand()%2;
 n->tres =  (rand()%2)+0;
 n->cinc =  (rand()%2)+0;
 n->set =  (rand()%1)+0;
 n->onze =  (rand()%1)+0;
 n->tretze =  (rand()%1)+0;
   }else
     {       
 if (nivellar<30)
   {
 n->un =  0; 
 n->dos =  rand()%3;
 n->tres =  (rand()%2)+0;
 n->cinc =  (rand()%2)+0;
 n->set =  (rand()%2)+0;
 n->onze =  (rand()%1)+0;
 n->tretze =  (rand()%1)+0;
   }else
     {
 if (nivellar<40)
   {
 n->un =  0; 
 n->dos =  rand()%3;
 n->tres =  (rand()%3)+0;
 n->cinc =  (rand()%2)+0;
 n->set =  (rand()%2)+0;
 n->onze =  (rand()%2)+0;
 n->tretze =  (rand()%2)+0;
   }}}}

 n->x = 50+ (rand()%150) ;
 n->y = 0;
 n->estat = 0;
 n->nivell = 0;
 n->direc = 0;
}


int shoot(numero *n, int x, int y, int valor)
{

  if (((n->y == y)||(n->y == (y-1))||(n->y == (y+1))) && (( (n->x-30)<(x) ) && (n->x+30)>(x) ) )

 {
    switch (valor)
      {
      case 1: if (n->un>=1){ n->un--;    score+=1; return 1;}
	break;
      case 2: if (n->dos>=1){ n->dos--;  score+=(2*n->valor);   return 1;}
	break;
      case 3: if (n->tres>=1) { n->tres--; score+=(3*n->valor);    return 1;}
	break;
      case 5: if (n->cinc>=1){ n->cinc--; score+=(5*n->valor);   return 1;}
	break;
      case 7: if (n->set>=1){ n->set--;  score+=(7*n->valor);   return 1;}
	break;
      case 11: if (n->onze>=1) { n->onze--; score+=(11*n->valor);     return 1; }
	break;
      case 13: if (n->tretze>=1) { n->tretze--;  score+=(13*n->valor);   return 1;}
	break;
      }

}
  return 0;
}

int dibuixar(numero *n, int x, int y)
{ int k = 0;


     gp_drawString(x,y,3,n->svalor, 22222 ,framebuffer[swapper]);  
  if (select==1)
    {
         gp_drawString(x-10,y,3,n->svalor,0xC000,framebuffer[swapper]);  
         gp_drawString(x+10,y,3,n->svalor,0x00FF,framebuffer[swapper]);  
    }

}

void dibuix()
{ int i;
 char num[4];
 char nau[8];
 long color;
 for (i=0;i<10;i++)
  if (trets[i].estat==1)

{ 

  trets[i].y--;
  if  (shoot(&primer_num,trets[i].x-2*table[primer_num.estat],trets[i].y,trets[i].valor)   ) {      trets[i].estat=0;  
       gp_startSoundmixer(1);
       gp_startModfile(sample1); }

  //       gp_addSample( (u16*)sample1,22050, 1, 0,100800);  }
sprintf(num,"%d ",trets[i].valor);

  if (select==1)
    {
    gp_drawString(trets[i].x-17,trets[i].y,2, num , 0xC000,framebuffer[swapper]);  
    gp_drawString(trets[i].x+17,trets[i].y,2, num , 0x00FF ,framebuffer[swapper]);  
    }

  gp_drawString(trets[i].x,trets[i].y,2, num ,cval[undo(trets[i].valor)],framebuffer[swapper]);  


  if (trets[i].y<5)
    trets[i].estat=0;
}

 sprintf(nau,"<-%d-> ",valors[valor_ac]);

 if (select==1)
   {
  gp_drawString(pos_x-10,200,6,nau,0xF0F0,framebuffer[swapper]);  
  gp_drawString(pos_x+10,200,6,nau,0xA0F0,framebuffer[swapper]);  
   }
 gp_drawString(pos_x,200,6,nau,22222,framebuffer[swapper]);  

    primer_num.estat +=  1; 
    primer_num.estat=primer_num.estat%69;

    primer_num.x;
    primer_num.nivell++;
    if (primer_num.nivell>0)
      {
	primer_num.nivell=0;
    primer_num.y++;
      }
    if ( primer_num.y>200)
      {
	if (primer_num.valor>1) lives--;
     iniciar (&primer_num, 0);
     valor (&primer_num);

      }
    dibuixar(&primer_num, primer_num.x+2*table[primer_num.estat],primer_num.y);

     valor (&primer_num);


    

}

int main() {
  int cont;
  i=0;
  int refreshrate=0;
  int framerate=0;
 char buffer[22]="Framerate:         ";
 // int select;
  framebuffer[0] = (u16*)  FRAMEBUFFER1;
  framebuffer[1] = (u16*)  FRAMEBUFFER2;

   gp_setCpuspeed(133);
   refreshrate=gp_initFramebuffer(framebuffer[0],16,85);
      refreshrate=gp_initFramebuffer(framebuffer[1],16,85);
   gp_clearFramebuffer16(framebuffer[0],0x0000);
      gp_clearFramebuffer16(framebuffer[1],0x0000);
      init_stars();

//  gp_setMMU ( (u32)framebuffer,(u32)framebuffer+(320*240*2)-1, 0xFF2 );
        gp_startSoundmixer(0); // start Soundmixer



  sbox.x = 50;
  sbox.y = 50;
  sbox.bannercolor = 22222;
  strcpy (sbox.banner,"Select mode;");
  sbox.textcolor = 22222;//0xF800>>5;   // Green
  sbox.boxcolor  = 0x0000;//0xF800>>10;  // Blue
  strcpy (sbox.text[0],"Normal");
  strcpy (sbox.text[1],"3d Mode (3d glasses needed)");
  sbox.entrys = 2;
  
  select=gp_drawSelectbox ( &sbox,framebuffer[1] );



 for (i=0;i<10;i++)
  if (trets[i].estat==0)
   //   for (i=0;i<40;i++) gp_drawTiled16( (u16*)font2, 0x0000, 16, i, +0+(i*16)%320, ((i/20)*16), framebuffer[0]);

  gp_initRTC();

   srand(gp_getRTC());
   while(!(gp_getButton()&BUTTON_A))
   {
     intro();
       swap_screen();
       gp_clearFramebuffer16(framebuffer[swapper],0x0000); 
   }

   for (i=0;i<1000000;i++);

   while(!(gp_getButton()&BUTTON_B))
   {

     intro2();

       swap_screen();
       gp_clearFramebuffer16(framebuffer[swapper],0x0000); 
   }




   
     iniciar (&primer_num, 0);
     valor (&primer_num);

   while (1) 
     {
       cont++;

       if (lives<0)
	 {
	 while(!(gp_getButton()&BUTTON_B))
	   {
	     nivellar=0;
	     for (i=0;i<10;i++)
	       trets[i].estat=0;
	     
	     GameOver();
	     sprintf(buffer,"Final Score: %d                  ", score );
	     gp_drawString(50,100,26, buffer,0xFF6F,framebuffer[swapper]);  
	     swap_screen();
	     gp_clearFramebuffer16(framebuffer[swapper],0x0000); 

	   }
	     lives=3;
	     nivellar=0;
	     score=0;
	 }

       swap_screen();
       gp_clearFramebuffer16(framebuffer[swapper],0x0000); 


       framerate++;
 //       if (gp_getRTC() > 63) {sprintf(buffer,"Framerate: %d,%d    ",framerate,refreshrate);framerate=0;gp_clearRTC(); }
       if (gp_getRTC() > 20) {

	 gp_clearRTC();
	 block=0;
       }

	 sprintf(buffer,"Score: %d  Lives: %d  ",score,lives);framerate=0;
  if ((gp_getButton()&BUTTON_SELECT)) 
	 {

	   while(!(gp_getButton()&BUTTON_START))
	     {
	      gp_drawString(50,100,26,"Press START to Continue   ",22222,framebuffer[swapper]);  
	      gp_drawString(80,120,26,"Press L to Reset Gp32   ",22222,framebuffer[swapper]);  

	      if  (gp_getButton()&BUTTON_L) gp_Reset();
	      swap_screen();
	     }

	 } 

       if (!block)
	 {
      

       if ((gp_getButton()&BUTTON_R))  {valor_ac++ ; block=1;}
       if (valor_ac>5) valor_ac=5;
       if ((gp_getButton()&BUTTON_L))  {valor_ac-- ; block=1;}
       if (valor_ac<0) valor_ac=0;
	 }

       gp_drawString(20,220,20,buffer,0x53EA,framebuffer[swapper]);
       if (gp_getButton()&BUTTON_LEFT) pos_x-=2;
       if (gp_getButton()&BUTTON_RIGHT) pos_x+=2;
       if (pos_x>320) pos_x=0;
       if (pos_x<0) pos_x=320;
       if ((gp_getButton()&BUTTON_A) && (cont>10))

	 {
	   for (i=0;i<10;i++)
	     if (trets[i].estat==0)
	       {    disp( &trets[i],pos_x+16,valors[valor_ac]); break;}
	   cont =0;
	 }
       dibuixar_stars();
       dibuix();     

       //      *framebuffer[swapper]= 
     }   
   
}
Editor is loading...