#include "GameBoy.h"
GameBoy gb;
// ===== MENU =====
// можливі стани
enum MenuGame{ MENU_SNAKE, MENU_CAR, MENU_ARCA, MENU_TETRA, MENU_END};
int menuGameIndex=MENU_SNAKE;
bool isPlay = false;
// спрайти ігор
byte menuSprites[MENU_END][8]={
{ 0b01010000,
0b00100000,
0b01110000,
0b00100000,
0b00000100,
0b00001110,
0b00000100,
0b00001010 },
{ 0b00000000,
0b00111100,
0b01100110,
0b01100000,
0b00111100,
0b00000110,
0b11000110,
0b00111000 } ,
{ 0b10101010,
0b01010101,
0b10101010,
0b00000000,
0b01000000,
0b00000000,
0b00011100,
0b00000000 },
{ 0b01000000,
0b01100000,
0b00100010,
0b00000010,
0b01000110,
0b01000000,
0b01000110,
0b01000110 }
};
byte menuSpriteArrow[8]={
0b01000000,
0b11100000,
0b01000000,
0b01000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};
// читання пікселя зі спрайта
bool spritePixel(byte s[],int x,int y){ return bitRead(s[y],7-x); }
// малювання спрайта
void drawMenuSprite(int xx, int yy, byte s[]){
for(int y=0;y<8;y++)
for(int x=0;x<8;x++)
if(x+xx < 8 and y+yy < 16)
gb.setLed(x+xx,y+yy,spritePixel(s,x,y));
}
void loopMenu(){
delay(100); gb.clearDisplay();
drawMenuSprite(0, 0, menuSprites[menuGameIndex]);
drawMenuSprite(menuGameIndex, 11, menuSpriteArrow);
for(int i=0; i<MENU_END; i++) gb.setLed(i+1,9,1); // індикатори вибору
// керування
int key=gb.getKey();
if (key==5) menuGameIndex++;
else if(key==4) menuGameIndex--;
else if(not key == 0){
isPlay = true;
gb.testMatrix(1);
return;
}
menuGameIndex=constrain(menuGameIndex,0,MENU_END-1);
}
// ===== MENU END =====
void setup(){ gb.begin(0); }
void loop(){
if(not isPlay){ loopMenu(); return;}
}