|
|
Ligne 25 : |
Ligne 25 : |
| ===Code Arduino=== | | ===Code Arduino=== |
| <syntaxhighlight lang="Arduino" line> | | <syntaxhighlight lang="Arduino" line> |
− | | + | #define PIN 9 |
− | #include <FastLED.h> | + | #include <Arduino_GFX_Library.h> |
− | #include <SPI.h> | |
− | | |
− | #define NUM_STRIPS 1
| |
− | #define NUM_LEDS_PER_STRIP 256
| |
− | CRGB leds[NUM_STRIPS][NUM_LEDS_PER_STRIP];
| |
− | | |
− | int color[5] {0x000000,0x000001,0x010000,0x000100,0x010100};
| |
− | int position, position_vaisseau = 4, delay_tire = 0, level = 1;
| |
− | bool vivant = true, en_partie = true, ennemi = true;
| |
− | | |
− | int level_actuelle[16][16];
| |
− | | |
− | const int level_1[16][16] { \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} \
| |
− | };
| |
− | | |
− | const int level_2[16][16] { \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0}, \
| |
− | {0, 0, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} \
| |
− | };
| |
− | | |
− | const int level_3[16][16] { \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0}, \
| |
− | {0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 0, 0}, \
| |
− | {0, 0, 2, 0, 2, 0, 0, 2, 2, 0, 0, 2, 0, 2, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} \
| |
− | };
| |
− | | |
− | const int level_4[16][16] { \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} \
| |
− | };
| |
− | | |
− | const int game_over[16][16] { \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {2, 2, 2, 0, 2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 2, 0}, \
| |
− | {2, 0, 0, 0, 2, 0, 2, 0, 2, 2, 2, 0, 2, 0, 0, 0}, \
| |
− | {2, 0, 2, 0, 2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 0}, \
| |
− | {2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0}, \
| |
− | {2, 2, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 2, 2, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 2, 0, 2, 2, 2}, \
| |
− | {0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 2, 0, 2}, \
| |
− | {0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 2, 0, 0, 2, 2, 0}, \
| |
− | {0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 2, 0, 2}, \
| |
− | {0, 2, 2, 2, 0, 0, 2, 0, 0, 2, 2, 2, 0, 2, 0, 2}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} \
| |
− | };
| |
− | | |
− | const int win[16][16] { \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 2, 0, 0, 0, 2, 0, 2, 2, 2, 0, 2, 0, 0, 2, 0}, \
| |
− | {0, 2, 0, 2, 0, 2, 0, 0, 2, 0, 0, 2, 2, 0, 2, 0}, \
| |
− | {0, 2, 0, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 2, 2, 0}, \
| |
− | {0, 0, 2, 0, 2, 0, 0, 2, 2, 2, 0, 2, 0, 0, 2, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
| |
− | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} \
| |
− | };
| |
− | | |
| | | |
| void setup() { | | void setup() { |
− | // tell FastLED there's 60 NEOPIXEL leds on pin 2 | + | // put your setup code here, to run once: |
− | FastLED.addLeds<NEOPIXEL, 2>(leds[0], NUM_LEDS_PER_STRIP);
| |
| | | |
− | // tell FastLED there's 60 NEOPIXEL leds on pin 3
| |
− | FastLED.addLeds<NEOPIXEL, 3>(leds[1], NUM_LEDS_PER_STRIP);
| |
− |
| |
− | // tell FastLED there's 60 NEOPIXEL leds on pin 4
| |
− | FastLED.addLeds<NEOPIXEL, 4>(leds[2], NUM_LEDS_PER_STRIP);
| |
− | Serial.begin(9600);
| |
− |
| |
− | memcpy(level_actuelle,level_1,sizeof(level_1));
| |
− |
| |
− | pinMode(A0,INPUT);
| |
− | pinMode(D7,INPUT);
| |
− | }
| |
− |
| |
− |
| |
− | void affiche() {
| |
− | //carte
| |
− | for(int x = 0; x < 16; x++) {
| |
− | for(int y = 0; y < 16;y++){
| |
− | if (x%2 == 1){
| |
− | position = x*16+y;
| |
− | }
| |
− | else{
| |
− | position = x*16+15-y;
| |
− | }
| |
− | leds[0][position] = color[level_actuelle[x][y]];
| |
− | }
| |
− | }
| |
− |
| |
− | FastLED.show();
| |
− | }
| |
− |
| |
− | void create_vaisseau(){
| |
− | //pos entre 2 et 15
| |
− | clear();
| |
− | level_actuelle[13][position_vaisseau] = 1;
| |
− | level_actuelle[13][position_vaisseau-1] = 1;
| |
− | level_actuelle[12][position_vaisseau-1] = 1;
| |
− | level_actuelle[13][position_vaisseau-2] = 1;
| |
− | level_actuelle[14][position_vaisseau-2] = 1;
| |
− | level_actuelle[14][position_vaisseau] = 1;
| |
− | FastLED.show();
| |
− | }
| |
− |
| |
− | void clear(){
| |
− | for(int x = 10; x < 15; x++) {
| |
− | for(int y = 0; y < 16;y++){
| |
− | if (level_actuelle[x][y] == 1){
| |
− | level_actuelle[x][y] = 0;
| |
− | }
| |
− | }
| |
− | }
| |
| } | | } |
| | | |
| + | void loop() { |
| + | // put your main code here, to run repeatedly: |
| | | |
− | void move(){
| |
− | position_vaisseau = int(analogRead(A0)*16/1024);
| |
− | if (position_vaisseau >= 16){
| |
− | position_vaisseau = 15;
| |
− | }
| |
− | else if (position_vaisseau <= 1){
| |
− | position_vaisseau = 2;
| |
− | }
| |
| } | | } |
| | | |
− | void tirer() {
| + | </syntaxhighlight> |
− | if (true) {
| |
− | level_actuelle[11][position_vaisseau-1] = 103;
| |
− | }
| |
− | }
| |
− | | |
− | void tick(){
| |
− | ennemi = false;
| |
− | for(int x = 0; x < 16; x++) {
| |
− | for(int y = 0; y < 16;y++){
| |
− | if (level_actuelle[x][y] == 3){ //tire joueur
| |
− | if (x==0){
| |
− | level_actuelle[x][y] = 0;
| |
− | }
| |
− | else if ((level_actuelle[x-1][y]==4) || (level_actuelle[x-1][y]==104)){
| |
− | level_actuelle[x-1][y] = 3;
| |
− | level_actuelle[x][y] = 104;
| |
− | }
| |
− | else if (level_actuelle[x-1][y]!=0){
| |
− | level_actuelle[x-1][y] = 0;
| |
− | level_actuelle[x][y] = 0;
| |
− | }
| |
− | else{
| |
− | level_actuelle[x-1][y] = 3;
| |
− | level_actuelle[x][y] = 0;
| |
− | }
| |
− | }
| |
− |
| |
− | else if (level_actuelle[x][y] == 2){ //vaisseau enemi
| |
− | ennemi = true;
| |
− | if ((level_actuelle[x+1][y] == 0)&(random(0,40)==1)){
| |
− | level_actuelle[x+1][y] = 104; //chiffre temporaire pour pas refaire son action
| |
− | }
| |
− | }
| |
− | else if (level_actuelle[x][y] == 104){
| |
− | level_actuelle[x][y] = 4;
| |
− | }
| |
− | else if (level_actuelle[x][y] == 103){
| |
− | level_actuelle[x][y] = 3;
| |
− | }
| |
− | else if (level_actuelle[x][y]== 4){
| |
− | if (x==15){
| |
− | level_actuelle[x][y] = 0;
| |
− | }
| |
− | if ((level_actuelle[x+1][y] == 0) &(x<15)){
| |
− | level_actuelle[x+1][y] = 104;
| |
− | level_actuelle[x][y] = 0;
| |
− | }
| |
− | else if (level_actuelle[x+1][y] == 3){
| |
− | level_actuelle[x+1][y] = 104;
| |
− | level_actuelle[x][y] = 3;
| |
− | }
| |
− | else if (level_actuelle[x+1][y] == 1){
| |
− | level_actuelle[x][y] = 0;
| |
− | //game over
| |
− | en_partie = false;
| |
− | vivant = false;
| |
− | }
| |
− | }
| |
− | }
| |
− | }
| |
− | }
| |
− | | |
− | void loop() {
| |
− | while (en_partie){
| |
− | tick();
| |
− | affiche();
| |
− | create_vaisseau();
| |
− | if ((digitalRead(D7)) & (delay_tire == 0)){
| |
− | tirer();
| |
− | delay_tire = 2;
| |
− | }
| |
− | else if (delay_tire !=0){
| |
− | delay_tire -= 1;
| |
− | }
| |
− | move();
| |
− | if (!ennemi){
| |
− | if (level == 4){
| |
− | en_partie = false;
| |
− | | |
− | }
| |
− | else{
| |
− | level +=1;
| |
− | }
| |
− | | |
− | if(level==2){
| |
− | memcpy(level_actuelle,level_2,sizeof(level_2));
| |
− | }
| |
− | else if(level==3){
| |
− | memcpy(level_actuelle,level_3,sizeof(level_3));
| |
− | }
| |
− | else if(level==4){
| |
− | memcpy(level_actuelle,level_4,sizeof(level_4));
| |
− | }
| |
− | }
| |
− | delay(75);
| |
− | }
| |
− | if (vivant){
| |
− | memcpy(level_actuelle,win,sizeof(win));
| |
− | }
| |
− | else{
| |
− | memcpy(level_actuelle,game_over,sizeof(game_over));
| |
− | }
| |
− | affiche();
| |
− | delay(200);
| |
− | if (digitalRead(D7)){
| |
− | memcpy(level_actuelle,level_1,sizeof(level_1));
| |
− | level = 1;
| |
− | vivant = true;
| |
− | en_partie = true;
| |
− | }
| |
− | }
| |
| | | |
| ==étapes de fabrication== | | ==étapes de fabrication== |