#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "sprites.h"
#define TFT_DC 7
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
void drawOneSprite(int x, int y, uint16_t* spr, int width, int height) {
int length=width*height;
tft.startWrite();
tft.setAddrWindow(x,y,width,height);
for (int n=0; n<length; n++) {
tft.SPI_WRITE16( pgm_read_word( &spr[n] ) );
}
tft.endWrite();
}
void clearOneSprite(int x, int y, int width, int height, unsigned int fon) {
int length=width*height;
tft.startWrite();
tft.setAddrWindow(x,y,width,height);
for (int n=0; n<length; n++) {
tft.SPI_WRITE16( fon );
}
tft.endWrite();
}
void setup() {
tft.begin();
tft.setTextColor( ILI9341_RED ) ;
tft.setRotation(1);
}
void initMas(){
// обнулити всі спрайти
for(int i=0; i<CNT_MAS; i++) {
mas[i].x = 0;
mas[i].y = 0;
mas[i].w = 0;
mas[i].h = 0;
mas[i].type = NOT_USE;
}
// ship
mas[0].x = 150;
mas[0].y = SCREEN_HEIGHT - SHIP_H - 1;
mas[0].w = SHIP_W;
mas[0].h = SHIP_H;
mas[0].type = SHIP;
for (int i=1; i<11; i++){
// invader
mas[i].x = random(300);
mas[i].y = random(200);
mas[i].w = INVADER_W;
mas[i].h = INVADER_H;
mas[i].type = INVADER;
}
invaderSpeed = 3;
}
void moveInvader( int idx ){ // перемістити прибульця
if ( invaderSpeed > 0 ) {
if ( mas[idx].x < SCREEN_WIDTH - 1 - mas[idx].w - invaderSpeed ) {
//
}
else invaderSpeed = -invaderSpeed;
}
else {
if ( mas[idx].x > -invaderSpeed ) {
//
}
else invaderSpeed = -invaderSpeed;
}
mas[ idx ].x += invaderSpeed;
}
void loop() {
initMas();
while (true) {
for(int i=0; i<CNT_MAS; i++) {
// чи існує поточний спрайт
if ( mas[i].type == NOT_USE ) continue;
// стерти по старому місцю
clearOneSprite(mas[i].x ,mas[i].y, mas[i].w, mas[i].h, F );
switch ( mas[i].type ){
case SHIP:
// перемістити в нове місце
// відмалювати
drawOneSprite(mas[i].x ,mas[i].y, ship, mas[i].w, mas[i].h);
break;
case INVADER:
// перемістити в нове місце
moveInvader(i);
// відмалювати
drawOneSprite(mas[i].x ,mas[i].y, invader, mas[i].w, mas[i].h);
break;
}
}
}
}