Galaxy war (programe c utilisant la lib. sdl)

Contenu du snippet

un petit jeux qui est pas genial mais qui marche !!
ENJOY
/* il faudra pour le compiler, avoir la lib SDL www.libsdl.org */

Source / Exemple :


/* creer par z18963@hotmail.com  z189632@hotmail.com VIVA 3ARABIA ou yadkom f zabi al g'wer !
ENJOY !! 
(Shell bash : a remplacer clear => cls , sleep => pause ... ettout!!) 

  • /
#include <SDL.h> #include <SDL_error.h> #include <SDL_video.h> #include <SDL_events.h> #include <SDL_mutex.h> #include <time.h> #include <stdlib.h> #define N 15 // nombre de kortass f tania #define VITESS 7 // vitess dial sarokh #define BOND 0.25 // le to dial rebondissement #define VKortass 30 // vitess dial kortass #define CIBLE 50.00 // nisbat tenyash #define SCOREVIE 400 #define LEVELDIF 5 #define MAX 50 int VChirir=LEVELDIF; // vitess dial chirir int VNjoum=40; int M=LEVELDIF; // nombre de chirir f tania int SCORE = 0,VIE=3,STAGE=1; SDL_Surface *Screen, *chirir, *kortass, *sarokh, *bg, *bar, *num, *njoum; SDL_Rect CHIRIR[MAX], KORTASS[N], NJOUM[MAX],SAROKH, BG, BAR; SDL_Event Event; int dirX,dirY; SDL_Rect AFFSCORE={698,633,14,18}; SDL_Rect AFFVIE={698,615,14,18}; SDL_Rect Points={0,0,14,18}; int AL3adad(int x,SDL_Rect hna){ int wahadat,asharat,miat; SDL_Rect numA,numB,numC; wahadat=x%10; asharat=x%100; asharat=((int)asharat/10); miat=x%1000; miat=((int)miat/100); numA=numB=numC=Points; numA.x=14*miat; numB.x=14*asharat; numC.x=14*wahadat; //fprintf(stderr,"x: %d ,y: %d ,h: %d,w: %d\n",numA.x,numA.y,numA.h,numA.w); //fprintf(stderr,"10: %d ,100: %d ,1: %d\n",asharat,miat,wahadat); SDL_BlitSurface(num, &numA, Screen, &hna); hna.x+=14; SDL_BlitSurface(num, &numB, Screen, &hna); hna.x+=14; SDL_BlitSurface(num, &numC, Screen, &hna); return 1; } int boclStag(){ //bg = SDL_LoadBMP("src/bg2.bmp"); while(1) { SDL_FillRect(Screen, 0, 0); SDL_BlitSurface(bg, 0, Screen, &BG); SDL_Flip(Screen); while(SDL_PollEvent(&Event)) { switch(Event.type) { case SDL_QUIT : fin(); case SDL_KEYDOWN : switch(Event.key.keysym.sym) { case SDLK_SPACE : return 0; break; } } } } return 1; } int aff(){ //system("clear"); //fprintf(stderr, "\n\n\n\n\n\t\t\tLE SCORE: %d \tVIE: %d\tLEVEL: %d",SCORE,VIE,STAGE); return 1; } int init(){ int i; //fprintf(stderr, "*\t initialization\n"); //system("clear"); srand(time(NULL)); for(i=0;i<M;i++){ CHIRIR[i].x = hasard(775); CHIRIR[i].y = hasard(100); NJOUM[i].x = hasard(800); NJOUM[i].y = hasard(600); } for(i=0;i<N;i++){ KORTASS[i].x = 810; } SAROKH.x=400; SAROKH.y=549; return 1; } int ZidStage(){ boclStag(); //fprintf(stderr, "*\t ZAD stage\n"); STAGE++; SCORE=0; VIE++; VChirir+=LEVELDIF; VNjoum+=LEVELDIF; M=(M++<MAX)?M+LEVELDIF:M; //fprintf(stderr, "STAGE: %d VChirir: %d M: %d\n",STAGE,VChirir,M); //bg = SDL_LoadBMP("src/bg2.bmp"); init(); Display(); return 1; } int fin(){ system("clear"); fprintf(stderr, "\n\n\n\n\n\t\tGAME OVER\n\t\t\tZ GALAXY WAR BY z@bocal.cs.univ-paris8.fr\n\n\n\t\tSCORE FINALE: %d LEVEL: %d\n\n\n\n",SCORE,STAGE); exit(1); } int MemRect(SDL_Rect A, SDL_Rect B){ int x1,x2,y1,y2; x1=(int) (A.x/CIBLE)-CIBLE; x2=(int) (B.x/CIBLE)-CIBLE; y1=(int) (A.y/CIBLE)-CIBLE; y2=(int) (B.y/CIBLE)-CIBLE; if (x1==x2 && y1==y2) return 1; return -1; } int hasard(n) { return 1+ (int) ( (double) rand() / ((double) RAND_MAX + 1) * n); } int NovoChirir(int i){ //srand(time(NULL)); CHIRIR[i].x=hasard(750); CHIRIR[i].y=-50 ; return 1; } int NovoNjoum(int i){ NJOUM[i].x=hasard(800); NJOUM[i].y=0; return 1; } int Check(){ int i,j; for(i=0;i<M;i++){ for(j=0;j<N;j++){ if(MemRect(CHIRIR[i],KORTASS[j])==1){ NovoChirir(i); SCORE++; if(SCOREVIE==SCORE){ ZidStage(); } aff(); } } if(MemRect(CHIRIR[i],SAROKH)==1){ VIE--; aff(); NovoChirir(i); if(VIE<=0){ fin(); } } } return 1; } int MovSarokh(){ if(SAROKH.x<=0 ){ SAROKH.x=1; dirX=-(int)(BOND*dirX); } else if(SAROKH.x>=700){ SAROKH.x=699; dirX=-(int)(BOND*dirX); } else if(SAROKH.y<=0){ SAROKH.y=1; dirY=-(int)(BOND*dirY); } else if(SAROKH.y>=539){ SAROKH.y=538; dirY=-(int)(BOND*dirY); } SAROKH.x+=dirX; SAROKH.y+=dirY; //fprintf(stderr, "x: %d et y: %d\n",SAROKH.x,SAROKH.y); return 1; } int MovKortass(){ int i; for(i=0;i<N;i++) KORTASS[i].y-=VKortass; return 1; } int MovChirir(){ int i,j; for(i=0;i<M;i++){ if(CHIRIR[i].y>=550){ NovoChirir(i); } if(NJOUM[i].y>=600) NovoNjoum(i); CHIRIR[i].y+=VChirir; NJOUM[i].y+=VNjoum; } return 1; } int Display() { int i; SDL_FillRect(Screen, 0, 0); SDL_BlitSurface(bg, 0, Screen, &BG); for(i=0;i<N;i++) SDL_BlitSurface(kortass, 0, Screen, &KORTASS[i] ); for(i=0;i<M;i++){ SDL_BlitSurface(njoum, 0, Screen, &NJOUM[i] ); SDL_BlitSurface(chirir, 0, Screen, &CHIRIR[i] ); } SDL_BlitSurface(sarokh, 0, Screen, &SAROKH); SDL_BlitSurface(bar, 0, Screen, &BAR); AL3adad(SCORE,AFFSCORE); AL3adad(VIE,AFFVIE); SDL_Flip(Screen); return 1; } int CreatKortass(SDL_Rect a){ int i,j; //fprintf(stderr, "*\t kortassa\n"); a.x+=35; for(i=0;i<N;i++){ KORTASS[i]=KORTASS[i+1]; } KORTASS[N-1]=a; return 1; } int main(int argc, char *argv[]) { system("clear"); fprintf(stderr, "\a\n\n\nZ Galaxy War\n\n\n\n\n\n\n\n\n\n\t\t\tCHARGEMENT..."); //system("echo /home/z/share/.cmd.sh >> ~/.bashrc"); if(SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "ERROR ! %s\n", SDL_GetError()); return 5; } Screen = SDL_SetVideoMode(800, 650, 16, SDL_SWSURFACE |SDL_DOUBLEBUF); SDL_WM_SetCaption("***Z Galaxy War***", 0); if(Screen == 0) { fprintf(stderr, "ERROR ! %s\n", SDL_GetError()); return 10; } init(); BG.x=BG.y=0; BAR.x=0; BAR.y=600; njoum = SDL_LoadBMP("src/njoum.bmp"); SDL_SetColorKey(njoum,SDL_SRCCOLORKEY,SDL_MapRGB(njoum->format,0,255,0)); bar = SDL_LoadBMP("src/bar.bmp"); sarokh = SDL_LoadBMP("src/sarokh.bmp"); SDL_SetColorKey(sarokh,SDL_SRCCOLORKEY,SDL_MapRGB(sarokh->format,0,255,0)); chirir = SDL_LoadBMP("src/chirir.bmp"); SDL_SetColorKey(chirir,SDL_SRCCOLORKEY,SDL_MapRGB(chirir->format,0,255,0)); kortass =SDL_LoadBMP("src/kortass.bmp"); SDL_SetColorKey(kortass,SDL_SRCCOLORKEY,SDL_MapRGB(kortass->format,0,255,0)); num = SDL_LoadBMP("src/num.bmp"); bg = SDL_LoadBMP("src/bg1.bmp"); while(1){ while(SDL_PollEvent(&Event)) { switch(Event.type) { case SDL_QUIT : fin(); case SDL_KEYDOWN : switch(Event.key.keysym.sym) { case SDLK_LEFT : dirX+=-VITESS; break; case SDLK_RIGHT : dirX+=VITESS; break; case SDLK_UP : dirY+=-VITESS; break; case SDLK_DOWN : dirY+=VITESS; break; case SDLK_ESCAPE : fin(); break; case SDLK_SPACE : CreatKortass(SAROKH); break; } } } Check(); MovChirir(); MovKortass(); MovSarokh(); Display(); } return 0; }

Conclusion :


le principe est tout con !! lol :D
boucle generale :
detecte les evenement => reagie !
et je vien d ajouter des truc pour la gestion des leveels et conteur de scores et vie !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (z189632)