Programme du Space Invader : /!\ Attention, ne juger pas trop vite, c'étais mes premiers pas en programmation.
#include<18F6585.h>#fuses HS,NOWDT,NOLVP,NOPROTECT#device ICD=TRUE#define FAST_GLCD#use delay(clock=20000000)#include<HDM64GS12.C>#include<GRAPHICS.C>#include <STDLIB.H>#include <math.h>#define RAND_MAX = 7#define GLCD_WIDTH
int A;//POS MONSTREint B;int C=60;//POS VAISSEAUint Monstre[] = {1,1,1,1,1,1,1,1};int Chateau1[15] =  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};int Chateau2[15] =  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};int Chateau3[15] =  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};int value;int BP;int i;                //TYPIQUEMENT, LA C'EST ABERRAND int o;int u;int y;int t;int tir=0;int tirA;int tirB=55;int val;int tuer=0;int16 tirlouper=0;int16 score=65000;int tempscore;int Mov=0;int tempMov=0;int sens=1;int movrand;int START=0;
int BUZON;int BUZOFF;
int temptirmonstre=0;int tirmonstreA;int tirmonstreB;int tirmonstreON;int MonstreTir;
char Nom[] = "By Lilian S2SE";char Win[] = "Win!";char Lose[] = "Loose!";char Debut[] = "Space";char Invader[] = "Invader";char resultat[];char Destruction[] = "Destruct";
void vaisseaux();void monstre1();void monstre2();void WinGame();void LoseGame();void Chargement();void Chateau();void ColisionTirMonstre();void ColisionVaisseaux();
void main(){   glcd_init(on);   tir=0;   Chargement();   Srand(6);   /*glcd_pixel(10,10,on);//permet de positioner un pixel   glcd_line(10, 10, 40, 10,on);//permet de tracer une ligne   glcd_rect(10, 10, 60, 30, YES, ON);//Tracer des rectangles Le YES=PLEIN NO=VIDE   glcd_circle(64, 32, 20, no, on);//Un cercle glcd_circle(x, y, radius, fill, color)   glcd_text57(5, 5, message, 1, on);*/   //CAN   setup_adc_ports(ALL_ANALOG);   setup_adc(ADC_CLOCK_INTERNAL);
   while(1)   {   output_F(0);   tempscore++;   if (tempscore == 5)   {   score = score - 1 ;   tempscore = 0;   }         tempMov++;   if(tempMov == 7 && sens == 1)                //TYPIQUEMENT, LA C'EST ABERRAND    {      if(Mov == 0)      {         Mov = 1;      }      else if(Mov == 1)      {         Mov = 2;      }      else if(Mov == 2)      {         Mov = 3;      }      else if(Mov == 3)      {         Mov = 4;      }      else if(Mov == 4)      {         Mov = 5;      }      else if(Mov == 5)      {         Mov = 6;      }      else if(Mov == 6)      {         Mov = 7;         sens = 0;      }      tempMov = 0;   }   else if(tempMov == 7 && sens == 0)   {      if (Mov == 7)      {         Mov = 6;      }      else if (Mov == 6)      {         Mov = 5;      }      else if (Mov == 5)      {         Mov = 4;      }      else if (Mov == 4)      {         Mov = 3;      }      else if(Mov == 3)      {         Mov = 2;      }      else if(Mov == 2)      {         Mov = 1;      }      else if(Mov == 1)      {         Mov = 0;         sens = 1;      }      tempMov = 0;   }
   
   glcd_fillscreen(OFF);   //GESTION DES MONSTRES   B=10;   if(Monstre[0] == 1)   {   A=3+Mov;   monstre1();   }   if(Monstre[1] == 1)   {   A=20+Mov;   monstre2();   }   if(Monstre[2] == 1)   {   A=33+Mov;   monstre1();   }   if(Monstre[3] == 1)   {   A=50+Mov;   monstre2();    }   if(Monstre[4] == 1)   {   A=63+Mov;   monstre1();    }   if(Monstre[5] == 1)   {   A=80+Mov;   monstre2();    }   if(Monstre[6] == 1)   {   A=93+Mov;   monstre1();    }   if(Monstre[7] == 1)   {   A=110+Mov;   monstre2();      }      //GESTION DES TIRS MONSTRES      /*int temptirmonstre;   int tirmonstreA;   int tirmonstreB;   int tirmonstreON;   int MonstreTir;*/         temptirmonstre++;      if(temptirmonstre == 20)   {   temptirmonstre = 0;   MonstreTir = (int)(rand()%7);//Génération Nombre Aléatoire      if(MonstreTir == 0 && Monstre[0] == 1)         {         tirmonstreA = 6+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else if(MonstreTir == 1 && Monstre[1] == 1)         {         tirmonstreA = 26+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else if(MonstreTir == 2 && Monstre[2] == 1)         {         tirmonstreA = 39+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else if(MonstreTir == 3 && Monstre[3] == 1)         {         tirmonstreA = 56+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else if(MonstreTir == 4 && Monstre[4] == 1)         {         tirmonstreA = 69+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else if(MonstreTir == 5 && Monstre[5] == 1)         {         tirmonstreA = 86+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else if(MonstreTir == 6 && Monstre[6] == 1)         {         tirmonstreA = 99+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else if(MonstreTir == 7 && Monstre[7] == 1)         {         tirmonstreA = 116+Mov;         tirmonstreB = B+17;         tirmonstreON = 1;         }      else         {         temptirmonstre = 15;         }     }      //GESTION TIR MONSTRE   if(tirmonstreON == 1)      {         glcd_line(tirmonstreA, tirmonstreB, tirmonstreA, tirmonstreB+5,on);               tirmonstreB=tirmonstreB+2;            if(tirmonstreB >= 60)            {            tirmonstreON=0;            }      }   ColisionTirMonstre();   ColisionVaisseaux();
      //GESTION DU VAISSEAU   B=55;   set_adc_channel(0);   delay_ms(10);   value=read_adc();      if(value <= 100)      {         C=C-1;            if(C <= 2)            {               C = 2;            }      }      if(value >= 150)      {         C=C+1;            if(C >= 118)            {               C = 118;            }
      }      if(value <= 80)      {         C=C-2;            if(C <= 4)            {               C = 4;            }      }      if(value >= 170)      {         C=C+2;            if(C >= 118)            {               C = 118;            }      }      if(value <= 50)      {         C=C-2;            if(C <= 4)            {               C = 4;            }      }      if(value >= 190)      {         C=C+2;            if(C >= 118)            {               C = 118;            }      }
   //GESTION DES TIRS   BP=input(PIN_G0);
   if(tir==0 && BP == 0){tir=1;tirA=C+4;START = 1;}
   if(tir==1)      {         //glcd_line(tirA, tirB, tirA, tirB+5,on);         glcd_circle(tirA, tirB, 1, on, on);         tirB=tirB-2;            if(tirB == 1)            {            tir=0;            tirB=55;            }                  }         //GESTION BUZ   if(tirB == 53) { output_F(255); }   if(tirmonstreB == 18) { output_F(255); }   
   //GESTION COLISION MONSTRE !   if(tirB <= 9)   {//HORIZONTAL DES MONSTRES       if( tirA >= 3+Mov && tirA <= 13+Mov && Monstre[0] == 1)       {       Monstre[0] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else if( tirA >= 20+Mov && tirA <= 27+Mov && Monstre[1] == 1)       {       Monstre[1] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else if( tirA >= 33+Mov && tirA <= 43+Mov && Monstre[2] == 1)       {       Monstre[2] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else if( tirA >= 50+Mov && tirA <= 57+Mov && Monstre[3] == 1)       {       Monstre[3] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else if( tirA >= 63+Mov && tirA <= 73+Mov && Monstre[4] == 1)       {       Monstre[4] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else if( tirA >= 80+Mov && tirA <= 87+Mov && Monstre[5] == 1)       {       Monstre[5] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else if( tirA >= 93+Mov && tirA <= 103+Mov && Monstre[6] == 1)       {       Monstre[6] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else if( tirA >= 110+Mov && tirA <= 117+Mov && Monstre[7] == 1)       {       Monstre[7] = 0;       tir = 0;       tirB=55;       output_F(255);       }       else       {       tirlouper++;       }   }
   //Gestion des tués   tuer = 0;   if(Monstre[0] == 0)      {      tuer++;      }   if(Monstre[1] == 0)      {      tuer++;      }   if(Monstre[2] == 0)      {      tuer++;      }   if(Monstre[3] == 0)      {      tuer++;      }   if(Monstre[4] == 0)      {      tuer++;      }   if(Monstre[5] == 0)      {      tuer++;      }   if(Monstre[6] == 0)      {      tuer++;      }   if(Monstre[7] == 0)      {      tuer++;      }
   if(tuer == 8)      {      WinGame();      }
   //GESTION DES CHATEAUX   chateau();   //AFFICHAGE   vaisseaux();   glcd_update();   delay_ms(20);
}
}
void vaisseaux(){   glcd_pixel(C+4,B,on);   glcd_pixel(C+4,B+1,on);   glcd_pixel(C+3,B+2,on);   glcd_pixel(C+5,B+2,on);   glcd_pixel(C+1,B+3,on);   glcd_pixel(C+3,B+3,on);   glcd_pixel(C+5,B+3,on);   glcd_pixel(C+7,B+3,on);   glcd_line(C+1, B+4, C+7, B+4,on);   glcd_line(C, B+5, C+8, B+5,on);   glcd_pixel(C,B+6,on);   glcd_pixel(C+4,B+6,on);   glcd_pixel(C+8,B+6,on);   glcd_pixel(C+1,B+7,on);   glcd_pixel(C+7,B+7,on);
}
void monstre1(){   if(Mov == 0 || Mov == 2 || Mov == 4 || Mov == 6)      {      glcd_pixel(A+2,B,on);      glcd_pixel(A+8,B,on);      glcd_pixel(A+3,B+1,on);      glcd_pixel(A+7,B+1,on);      glcd_line(A+2, B+2, A+8, B+2,on);      glcd_line(A+1, B+3, A+9, B+3,on);      glcd_pixel(A+3,B+3,off);      glcd_pixel(A+7,B+3,off);      glcd_line(A, B+4, A+10, B+4,on);      glcd_line(A, B+5, A+10, B+5,on);      glcd_pixel(A+1,B+5,off);      glcd_pixel(A+9,B+5,off);      glcd_pixel(A,B+6,on);      glcd_pixel(A+2,B+6,on);      glcd_pixel(A+8,B+6,on);      glcd_pixel(A+10,B+6,on);      glcd_line(A+3, B+7, A+7, B+7,on);      glcd_pixel(A+5,B+7,off);      }   else      {      glcd_pixel(A+2,B,on);      glcd_pixel(A+8,B,on);      glcd_pixel(A+3,B+1,on);      glcd_pixel(A+7,B+1,on);      glcd_line(A+2, B+2, A+8, B+2,on);       glcd_pixel(A,B+2,on);      glcd_pixel(A+10,B+2,on);      glcd_line(A, B+3, A+10, B+3,on);      glcd_pixel(A+3,B+3,off);      glcd_pixel(A+7,B+3,off);      glcd_line(A, B+4, A+10, B+4,on);      glcd_line(A+2, B+5, A+8, B+5,on);      glcd_pixel(A+2,B+6,on);      glcd_pixel(A+8,B+6,on);      glcd_pixel(A+3,B+7,on);      glcd_pixel(A+7,B+7,on);      glcd_pixel(A+4,B+8,on);      glcd_pixel(A+6,B+8,on);      }   }
void monstre2(){   if(Mov == 0 || Mov == 2 || Mov == 4 || Mov == 6)      {      glcd_line(A+3, B, A+4, B,on);      glcd_line(A+2, B+1, A+5, B+1,on);      glcd_line(A+1, B+2, A+6, B+2,on);      glcd_line(A, B+3, A+7, B+3,on);      glcd_pixel(A+2,B+3,off);      glcd_pixel(A+5,B+3,off);      glcd_line(A, B+4, A+7, B+4,on);      glcd_pixel(A+2,B+5,on);      glcd_pixel(A+5,B+5,on);      glcd_pixel(A+1,B+6,on);      glcd_line(A+3, B+6, A+4, B+6,on);      glcd_pixel(A+6,B+6,on);      glcd_pixel(A,B+7,on);      glcd_pixel(A+2,B+7,on);      glcd_pixel(A+5,B+7,on);      glcd_pixel(A+7,B+7,on);      }   else      {      glcd_line(A+3, B, A+4, B,on);      glcd_line(A+2, B+1, A+5, B+1,on);      glcd_line(A+1, B+2, A+6, B+2,on);      glcd_line(A, B+3, A+7, B+3,on);      glcd_pixel(A+2,B+3,off);      glcd_pixel(A+5,B+3,off);      glcd_line(A, B+4, A+7, B+4,on);      glcd_line(A+2, B+5, A+5, B+5,on);      glcd_pixel(A+1,B+6,on);      glcd_pixel(A+6,B+6,on);      glcd_pixel(A+2,B+7,on);      glcd_pixel(A+5,B+7,on);            }          }
void WinGame(){   glcd_fillScreen(off);   sprintf(resultat, "%LU", (int16)score);   glcd_rect(0, 0, 127, 63, YES, ON);   glcd_text57(20, 25, Win, 2, off);   glcd_text57(10, 10, resultat, 1, off);   glcd_update();   for(u=0;u<=10.0;u++)   {      for(y=0;y<=30;y++)      {      delay_us(1000);      output_F(255);      delay_us(1000);      output_F(0);      }      for(y=0;y<=40;y++)      {      delay_us(555);      output_F(255);      delay_us(555);      output_F(0);      }      for(y=0;y<=50;y++)      {      delay_us(500);      output_F(255);      delay_us(500);      output_F(0);      }      for(y=0;y<=55;y++)      {      delay_us(555);      output_F(255);      delay_us(555);      output_F(0);      }      for(y=0;y<=60;y++)      {      delay_us(454);      output_F(255);      delay_us(454);      output_F(0);      }               }   reset_cpu();}
void LoseGame(){   glcd_fillScreen(off);   glcd_rect(0, 0, 127, 63, YES, ON);   glcd_text57(10, 25, Lose, 2, off);   glcd_text57(30,10, DESTRUCTION, 1, OFF);   glcd_update();   for(u=0;u<=50;u++)      {      delay_ms(100);      output_F(255);      delay_ms(50);      output_F(0);      }   reset_cpu();}
void Chargement(){      glcd_fillScreen(off);      glcd_rect(0, 0, 127, 63, YES, OFF);      glcd_text57(34, 18, Debut, 2, ON);      glcd_text57(22,33,Invader, 2,ON);      glcd_text57(30,50, Nom, 1, ON);      glcd_update();      for(t=0;t<=2;t++)      {         for(y=0;y<=30;y++)         {         delay_us(1000);         output_F(255);         delay_us(1000);         output_F(0);         }         delay_ms(400);         for(y=0;y<=30;y++)         {         delay_us(1000);         output_F(255);         delay_us(1000);         output_F(0);         }         delay_ms(400);         for(y=0;y<=30;y++)         {         delay_us(1000);         output_F(255);         delay_us(1000);         output_F(0);         }         delay_ms(400);         for(y=0;y<=30;y++)         {         delay_us(500);         output_F(255);         delay_us(500);         output_F(0);         }         delay_us(250);         for(y=0;y<=15;y++)         {         delay_us(1000);         output_F(255);         delay_us(1000);         output_F(0);         }         delay_ms(150);         for(y=0;y<=30;y++)         {         delay_us(1200);         output_F(255);         delay_us(1200);         output_F(0);         }         delay_ms(150);         for(y=0;y<=30;y++)         {         delay_us(1200);         output_F(255);         delay_us(1200);         output_F(0);         }         delay_ms(150);         for(y=0;y<=50;y++)         {         delay_us(1500);         output_F(255);         delay_us(1500);         output_F(0);         }      delay_ms(2000);      }}
void chateau(){   if(tirB <= 45)   {//HORIZONTAL DES Chateaux       for(o=0;o<=15;o++)       {          if( tirA == 20+o && Chateau1[o] == 1)          {          Chateau1[o] = 0;          tir=0;          tirB=55;          }       }   }        for(o=0;o<=15;o++)   {      if(Chateau1[o] == 1) {glcd_pixel(20+o,45,ON);}      else      {      {glcd_pixel(20+o,45,OFF);}      }   }   //CHATEAU 2   if(tirB <= 45)   {//HORIZONTAL DES Chateaux       for(o=0;o<=15;o++)       {          if( tirA == 55+o && Chateau2[o] == 1)          {          Chateau2[o] = 0;          tir=0;          tirB=55;          }       }   }        for(o=0;o<=15;o++)   {      if(Chateau2[o] == 1) {glcd_pixel(55+o,45,ON);}      else      {      {glcd_pixel(55+o,45,OFF);}      }   }   //CHATEAU 3   if(tirB <= 45)   {//HORIZONTAL DES Chateaux       for(o=0;o<=15;o++)       {          if( tirA == 90+o && Chateau3[o] == 1)          {          Chateau3[o] = 0;          tir=0;          tirB=55;          }       }   }        for(o=0;o<=15;o++)   {      if(Chateau3[o] == 1) {glcd_pixel(90+o,45,ON);}      else      {      {glcd_pixel(90+o,45,OFF);}      }   }}
void ColisionTirMonstre(){   if(tirmonstreB >= 44)//Gestion Colision Chateaux   {      for(o=0;o<=15;o++)      {         if(tirmonstreA == 20+o && Chateau1[o] == 1)         {            Chateau1[o] = 0;            tirmonstreON = 0;         }      }      for(o=0;o<=15;o++)      {         if(tirmonstreA == 55+o && Chateau2[o] == 1)         {            Chateau2[o] = 0;            tirmonstreON = 0;         }      }      for(o=0;o<=15;o++)      {         if(tirmonstreA == 90+o && Chateau3[o] == 1)         {            Chateau3[o] = 0;            tirmonstreON = 0;         }      }         }}
void ColisionVaisseaux(){   if(tirmonstreB >= 58)   {      if(tirmonstreA >= C && tirmonstreA <= C+9 && START == 1 && tirmonstreB <= 60)      {
      LoseGame();      }   }}