#include "GameBoy.h"
GameBoy gb;
int score=0;
// ===== CAR begin =====
// спрайт машинки 4x3
int carSprite[4][3]={
{0,1,0},
{1,1,1},
{0,1,0},
{1,0,1}
};
// позиції
int carPlayerX,carPlayerY;
int carEnemyX,carEnemyY;
// малювання машинки
void drawCar(int x,int y,bool enemy){
for(int c=0;c<=2;c++)
for(int r=0;r<=3;r++)
if(enemy) gb.setLed(x+c,y+r,carSprite[3-r][c]); // перевернута
else gb.setLed(x+c,y+r,carSprite[r][c]); // звичайна
}
void drawPlayer(){ drawCar(carPlayerX,carPlayerY,0); }
void drawEnemy(){ drawCar(carEnemyX ,carEnemyY ,1); }
// бокові лінії дороги
void drawRoad(){
int blink=millis()%2;
for(int row=0;row<16;row++)
gb.setLed(0,row,row%2==blink),
gb.setLed(7,row,row%2==blink);
}
void setupCar(){
carEnemyX=1; carEnemyY=0; // ворог
carPlayerX=4; carPlayerY=12; // гравець
score=0;
}
bool loopCar(){
gb.clearDisplay();
drawRoad();
drawPlayer();
drawEnemy();
carEnemyY++; // рух ворога вниз
// якщо ворог доїхав донизу
if(carEnemyY>=15){
carEnemyY=0;
carEnemyX=random(2)?4:1;
score++;
}
// перевірка зіткнення
if(carEnemyX==carPlayerX &&
carEnemyY+3>=carPlayerY &&
carEnemyY<=carPlayerY+3){
gb.sound(1);
delay(1000);
return false;
}
// керування
int key=gb.getKey();
if(key==5) carPlayerX=4; // вправо
if(key==4) carPlayerX=1; // вліво
if(key==3 && carPlayerY>0) carPlayerY--;
if(key==6 && carPlayerY<12) carPlayerY++;
delay(80); // швидкість
return true;
}
// ===== CAR end =====
void setup(){ gb.begin(0); setupCar(); }
void loop(){ if(!loopCar()) setupCar(); }