progprinc.c~ 5.76 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;
  int s=10;
  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);
  
  if(champi<0){ printf("Champi 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<10;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; }
    else w--;
  }
  
  printf("%d %d \n",l,h);
  
  for(w=0;w<10;w++){
  afficherLutin(champi,(muschrooms.contenu[w].x)+1,(muschrooms.contenu[w].y)+6);
  }//affiche les champis
  majSurface();
  
  int gomme = creerLutin(0,0,50,50,0);
  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(500000);
   
    if((t==0 && s!=2) || s==0) {
      printf("dans le droite\n");
      pos = premier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      defiler(&listecenti);
      
      pos = dernier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      afficherLutin(Corpsd,(pos->x),pos->y);
      posmillepatte.x = pos->x+50;
      posmillepatte.y = pos->y;
      if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){
	afficherLutin(gameover,400,400);
	majSurface();
	sleep(5);
	fermerSurface();
	}
      enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte));
      afficherLutin(Teted,posmillepatte.x,posmillepatte.y);
     majSurface();
	s=0;
    }
    
    if((t==1 && s!=3) || s==1) {
      printf("dans le haut\n");
      pos = premier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      defiler(&listecenti);
      
      pos = dernier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      afficherLutin(Corpsh,(pos->x),pos->y);
      posmillepatte.x = pos->x;
      posmillepatte.y = pos->y-50;
      if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){
	afficherLutin(gameover,400,400);
	majSurface();
	sleep(5);
	fermerSurface();
	}
      enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte));
      afficherLutin(Teteh,posmillepatte.x,posmillepatte.y);
     majSurface();
	s=1;
    }

    if((t==2 && s!=0) || s==2) {
      printf("dans le gauche\n");
      pos = premier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      defiler(&listecenti);
      
      pos = dernier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      afficherLutin(Corpsg,(pos->x),pos->y);
      posmillepatte.x = pos->x-50;
      posmillepatte.y = pos->y;
      if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){
	afficherLutin(gameover,400,400);
	majSurface();
	sleep(5);
	fermerSurface();
	}
      enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte));
      afficherLutin(Teteg,posmillepatte.x,posmillepatte.y);
     majSurface();
	s=2;
    }

    if((t==3 && s!=1) || s==3) {
      printf("dans le bas\n");
      pos = premier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      defiler(&listecenti);
      
      pos = dernier(&listecenti);
      afficherLutin(gomme,pos->x,pos->y);
      afficherLutin(Corpsb,(pos->x),pos->y);
      posmillepatte.x = pos->x;
      posmillepatte.y = pos->y+50;
      if(posmillepatte.x > 1000 || posmillepatte.y > 1000 || posmillepatte.x < 0 || posmillepatte.y < 0){
	afficherLutin(gameover,400,400);
	majSurface();
	sleep(5);
	fermerSurface();
	}
      enfiler(&listecenti,&posmillepatte,sizeof(posmillepatte));
      afficherLutin(Teteb,posmillepatte.x,posmillepatte.y);
     majSurface();
	s=3;
    }
    
    if(touche=='a')
    {
      fermerSurface();		//condition d'arret
      return 0;
      
    }
}

  
  return 0;
}