En BTS

Space Invadeur sur Ecran Graphique en BTS Système Electronique


Programmé sur un PIC18F, et en utilisant une manette de simulation d'aviation PC.

Robot Quadropod

Photos à venir

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(); } }}