progprinc.c 5.6 KB
#include <stdio.h>
#include <stdlib.h>
#include <libFile.h>
#include <libgraph.h>
#include <unistd.h>
#include <time.h>
#include <SDL/SDL.h>
#define MAX_ELEMENTS 50

typedef struct {
  int x;
  int y;
}position;

typedef struct {
  position contenu[MAX_ELEMENTS];
  int nombre;
  } liste_champi;

void affichage(element_t e)
{ 
  position *p = e;
  printf("%d %d \n", p->x, p->y);
}


int main() {
  SDL_keysym* detail;
  srand(time(NULL));
  char touche;
  unsigned char bas;
  int largeur = 1000;
  int hauteur = 1000;
  liste_champi muschrooms={.nombre=0};
  liste_t listecenti={NULL,0,0};
  int h,w,l,i,t, allonge;
  int s=0;
  char *titre = "Le Centipède";
  
  
  int champi = chargerLutin("Lutins/millepatte_champi.bmp",0);
  int Teted = chargerLutin("Lutins/millepatte_tete_droite.bmp",0);
  int Teteg = chargerLutin("Lutins/millepatte_tete_gauche.bmp",0);
  int Teteh = chargerLutin("Lutins/millepatte_tete_haut.bmp",0);
  int Teteb = chargerLutin("Lutins/millepatte_tete_bas.bmp",0);
  int Corpsg = chargerLutin("Lutins/millepatte_corps_gauche.bmp",0);
  int Corpsd = chargerLutin("Lutins/millepatte_corps_droite.bmp",0);
  int Corpsh = chargerLutin("Lutins/millepatte_corps_haut.bmp",0);
  int Corpsb = chargerLutin("Lutins/millepatte_corps_bas.bmp",0);
  int gameover = chargerLutin("Lutins/game_over.bmp",0);
  int Tete;
  int Corps;
  int abs, ord, obstacle, couleur;
   
  if(champi<0 || Teted<0 || Teteg<0 || Teteh <0 || Teteb<0 || Corpsg<0 || Corpsd<0 || Corpsh<0 || Corpsb<0 || gameover<0){ printf("Image pas là\n"); exit(-1); }
  
  tailleLutin(champi,&l,&h);
  position *pos;
  position poschampi;
  position posmillepatte;
  
  creerSurface(largeur,hauteur,titre);
  
  int x = 300;
  int y = 500;
  
      for(i=0; i<4; i++)
	    {
	    posmillepatte.x = (x + 50*i);
	    posmillepatte.y = y;
	    enfiler(&listecenti,&posmillepatte,sizeof(position));
	    }
							//affichage des corpsd du centipede
      for(i=0; i<4; i++)
	    {
	    pos = enieme(i,&listecenti);
	    afficherLutin(Corpsd,pos->x,pos->y);
	    }
    
  posmillepatte.x = (x+200);
  posmillepatte.y = y;
  enfiler(&listecenti,&posmillepatte,sizeof(position)); //affichage de la tete du Centipède
  pos = enieme(4, &listecenti);
  afficherLutin(Teted,pos->x,pos->y);
  
/*     for(i = 0 ; i < 20; i++)
	    {
	    rectanglePlein(i*50,0,1,1000,5);			//pose de la grille
	    rectanglePlein(0,i*50,1000,1,5);
	    } */
	    
  
      for(w=0;w<20;w++) 
	    {
	    poschampi.x = (rand()%20)*50;			//fixe coordonnées des champignons
	    poschampi.y = (rand()%20)*50;
	    if(poschampi.y > 570 || poschampi.y < 430) 
		{
		muschrooms.contenu[muschrooms.nombre++]=poschampi;
		afficherLutin(champi,(muschrooms.contenu[w].x)+1,(muschrooms.contenu[w].y)+6);
		}
	    else w--;
	    }
  
  printf("%d %d \n",l,h);
	      //affiche les champis
            for(w=0;w<20;w++)
	    {
	    printf("les coordonnées de mes champis : %d  %d  \n", (muschrooms.contenu[w].x),(muschrooms.contenu[w].y));
	    }
	    
 majSurface();
  
 int gomme = creerLutin(0,0,50,50,-1);
 
/* afficherLutin(Corpsd,0,0)
 int couleurcd = couleurPixel(25,25);
 majSurface();
 afficherLutin(gomme,0,0);
 majSurface();

 afficherLutin(Corpsg,0,0)
 int couleurcg = couleurPixel(25,25);
 majSurface();
 afficherLutin(gomme,0,0);
 majSurface();
 
 afficherLutin(Corpsh,0,0)
 int couleurch = couleurPixel(25,25);
 majSurface();
 afficherLutin(gomme,0,0);
 majSurface();
 
 afficherLutin(Corpsb,0,0)
 int couleurcb = couleurPixel(25,25);
 majSurface();
 afficherLutin(gomme,0,0);
 majSurface(); */
 
 majSurface();
    
  
  
  while(1){
	  if(lireTouche(&bas,&touche,(void **)&detail) && bas==1) 
	      {
	      if(detail->sym==SDLK_RIGHT) t=0;
	      if(detail->sym==SDLK_UP) t=1;
	      if(detail->sym==SDLK_LEFT) t=2;
	      if(detail->sym==SDLK_DOWN) t=3;	
	      }
 	
	  usleep(200000);
   
	  if((t==0 && s!=2) || s==0) { abs=50; ord=0; Tete = Teted; Corps = Corpsd; s=0; }
	  if((t==1 && s!=3) || s==1) { abs=0; ord=(-50); Tete = Teteh; Corps = Corpsh; s=1; }
	  if((t==2 && s!=0) || s==2) { abs=-50; ord=0; Tete = Teteg; Corps = Corpsg; s=2; }
	  if((t==3 && s!=1) || s==3) { abs=0; ord=50; Tete = Teteb; Corps = Corpsb; s=3; }  
	  
	      pos = dernier(&listecenti);
	      posmillepatte.x = pos->x+abs;
	      posmillepatte.y = pos->y+ord;
	      if(posmillepatte.x==1000 || posmillepatte.y==1000 || posmillepatte.x==-50 || posmillepatte.y==-50)
		  {
		  afficherLutin(gameover,250,433);
		  majSurface();
		  sleep(5);
		  fermerSurface();
		  }

	      majSurface();
	      couleur = couleurPixel(posmillepatte.x+25,posmillepatte.y+25);
	      printf("la couleur est %d\n",couleur);
	      if(couleur!=1) obstacle = 1;
	      else obstacle = 0;
	      allonge = 0;
	      
	      if(obstacle==1){
		 for(w=0;w<20;w++)
		    {
			if((muschrooms.contenu[w].x) == posmillepatte.x && (muschrooms.contenu[w].y) == posmillepatte.y) { allonge = 1; } }
			if(allonge==1){
			afficherLutin(gomme,pos->x,pos->y);
			afficherLutin(Corps,(pos->x),pos->y);
			enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte));
			afficherLutin(Tete,posmillepatte.x,posmillepatte.y);
			}
			else {
			afficherLutin(gameover,250,433);
			majSurface();
			sleep(5);
			fermerSurface();
			}		
		
	      }
	      
	      if(obstacle==0){
		afficherLutin(gomme,pos->x,pos->y);
		afficherLutin(Corps,(pos->x),pos->y);
		enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte));
		afficherLutin(Tete,posmillepatte.x,posmillepatte.y);
	        pos = premier(&listecenti);
	        afficherLutin(gomme,pos->x,pos->y);
	        defiler(&listecenti);
	      }
	      majSurface();
    
    if(touche=='a')
    {
      fermerSurface();		//condition d'arret
      return 0;    
    }
} 
  return 0;
}