Наверное. Но в вопрос не в решении - перекладывай шарики и само решится как сказала мне супруга 
…Графика состоит из фоновой картинки 320Х240 и 14 мелких 25Х25:
Модель - двухмерный массив 6Х5 (5 строк, 6 столбцов) на 30 элементов с значениями 0-6.
Собственно в этих пределах и планируются полёты шариков между колбами.
скетч-проба графики на 2 функции:
//игра колбы и шарики
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>
#include "ris_.h"//файл хранения массивов фотокартинок
#define TFT_CS 17
#define TFT_DC 20
//#define TFT_RST -1 // Пин подключения вывода RESET (ПРИ -1 СОЕДИНЯЕМ С +3,3В)
//#define TFT_MISO 16 // Пин подключения вывода дисплея SDO(MISO)
//#define TFT_MOSI 19 // Пин подключения вывода дисплея SDI(MOSI)
//#define TFT_CLK 18 // Пин подключения вывода дисплея SCK
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);//
const struct {
const unsigned char *bitmap;
}
schar_kolba[]={ris_00,ris_01,ris_02,ris_03,ris_04,ris_05,ris_06};// картинки шариков на фоне колбы
const struct {
const unsigned char *bitmap;
}
schar_fon[]={ris_000,ris_001,ris_002,ris_003,ris_004,ris_005,ris_006};// картинки шариков на фоне игрового поля
byte massiv_model[5][6]={ {0,2,0,4,0,6},//массив-модель игрового поля
{1,0,3,0,5,0},
{1,2,3,4,5,6},
{1,2,3,4,5,6},
{1,2,3,4,5,6},
};
void setup() {
//Serial.begin(9600);
tft.begin();
tft.setRotation(3);
// tft.fillScreen(tft.color565(0,0,0));
drawFoto(0,0,fon_,320,240);//фоновая картинка игрового поля
ris_model();//отрисовка массива-модели
}
void loop() {
}
/////////////////////////////////////////////////////////////////
void drawFoto(int x,int y, const uint8_t *bitmap,int w,int h) {//функция вывода фотокартинки
if(x<0||x+w>320||y<0||y+h>240){return;}
// tft.setAddrWindow(x,y,w,h);
SPI.beginTransaction(SPISettings(40000000, MSBFIRST, SPI_MODE0));
digitalWrite(TFT_DC, HIGH);
digitalWrite(TFT_CS, LOW);
tft.setAddrWindow(x,y,w,h);
for(int j=0; j<h; j++) {
for(int i=0; i<2*w; i=i+2) {
SPI.transfer(bitmap[i+1+j*2*w]);SPI.transfer(bitmap[i+j*2*w]);
// SPI.transfer(pgm_read_byte(bitmap+i+1+j*2*w));SPI.transfer(pgm_read_byte(bitmap+i+j*2*w));
}
}
digitalWrite(TFT_CS, HIGH);
SPI.endTransaction();
///
}
//////////////////////////////////////////////////////////
void ris_scharik(int stroka,int stolbez){// функция отрисовки шарика или пусто-места на игровом поле по его положению в массиве-модели
if(stroka==0){drawFoto(22+stolbez*50,30,schar_fon[massiv_model[stroka][stolbez]].bitmap,25,25);}//
else {drawFoto(22+stolbez*50,45+stroka*25,schar_kolba[massiv_model[stroka][stolbez]].bitmap,25,25);}
}
//////////////////////////////////////////////////////////
void ris_model(){// функция отрисовки всей модели-массива
for(int i=0;i<5;i++){
for(int j=0;j<6;j++){
ris_scharik(i,j);
}
}
}
//////////////////////////////////////////////////////////
Первая функция-задача перемешивание шаров по колбам, т.е. формирование исходного массива-задания.
… где то вычитал умное словосочетание по этой игре - обратная генерация.