Untitled
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...