#include "GameBoy.h"
GameBoy gb;
// Додаємо глобальну змінну для рахунку (спільну для всіх ігор)
int score = 0;
// Підключаємо файли ігор (впевнись, що вони лежать у тій самій папці)
#include "SNAKE.h"
#include "CAR.h"
#include "TETRIS.h"
#include "ARCA.h"
// ===== MENU =====
enum MenuGame{ MENU_CAR, MENU_SNAKE, MENU_ARCA, MENU_TETRA, MENU_END };
int menuGameIndex = MENU_SNAKE;
bool isPlay = false;
bool needSetup = 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(key != 0){
isPlay = true;
needSetup = true; // Кажемо, що перед грою треба запустити її setup
gb.testMatrix(1);
return;
}
menuGameIndex=constrain(menuGameIndex,0,MENU_END-1);
}
// ===== MENU END =====
void setup(){
gb.begin(0);
}
bool stillPlaying = false;
void loop(){
// Якщо не в грі - малюємо меню
if(not isPlay){
loopMenu();
return;
}
// Якщо гру тільки обрали - запускаємо її стартові налаштування
if(needSetup) {
switch(menuGameIndex) {
case MENU_SNAKE: setupSnake(); break;
case MENU_CAR: setupCar(); break;
case MENU_ARCA: setupArca(); break;
case MENU_TETRA: setupTetris(); break;
}
needSetup = false;
}
// цикл перемикання гри гри яка зараз запущено // <----------------------------
// <----------------------------
if(!stillPlaying) {
isPlay = false; // Повертаємось у меню
}
}