Project tutorial
Remake of Boulder Dash Game for Homemade Arduboy

Remake of Boulder Dash Game for Homemade Arduboy

It's a remake of the Boulder Dash game made for a homemade Arduboy.

  • 80 views
  • 0 comments
  • 0 respects

Components and supplies

About this project

After have make an homemade Arduboy from: :https://create.arduino.cc/projecthub/indoorgeek/handheld-gaming-console-arduboy-clone-af1b61?ref=search&ref_id=homemade%20arduboy&offset=0

I've wanted to make a game on it.

So I've made a remake of an old game: Boulder ash. I called it Inso Dash.

I've written the core code in a day so still have to improve it, but it is working and there are 20 different levels.

It's easy to add new level if you want.

Code

InsoDashArduino
Just add it on an homemade Arduboy and it must works. I don't explain the process for make an homemade Arduboy because it's ever done there.
#include <Arduboy2.h>
#include <ArduboyTones.h>

Arduboy2 arduboy;
ArduboyTones sound(arduboy.audio.enabled);



#define terreTile  3
#define videTile  0
#define playerTile  1
#define rocherTile  8
#define diamondTile  7
#define porteClosedTile  10
#define wallTile  6
#define ennemyTile  9

#define screenWidth  128
#define screenHeight  64
#define xNbTile  16
#define yNbTile  8

#define maxLvl  20

const  char dataLvl[maxLvl][8][16] PROGMEM ={
             { {3,8,3,3,3,3,3,3,3,8,8,3,3,3,3,3},
              {3,7,7,7,3,3,3,3,3,3,3,3,3,8,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,7,7,7,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,0,9,0,3,1,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,8,3,3,3,3,3,3,3,3,3,3,8,8,3,3},
              {3,7,7,7,3,3,3,3,3,3,3,7,7,7,3,3} },
              
            { {3,8,8,8,8,3,3,3,3,3,8,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,7,7,7,7,3,3,6,3,3,7,7,7,3,3,3},
              {3,3,3,3,3,3,3,6,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,6,3,3,3,3,3,3,3,3},
              {3,3,3,3,8,3,3,6,3,3,3,7,7,7,3,3},
              {3,3,3,3,7,3,3,6,3,3,3,8,8,8,3,3},
              {3,1,3,3,7,3,3,6,3,3,3,3,3,3,3,3} },
              
            { {3,3,3,3,3,3,3,3,3,3,8,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,7,3,3,3,3,3},
              {3,3,3,3,3,0,9,0,3,3,7,3,3,3,3,3},
              {3,3,8,3,3,3,3,3,3,3,7,3,3,3,3,3},
              {3,3,3,3,3,3,3,6,3,3,3,3,3,3,3,3},
              {3,3,7,3,3,3,3,6,3,3,3,3,3,3,3,3},
              {3,3,7,3,3,3,3,6,6,6,6,6,6,6,6,6},
              {3,3,7,3,3,3,3,3,3,3,3,3,3,1,3,3} },
              
           { {3,3,3,8,8,8,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,7,7,7,3,3,3,3},
              {3,3,3,0,9,0,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,7,7,7,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,8,8,8,3,3,3,3,3,3,3,1,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,7,7,7,3,3,3,3,3,3,3,3,3,3}},
              
            
            
              { {3,3,3,8,8,8,8,3,3,3,6,3,3,3,3,3},
              {8,3,3,7,7,7,7,3,3,3,6,3,3,8,8,3},
              {7,3,3,3,3,3,3,3,3,3,6,3,3,7,7,3},
              {7,3,3,3,6,3,3,3,3,3,6,8,8,3,3,3},
              {7,3,3,8,6,3,3,3,3,3,6,7,7,3,3,3},
              {3,3,3,7,6,3,3,3,3,3,6,3,3,3,3,3},
              {3,3,3,7,6,8,8,8,3,3,6,6,6,6,3,3},
              {3,1,3,3,6,0,0,9,3,3,7,7,7,7,3,3}},
                
            { {1,3,3,3,3,7,7,7,3,3,3,3,3,3,3,8},
              {3,3,3,3,3,7,7,7,3,3,3,3,3,7,7,7},
              {6,6,6,6,6,6,6,6,6,6,6,6,3,3,3,3},
              {8,8,3,3,7,7,7,7,3,3,3,3,3,3,8,8},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7},
              {3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,6},
              {3,3,3,3,3,7,7,7,3,3,3,3,6,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}},

              
              { {3,3,3,3,3,8,7,7,7,7,3,3,3,3,8,8},
              {3,3,3,8,3,3,3,3,3,3,3,3,3,3,7,7},
              {3,3,3,7,6,6,6,6,6,6,6,8,3,3,3,3},
              {3,3,3,7,6,3,3,3,8,8,6,7,3,3,3,3},
              {3,3,3,7,6,7,7,7,7,7,6,7,3,3,3,3},
              {9,3,3,3,6,3,3,3,3,3,6,7,3,3,3,9},
              {0,8,8,3,6,6,6,3,6,6,6,3,8,8,8,0},
              {3,0,0,3,3,3,3,1,3,3,3,3,0,0,0,3}},
              
              { {3,8,8,8,3,3,3,3,3,8,8,3,3,8,8,8},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,0,9,0,3,3,3,3,3,3,3,3,3,0,9,0},
              {3,7,7,7,3,3,8,8,8,8,8,3,3,7,7,7},
              {3,6,6,6,6,3,7,7,7,7,7,3,6,6,6,6},
              {3,6,8,8,6,3,3,3,3,3,3,3,6,8,8,6},
              {3,6,6,6,6,3,3,3,1,3,3,3,6,6,6,6},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}},
              
              { {3,3,3,3,3,3,3,3,8,8,3,8,3,3,3,3},
              {3,3,3,8,3,3,3,3,7,7,3,3,3,3,3,8},
              {3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,7},
              {8,8,3,0,3,3,3,8,3,3,3,0,3,3,3,3},
              {7,7,3,9,3,3,3,3,3,3,3,9,3,8,8,3},
              {7,7,3,0,3,3,3,0,3,3,3,3,3,7,7,3},
              {3,3,3,3,3,3,3,0,3,3,3,8,8,3,3,3},
              {3,3,3,3,3,3,3,0,3,3,7,7,7,3,3,1}},
              
              { {3,3,8,8,8,3,6,3,8,3,6,3,3,8,8,8},
              {7,7,7,7,7,3,6,3,7,3,6,7,7,7,7,7},
              {3,3,3,3,3,3,6,3,7,3,6,3,3,3,3,3},
              {6,6,6,6,6,3,6,3,7,3,6,3,6,6,6,6},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,8,8,3,3,3,1,3,3,3,6,3,6,6,6,6},
              {3,3,3,3,3,3,3,3,3,3,6,3,7,7,7,7},
              {3,3,3,3,3,0,9,0,3,3,6,3,3,3,3,3}},
              
            { {1,3,3,8,8,8,3,8,8,8,8,3,7,7,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,8,0,9,0,8,0,9,0,0,8,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,9,3,7,3,9,3,7,3,3,9,3,3,8,8},
              {3,3,0,3,7,3,0,3,7,3,3,0,3,3,7,7},
              {3,3,0,3,7,3,0,3,7,3,3,0,3,3,7,7},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}},
            
              { {7,7,7,3,6,8,8,8,8,8,8,6,3,7,7,7},
              {3,8,3,3,6,7,7,7,7,7,7,6,3,3,8,3},
              {3,3,3,3,6,3,7,7,7,7,3,6,3,3,3,3},
              {3,9,3,3,6,3,3,3,3,3,3,6,3,3,9,3},
              {3,0,3,3,6,6,6,3,3,6,6,6,3,3,0,3},
              {3,0,3,3,7,7,3,3,3,7,7,3,3,3,0,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3}},

              { {3,3,3,3,3,3,8,8,7,7,3,3,3,8,3,3},
              {3,3,3,3,3,3,7,7,3,3,3,3,3,3,3,3},
              {6,6,6,6,6,6,6,6,6,6,3,3,3,0,3,3},
              {3,8,3,8,3,3,3,7,7,7,7,3,3,9,3,3},
              {3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6},
              {3,9,3,9,3,3,8,8,8,8,8,8,8,8,8,8},
              {3,0,3,0,3,3,7,7,7,7,7,7,7,7,3,3},
              {3,0,3,0,3,3,3,3,3,3,3,3,3,3,3,1}},

              { {3,3,3,3,6,3,7,7,7,3,3,3,3,6,8,8},
              {6,6,6,6,6,3,3,3,3,3,3,3,3,6,6,6},
              {7,7,3,3,3,3,0,3,0,3,3,3,3,3,3,7},
              {7,7,3,3,3,3,0,3,0,3,3,3,3,3,3,7},
              {6,6,6,6,3,3,9,3,9,3,3,3,6,6,6,6},
              {8,8,8,6,3,3,3,3,3,3,3,3,6,3,8,8},
              {7,7,7,6,3,3,3,3,3,3,3,3,6,3,7,7},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1}},
              
            { {8,8,3,3,3,3,3,1,3,3,3,3,3,8,8,8},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {0,0,0,9,6,6,6,6,6,6,6,0,0,0,0,9},
              {3,3,3,3,6,8,8,8,8,8,6,3,3,3,3,3},
              {3,8,3,3,6,7,7,7,7,7,6,3,3,3,3,8},
              {3,3,3,3,6,3,3,3,3,3,6,3,3,3,3,3},
              {7,0,3,3,6,6,3,3,6,6,6,3,3,3,3,0},
              {7,0,3,3,7,7,3,3,7,7,7,3,3,3,3,0}},

              { {1,3,3,3,6,8,3,8,8,3,3,3,3,3,8,8},
              {3,3,8,8,6,3,3,7,7,3,3,3,3,3,7,7},
              {3,3,7,7,6,9,3,3,3,3,3,3,3,3,3,3},
              {3,3,7,7,6,0,3,3,6,6,6,6,6,6,3,3},
              {3,3,7,7,6,3,3,3,6,3,3,3,8,8,8,3},
              {3,3,3,3,6,7,7,3,6,3,3,3,7,7,7,3},
              {3,3,8,8,6,7,7,3,6,3,3,3,8,8,8,3},
              {3,3,3,3,3,3,3,3,6,3,3,3,7,7,7,3}},

               { {3,3,8,8,8,3,8,8,8,3,8,8,8,3,8,8},
                {1,3,7,7,7,3,7,7,7,3,7,7,7,3,7,7},
                {3,3,3,3,8,8,8,3,8,8,8,3,8,8,8,3},
                {3,3,8,3,7,7,7,3,7,7,7,3,7,7,7,3},
                {8,3,8,7,3,3,3,3,3,3,3,3,3,3,3,3},
                {8,3,8,7,3,3,8,3,8,3,8,3,8,3,8,3},
                {3,3,7,7,3,3,8,3,8,3,8,3,8,3,8,3},
                {3,3,7,3,3,3,7,7,7,3,7,7,7,3,7,7}},

                { {3,3,3,3,8,6,8,8,8,3,3,8,8,6,3,3},
                {3,1,3,3,7,6,7,7,7,3,3,7,7,6,3,3},
                {3,8,8,3,7,6,3,3,8,3,3,7,7,6,3,8},
                {3,7,7,3,7,6,3,3,7,6,3,7,7,6,3,3},
                {3,7,7,3,7,6,3,3,7,6,3,3,3,6,8,3},
                {3,3,3,3,7,6,3,3,7,6,3,3,3,6,7,3},
                {3,3,3,3,7,3,3,3,3,6,3,3,3,6,7,3},
                {3,3,3,3,3,3,3,3,3,6,7,3,3,3,3,3}},

            { {8,8,3,3,3,6,3,3,3,3,8,8,8,8,7,8},
              {7,7,8,8,8,6,3,3,3,7,7,7,7,7,7,8},
              {7,7,7,7,7,6,3,3,3,3,3,3,3,3,3,3},
              {7,7,8,8,8,6,6,6,6,6,6,6,6,8,3,3},
              {3,3,7,7,7,3,3,8,8,8,8,8,8,8,3,3},
              {8,3,7,7,7,3,3,7,7,7,7,7,7,7,3,3},
              {8,3,7,7,7,3,3,3,3,3,3,3,3,3,3,3},
              {3,1,3,3,3,3,3,8,8,8,8,3,3,3,3,3}},

            { {8,8,8,6,3,3,8,8,8,8,8,7,7,7,7,8},
              {3,3,7,6,3,3,3,3,3,7,7,3,3,3,3,8},
              {3,1,7,6,8,8,8,8,3,3,3,8,3,3,3,7},
              {8,3,7,6,3,7,7,7,7,3,3,8,8,8,8,7},
              {7,3,3,6,3,3,3,3,3,3,3,3,3,3,3,3},
              {7,7,8,6,3,3,3,3,3,3,3,7,7,7,7,3},
              {8,3,7,3,3,3,7,7,7,3,8,8,8,3,3,3},
              {3,3,3,3,3,3,7,7,7,3,3,3,3,3,3,3}},

           /*
              { {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
              {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}}
              */
         

  };

char currentDataLvl[8][16];
char lastCurrentDataLvl[8][16];


const unsigned char PROGMEM mur[] =
{
// width, height,
8, 8,
0xff, 0xa5, 0xff, 0xa5, 0xa5, 0xff, 0xa5, 0xff, 
};

const unsigned char PROGMEM vide[] =
{
// width, height,
8, 8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
};

const unsigned char PROGMEM terre[] =
{
// width, height,
8, 8,
0x00, 0x00, 0x20, 0x40, 0x02, 0x04, 0x08, 0x00, 
};

const unsigned char PROGMEM diamant[] =
{
// width, height,
8, 8,
0x18, 0x3c, 0x5e, 0xf7, 0xef, 0x7a, 0x3c, 0x18, 
};

const unsigned char PROGMEM player[] =
{
// width, height,
8, 8,
0x20, 0x90, 0xd7, 0x7d, 0x7d, 0xd7, 0x90, 0x08, 
};

const unsigned char PROGMEM player1[] =
{
// width, height,
8, 8,
0x08, 0x92, 0xd5, 0x7f, 0x7f, 0xd5, 0x92, 0x20, 
};

const unsigned char PROGMEM rocher[] =
{
// width, height,
8, 8,
0x3c, 0x6e, 0xdb, 0xb7, 0xed, 0xdb, 0x76, 0x3c, 
};

const unsigned char PROGMEM ennemy[] =
{
// width, height,
8, 8,
0x89, 0xd2, 0x7d, 0x36, 0x36, 0x7d, 0xd2, 0x89, 
};

const unsigned char PROGMEM ennemy1[] =
{
// width, height,
8, 8,
0x88, 0xd0, 0x7d, 0x36, 0x36, 0x7d, 0xd0, 0xa0, 
};

const unsigned char PROGMEM ennemy2[] =
{
// width, height,
8, 8,
0x88, 0xd2, 0x7d, 0x36, 0x36, 0x7d, 0xd2, 0x88, 
};



char playerX;
char playerY;
bool playerFrame = 1;
char ennemyFrame = 0;



char life = 5;
char iLvl = 0;
bool beginLvl = 1;
bool gameOver = 0;
bool youWin = 0;

void setup() {
  Serial.begin(9600);
  arduboy.begin();
  arduboy.clear();
}

void loop() {
  //arduboy.clear(); 
  
  if ( beginLvl ){
    initLvl();
    beginLvl= 0;
  }
  else if(youWin){
    sound.tone(NOTE_E5,50);
    delay(160);
    arduboy.clear();
    arduboy.setCursor(0, 15);
    arduboy.setTextSize(1);
    arduboy.print("YOU WIN!! ");
    arduboy.display();
    sound.tone(NOTE_E5,50);
    sound.tone(NOTE_E5,50);
    delay(300);
    delay(500);
    if(iLvl < maxLvl){
      iLvl++;
      youWin = 0;
      beginLvl = 1;
    }
  }
  else  if (gameOver){
    life--;
    sound.tone(NOTE_A1,150);
    delay(160);
    arduboy.clear();
    arduboy.setCursor(0, 15);
    arduboy.setTextSize(1);
    if (life > 0 ){
        arduboy.print("You Loose !! ");
    }
    else{
        arduboy.print("GAME OVER!! ");
    }
    arduboy.display();
    delay(300);
    delay(500);
    if (life > 0){
      beginLvl = 1;
      gameOver = 0;
    }
    else{
      life = 5;
      iLvl = 0;
      beginLvl = 1;
      gameOver = 0;
    }
  }
  else{
    for (uint8_t i = 0 ; i < 5 ; i ++ ){
      controls();
      drawLvl();
      delay(60);  
    }
    game();
    drawLvl();
    delay(60);  
  }
 
}


void game(){
  uint8_t nbDiamond = 0;
  for(uint8_t j = 0; j < yNbTile ; j++ ){
    for(uint8_t i = 0 ; i < xNbTile ; i++){
      if( currentDataLvl[j][i] == diamondTile ){
        nbDiamond++; 
      }
    }
  }
  if (nbDiamond == 0){
    youWin = 1;
  }
  else{
    for(uint8_t j = 0; j < yNbTile ; j++ ){
      for(uint8_t i = 0 ; i < xNbTile ; i++){
        if( currentDataLvl[j][i] == diamondTile ){
          nbDiamond++; 
        }
        if( currentDataLvl[j][i] == rocherTile || currentDataLvl[j][i] == diamondTile ){
              if (j < yNbTile - 1 ){
                if(currentDataLvl[j +1][i] == videTile || currentDataLvl[j +1][i] == ennemyTile ){
                  if( j < yNbTile - 2 && currentDataLvl[j + 2][i] == 1 ){
                    gameOver = 1;
                  }
                  if(currentDataLvl[j +1][i] == ennemyTile ){
                    sound.tone(NOTE_D3,20);  
                  }
                  sound.tone(NOTE_A1,65);
                  currentDataLvl[j +1][i] = currentDataLvl[j][i];
                  currentDataLvl[j][i] = 0; 
                  drawLvl();
                }  
              }
        }
        else if( currentDataLvl[j][i] == ennemyTile ){
          uint8_t rndEnnemyMvt = rand() % 4;
          switch( rndEnnemyMvt ){
            case 0 :
              //Droite
              if( i < xNbTile - 2 && ( currentDataLvl[j][i+1] == videTile || currentDataLvl[j][i+1] == playerTile ) ){
                  if ( currentDataLvl[j][i+1] == playerTile){
                    gameOver = 1;
                  }
                  currentDataLvl[j][i] = videTile;
                  currentDataLvl[j][i+1] = ennemyTile;
                  drawLvl();
              }
              break;
            case 1 :
              //Gauche
              if( i > 1 && ( currentDataLvl[j][i-1] == videTile || currentDataLvl[j][i-1] == playerTile )){
                  if ( currentDataLvl[j][i-1] == playerTile){
                    gameOver = 1;
                  }
                  currentDataLvl[j][i] = videTile;
                  currentDataLvl[j][i-1] = ennemyTile;
                  drawLvl();
              }
              break;
            case 2 :
              //Haut
              if( j > 1  && ( currentDataLvl[j-1][i] == videTile || currentDataLvl[j-1][i] == playerTile ) ){
                  if ( currentDataLvl[j-1][i] == playerTile){
                    gameOver = 1;
                  }
                  currentDataLvl[j][i] = videTile;
                  currentDataLvl[j-1][i] = ennemyTile;
                  drawLvl();
              }
              break;
            case 3 :
              //Bas
              if( j < yNbTile - 2 && ( currentDataLvl[j+1][i] == videTile || currentDataLvl[j+1][i] == playerTile ) ){
                  if ( currentDataLvl[j+1][i] == playerTile){
                    gameOver = 1;
                  }
                  currentDataLvl[j][i] = videTile;
                  currentDataLvl[j+1][i] = ennemyTile;
                  drawLvl();
              }
              break;
          }
          
        }
        
      }
    }
  
  }
  if (ennemyFrame > 4 ){
    ennemyFrame = 0;
  }
  
  ennemyFrame++;
}


void controls(){

  bool controlsActivated = 0;
  
  uint8_t lastX = playerX;
  uint8_t lastY = playerY;


  if (arduboy.pressed(A_BUTTON) ){
    gameOver = 1;
    controlsActivated  = 0;
      
  }
  
  if (arduboy.pressed(LEFT_BUTTON) && playerX > 0 ) {
    playerX = playerX - 1;
    controlsActivated  = 1;
  }
  if (arduboy.pressed(RIGHT_BUTTON) && playerX < xNbTile - 1 ) {
      playerX = playerX + 1;
      controlsActivated  = 1;
  }
  if (arduboy.pressed(UP_BUTTON) && playerY > 0 ) {
      playerY = playerY - 1;
      controlsActivated  = 1;
  }
  if (arduboy.pressed(DOWN_BUTTON) && playerY < yNbTile - 1 ) {
      playerY = playerY + 1;
      controlsActivated  = 1;

  }


  bool mvtPossible = 0;
  if(controlsActivated){
    playerFrame = ! playerFrame;
    if( currentDataLvl[playerY][playerX] == terreTile || currentDataLvl[playerY][playerX] == videTile || currentDataLvl[playerY][playerX] == diamondTile || currentDataLvl[playerY][playerX] == ennemyTile ){
          mvtPossible = 1;
      if( currentDataLvl[playerY][playerX] == diamondTile ){
         sound.tone(NOTE_E5,50);
      }
      if( currentDataLvl[playerY][playerX] == ennemyTile){
        gameOver = 1;
        sound.tone(NOTE_C3,110);
        mvtPossible = 0;  
        currentDataLvl[lastY][lastX] = videTile;
      }
    }
    else if(currentDataLvl[playerY][playerX] == rocherTile ){
         if(lastX > playerX && playerX > 1 ){
            if ( currentDataLvl[playerY][playerX - 1 ] == videTile ){
                 currentDataLvl[playerY][playerX - 1 ] = rocherTile;
                 mvtPossible = 1;
            }
         }
         else if (lastX < playerX && playerX < xNbTile - 2 ){
          if ( currentDataLvl[playerY][playerX + 1 ] == videTile ){
              currentDataLvl[playerY][playerX + 1 ] = rocherTile;
              mvtPossible = 1;
            }
         }
    }
    if( mvtPossible == 1){
      currentDataLvl[lastY][lastX] = videTile;
      currentDataLvl[playerY][playerX] = playerTile;  
    }
    else {
      playerX = lastX;
      playerY = lastY;
    }
    debugLvl();
  }
}


void debugLvl(){
  for(uint8_t j = 0; j < yNbTile ; j++ ){
    for(uint8_t i = 0 ; i < xNbTile ; i++){
      uint8_t posXSprite = ( screenWidth / xNbTile ) * i;
      uint8_t posYSprite = (screenHeight / xNbTile ) * j;

      Serial.print(uint8_t( currentDataLvl[j][i] ));
      Serial.print(",");
    }
    Serial.println();
  }
  Serial.println("\n");
  Serial.println("\n");
  Serial.println("\n");
  
}
void drawLvl(){
  for(uint8_t j = 0; j < yNbTile ; j++ ){
    for(uint8_t i = 0 ; i < xNbTile ; i++){
      if (lastCurrentDataLvl[j][i] != currentDataLvl[j][i] || currentDataLvl[j][i] == ennemyTile || currentDataLvl[j][i] == playerTile){
        uint8_t posXSprite = ( screenWidth / xNbTile ) * i;
        uint8_t posYSprite = (screenHeight / yNbTile ) * j;
        unsigned char  sprite;
        switch ( currentDataLvl[j][i] ){
            case terreTile : 
              drawSprite( posXSprite, posYSprite, terre, 0 );
              break;
            case playerTile :
              if(playerFrame == 0 ){
                drawSprite( posXSprite, posYSprite, player , 0 );  
              }
              else{
                drawSprite( posXSprite, posYSprite, player1 , 0 );
              }
              break;
            case rocherTile :
              drawSprite( posXSprite, posYSprite, rocher , 0 );
              break;
            case videTile : 
              drawSprite( posXSprite, posYSprite, vide , 0 );
              break;
            case wallTile : 
              drawSprite( posXSprite, posYSprite, mur , 0 );
              break;
            case diamondTile : 
              drawSprite( posXSprite, posYSprite, diamant , 0 );
              break;
            case ennemyTile :
              switch( ennemyFrame % 3 ){
                case 0:
                  drawSprite( posXSprite, posYSprite, ennemy, 0 );
                  break;
                case 1:
                  drawSprite( posXSprite, posYSprite, ennemy1, 0 );
                  break;
                case 2:
                  drawSprite( posXSprite, posYSprite, ennemy2, 0 );
                  break;
              }
              break;
        }
        lastCurrentDataLvl[j][i] = currentDataLvl[j][i];  
      }
    } 
  }
  arduboy.display();
}


void initLvl(){
  for(uint8_t j = 0; j < 8 ; j++ ){
    for(uint8_t i = 0 ; i < 16 ; i++){
      if  ( uint8_t pgm_read_word(&dataLvl[iLvl][j][i]) == playerTile  ){
        playerX = i;
        playerY = j;
      }
      currentDataLvl[j][i] = pgm_read_word(&dataLvl[iLvl][j][i]);
      lastCurrentDataLvl[j][i] = -1;
    }
  }
}

void  drawSprite(uint8_t posX, uint8_t posY, unsigned char *sprite, uint8_t nolose ){
  Sprites::drawOverwrite(posX, posY, sprite, 0);
}

Comments

Similar projects you might like

Arduino Pocket Game Console + A-Maze - Maze Game

Project tutorial by Alojz Jakob

  • 12,931 views
  • 9 comments
  • 37 respects

Super Diet Racing Game Bike

Project in progress by luxlike

  • 2,659 views
  • 0 comments
  • 10 respects

Sezme: A Memory Game for the Arduino

by mariogianota

  • 2,334 views
  • 1 comment
  • 10 respects

2.4" Touchscreen with Retro Game Replicas

Project in progress by I.T

  • 7,086 views
  • 11 comments
  • 20 respects

Handheld Gaming Console | Arduboy Clone

Project tutorial by Neeraj Rane

  • 5,382 views
  • 4 comments
  • 22 respects

Arduino Touch Tic-Tac-Toe Game

Project tutorial by Nick Koumaris

  • 38,456 views
  • 24 comments
  • 64 respects
Add projectSign up / Login