Как сократить код
- Войдите на сайт для отправки комментариев
Пнд, 09/07/2018 - 22:22
Раньше код нормально влизал но теперь по непонятным причинам теперь пишет: Скетч использует 32066 байт (104%) памяти устройства. Всего доступно 30720 байт.Глобальные переменные используют 1503 байт (73%) динамической памяти, оставляя 545 байт для локальных переменных. Максимум: 2048 байт.
Скетч слишком большой; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size
Ошибка компиляции для платы Arduino Nano.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
const int button1Pin = 6;//ЛИСТАТЬ ПРЫЖОК
const int button2Pin = 4; // ВЫБОР. МИНЮ
const int button3Pin = 7; //ESC
const int sound = 12;
int button1State = 0;
int button2State = 0;
int button3State = 0;
// 'ЛИСТОК', 128x64px
const unsigned char title1 [] PROGMEM = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x6f,0x90,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x30,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x20,0x48,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x7e,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x01,0xa0,0x81,0xf6,0x10,0x00,0xe8,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x03,0xd0,0x07,0x10,0xf3,0x01,0x88,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x3f,0xc7,0x29,0xbc,0x86,0x20,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0xf4,0xa8,0x50,0x81,0x80,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x10,0x46,0x3f,0xe6,0x40,0x18,0x40,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x40,0x08,0x8f,0xff,0xd0,0x40,0x20,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0xc0,0xf5,0xc0,0x00,0x20,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x71,0xd0,0x80,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x38,0x07,0xc0,0x00,0x10,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x1c,0x2f,0xfe,0x00,0x10,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x01,0x30,0xa7,0xe0,0x2f,0xc1,0x08,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x40,0x40,0x20,0x7c,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x80,0xc0,0x20,0x06,0x3c,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x80,0x80,0x20,0x01,0xc0,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x20,0x10,0x30,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0x0e,0xa0,0x10,0x1c,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x1c,0x80,0x00,0x1e,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x84,0x38,0x40,0x00,0x14,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x10,0x50,0x40,0x90,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x0b,0xe0,0x50,0x23,0xc0,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xdc,0x60,0x1f,0xfe,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xc8,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x88,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x03,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x06,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x87,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x39,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x11,0x28,0x80,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x21,0x20,0x80,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x51,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x20,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
// 'MINTY BOARD', 128x64px
const unsigned char title2 [] PROGMEM = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x01,0xe0,0xf8,0x70,0x00,0x02,0x00,0x00,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x70
,0x01,0xf0,0xf8,0x70,0x00,0x06,0x00,0x00,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x70
,0x01,0xf0,0xf8,0x00,0x00,0x0e,0x00,0x00,0xe0,0xe0,0x00,0x00,0x00,0x00,0x00,0x70
,0x01,0xf0,0xf8,0x00,0x00,0x0e,0x00,0x00,0xe0,0x70,0x00,0x00,0x00,0x00,0x00,0x70
,0x01,0xb1,0xf8,0x71,0x9f,0x1f,0xb8,0x38,0xe0,0x60,0x7e,0x03,0xf8,0x7f,0x1f,0x70
,0x01,0xb9,0xf8,0x71,0xff,0x1f,0x9c,0x38,0xe0,0xe0,0xff,0x87,0xf8,0x7e,0x3f,0xf0
,0x01,0xb9,0xb8,0x71,0xc3,0x8e,0x1c,0x70,0xff,0xc1,0xe3,0x8e,0x1c,0x78,0x70,0xf0
,0x01,0xb9,0xb8,0x71,0xc3,0x8e,0x1c,0x70,0xff,0xe1,0xc1,0xc0,0x1c,0x70,0x70,0xf0
,0x01,0x9b,0xb8,0x71,0xc3,0x8e,0x0e,0x70,0xe0,0xf1,0xc1,0xc0,0xfc,0x70,0x70,0x70
,0x01,0x9f,0xb8,0x71,0xc3,0x8e,0x0e,0x60,0xe0,0x71,0xc1,0xc7,0xfc,0x70,0x70,0x70
,0x01,0x9f,0x38,0x71,0xc3,0x8e,0x06,0xe0,0xe0,0x71,0xc1,0xcf,0x1c,0x70,0x70,0x70
,0x01,0x9f,0x38,0x71,0xc3,0x8e,0x07,0xe0,0xe0,0x71,0xc1,0xce,0x1c,0x70,0x70,0xf0
,0x01,0x8f,0x38,0x71,0xc3,0x8e,0x07,0xc0,0xff,0xf1,0xe3,0x8e,0x3c,0x70,0x79,0xf0
,0x01,0x8f,0x38,0x71,0xc3,0x87,0x83,0xc0,0xff,0xe0,0xff,0x0f,0xfc,0x70,0x3f,0xf0
,0x01,0x8e,0x38,0x71,0xc3,0x87,0x83,0x80,0xff,0xc0,0x3e,0x07,0xdc,0x70,0x1f,0x70
,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
// splash 48x26
const unsigned char splash1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x39, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x39, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
0x00, 0x00, 0x00, 0x00, 0x07, 0xb9, 0xce, 0x78, 0x0f, 0xc0, 0x0f, 0xf9, 0xcf, 0xfc, 0x1f, 0xe0,
0x1f, 0xf9, 0xcf, 0xfe, 0x3f, 0xf0, 0x3c, 0x79, 0xcf, 0x1e, 0x38, 0x78, 0x38, 0x39, 0xce, 0x0e,
0x70, 0x38, 0x38, 0x39, 0xce, 0x0e, 0x70, 0x38, 0x38, 0x39, 0xce, 0x0e, 0x70, 0x38, 0x38, 0x39,
0xce, 0x0e, 0x70, 0x38, 0x38, 0x39, 0xce, 0x0e, 0x70, 0x38, 0x3c, 0x79, 0xce, 0x0e, 0x78, 0x70,
0x1f, 0xf9, 0xce, 0x0e, 0x3f, 0xf0, 0x0f, 0xf9, 0xce, 0x0e, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x10, 0x25, 0x37, 0x53, 0x90, 0xe1, 0xb8, 0x29, 0x22,
0x51, 0xd0, 0x93, 0x90, 0x19, 0x22, 0x52, 0x50, 0x92, 0x10, 0x11, 0x23, 0x73, 0xd0, 0xf1, 0x98,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
//splash dino 80x40
const unsigned char splash2 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0xe1, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x3e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5e, 0xc1, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x80, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x07, 0xf4,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xe0, 0x1f, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xaa, 0xbc, 0x7f, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x55, 0x5f, 0xff, 0xa0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xea, 0xaa, 0xaf, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x03, 0xd5, 0x55, 0xff,
0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xab, 0xae, 0xbf, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x5f, 0xdf, 0xff, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xee, 0xfb, 0x6f, 0xf4, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf7,
0xff, 0xff, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x00, 0x00, 0x00,
0x00, 0x1f, 0xff, 0xff, 0xff, 0xfd, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xfe, 0xfe,
0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xef, 0xef, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff,
0x9f, 0xdf, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x1f, 0xa1, 0xfc, 0x7f, 0x80, 0x00,
0x0f, 0xff, 0xff, 0xe0, 0x1f, 0xb0, 0x03, 0xbf, 0x80, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x0f, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
// front grass 32x10
const unsigned char grass_front [] PROGMEM = {
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x08, 0x89, 0xc0, 0x48, 0x5c, 0x50, 0x84,
0x9c, 0x48, 0x50, 0x22, 0x88, 0x80, 0x44, 0x22, 0x40, 0x84, 0x2e, 0x21, 0x49, 0x24, 0xa4, 0xb1,
};
//grass 2 (dino walking on) 4x8
const unsigned char grass [] PROGMEM = {
0xff, 0xee, 0xbb, 0x55, 0xaa, 0x11,
};
//trees
const unsigned char trees [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x05, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x15, 0x00,
0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x40, 0x00, 0x55, 0x40, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x15, 0x04, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0xa0, 0x00, 0x00, 0x01, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x28, 0x84, 0x24, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x82, 0x00,
0x00, 0x01, 0x10, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00,
0x41, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x88, 0x82, 0x40, 0x91, 0x04, 0x24,
0x41, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x44, 0x44, 0x11, 0x04, 0x10, 0x11, 0x04, 0x01, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x10, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x20, 0x00, 0x01, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
};
const unsigned char mountains [] PROGMEM = {
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e,
0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
0x03, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x07, 0x74, 0x07, 0x80, 0x10, 0x00, 0x00, 0x80, 0x00, 0x06, 0x80, 0x00, 0x00, 0x00, 0x00, 0xd5,
0x0e, 0xc2, 0x0d, 0xc0, 0x28, 0x01, 0x01, 0xc1, 0x00, 0x1f, 0x40, 0x00, 0x00, 0x00, 0x01, 0x28,
0x1d, 0x13, 0x1b, 0x60, 0x54, 0x03, 0x83, 0xa3, 0x80, 0x36, 0x20, 0x00, 0x00, 0x00, 0x06, 0xd0,
0x3a, 0x41, 0xb4, 0x30, 0xe2, 0xcc, 0xf7, 0x57, 0xc0, 0xd8, 0x10, 0x00, 0x00, 0x00, 0x19, 0x20,
0x68, 0x84, 0x49, 0x19, 0xa1, 0x36, 0x5d, 0x2a, 0xa1, 0xa0, 0x10, 0x00, 0x00, 0x00, 0xe6, 0x40,
0xd2, 0x10, 0xa4, 0x0c, 0x80, 0x8c, 0x1a, 0x15, 0x57, 0x40, 0x88, 0x00, 0x00, 0x1f, 0x38, 0x80,
0x49, 0x08, 0x00, 0x06, 0x02, 0xc0, 0x24, 0x18, 0x0b, 0x80, 0x05, 0x0b, 0x8c, 0xe0, 0x23, 0x00,
0xa0, 0x20, 0x00, 0x11, 0x00, 0x00, 0x48, 0x84, 0x84, 0x02, 0x20, 0x5d, 0xf3, 0x00, 0xcd, 0xc0,
0x50, 0x00, 0x04, 0x04, 0x01, 0x44, 0x00, 0x00, 0x08, 0x00, 0x00, 0x30, 0x04, 0x07, 0x10, 0x20,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x40, 0x00, 0x10,
0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x01, 0x11, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x20, 0x02,
};
const unsigned char cloud2 [] PROGMEM = {
0x04, 0x70, 0x18, 0x00, 0x6e, 0xfb, 0x7c, 0xee, 0xff, 0xff, 0xfd, 0xff, 0x6f, 0xfb, 0x38, 0xee,
0x07, 0x70, 0x52, 0x00,
};
// walking sprites
// walk right
const unsigned char dinoWalk0 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x60, 0x00,
0x00, 0x00, 0x1f, 0xf1, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x7b, 0xff,
0xfc, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x00, 0x00, 0x03, 0xff, 0x7f, 0xe0, 0x00, 0x00, 0x0f,
0xf7, 0xde, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x7a, 0x00, 0x00,
};
const unsigned char dinoWalk1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x60, 0x00,
0x00, 0x00, 0x1f, 0xf1, 0xf0, 0x00, 0x00, 0x00, 0x37, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x7f, 0xff,
0xfc, 0x00, 0x00, 0x00, 0xff, 0x7f, 0xd8, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f,
0xbf, 0xda, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00,
};
const unsigned char dinoWalk2 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x60, 0x00,
0x00, 0x00, 0x1b, 0xf1, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x7f, 0x7f,
0xfc, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f,
0xbf, 0xfa, 0x00, 0x00, 0x00, 0x7f, 0x78, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x5e, 0x00, 0x00,
};
// walk left
const unsigned char dinoWalk3 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0xe0, 0x00, 0x00,
0x00, 0x0f, 0x8f, 0xf8, 0x00, 0x00, 0x00, 0x1d, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xde,
0x00, 0x00, 0x00, 0x1b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xfe, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x7b, 0xef, 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x5e, 0x3d, 0x00, 0x00,
};
const unsigned char dinoWalk4 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0xe0, 0x00, 0x00,
0x00, 0x0f, 0x8f, 0xf8, 0x00, 0x00, 0x00, 0x1d, 0xff, 0xec, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe,
0x00, 0x00, 0x00, 0x1b, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x5b, 0xfd, 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x00,
};
const unsigned char dinoWalk5 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0xe0, 0x00, 0x00,
0x00, 0x0f, 0x8f, 0xd8, 0x00, 0x00, 0x00, 0x1d, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0xfe,
0x00, 0x00, 0x00, 0x1b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x5f, 0xfd, 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0xfe, 0x00, 0x00, 0x00, 0x7a, 0x2f, 0x00, 0x00,
};
/* --------- GAME SPRITES ---------- */
const unsigned char dinoJump [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x60, 0x00,
0x00, 0x00, 0x1f, 0xf1, 0xf0, 0x00, 0x00, 0x00, 0x3b, 0xff, 0xb8, 0x00, 0x00, 0x00, 0x7f, 0xdf,
0xfc, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f,
0xff, 0xfe, 0x00, 0x00, 0x00, 0x7d, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x07, 0x80, 0x00,
};
const unsigned char obstacle1 [] PROGMEM = {
0x00, 0x00, 0x1e, 0x00, 0x2f, 0x00, 0x5e, 0x80, 0x5f, 0xc0, 0xb7, 0xc0,
};
const unsigned char obstacle2 [] PROGMEM = {
0x14, 0x00, 0x08, 0x00, 0x52, 0x00, 0x34, 0x00, 0x69, 0x40, 0xf0, 0x80,
};
const unsigned char poop [] PROGMEM = {
0x80, 0x88, 0x01, 0x81, 0x02, 0xe0, 0x27, 0x10, 0x0b, 0xf0, 0x1c, 0x08,
};
#define WALKSIZE 6
//const unsigned char* const dinoWalk[WALKSIZE] PROGMEM = {
const unsigned char* dinoWalk[WALKSIZE] = {
//dinoWalk0,dinoWalk0,dinoWalk1,dinoWalk1,dinoWalk2,dinoWalk2,
//dinoWalk3,dinoWalk3,dinoWalk4,dinoWalk4,dinoWalk5,dinoWalk5
dinoWalk0,dinoWalk1,dinoWalk2,
dinoWalk3,dinoWalk4,dinoWalk5
};
int walkPos=0;
int walkXPos=0;
bool walkAnimReverse=false;
bool walkRight=false;
int walkDirOffset=2;
// EATING
const unsigned char eating1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xff, 0xff, 0xfc, 0x00,
0x00, 0x03, 0x7c, 0x7f, 0xfe, 0x00, 0x00, 0x02, 0xf9, 0xff, 0xfe, 0x00, 0x00, 0x0c, 0xf3, 0xff,
0xff, 0x00, 0x00, 0x1f, 0xf4, 0x7f, 0xff, 0x80, 0x00, 0x7f, 0xf0, 0x7f, 0xff, 0xc0, 0x00, 0xff,
0xf8, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0,
0x1f, 0xe7, 0xff, 0xe0, 0xff, 0xe0, 0x3f, 0xdf, 0xff, 0xde, 0xff, 0xf0, 0x7f, 0xbf, 0xff, 0xbf,
0x7f, 0xf0, 0x7f, 0x7f, 0xfe, 0x77, 0xbf, 0xf8, 0x7f, 0x7f, 0xf9, 0xf7, 0xbf, 0xfc, 0x3f, 0xff,
0xe7, 0xef, 0xbf, 0xfe, 0x5f, 0xfe, 0x1f, 0x1f, 0xbf, 0xff, 0x67, 0xf1, 0xf9, 0x1f, 0xbf, 0xff,
0x38, 0x0f, 0xe8, 0x3f, 0xbf, 0xff, 0x1f, 0xff, 0xe0, 0x3f, 0xbf, 0xff, 0x0e, 0xfe, 0x40, 0xbf,
0x6f, 0xff, 0x04, 0x54, 0x00, 0xff, 0x57, 0xff, 0x00, 0x10, 0x01, 0xfe, 0xab, 0xff, 0x00, 0x18,
0x01, 0xfd, 0x55, 0xff, 0x00, 0x18, 0x05, 0xfa, 0xaa, 0xff, 0x00, 0x1d, 0x27, 0xf1, 0x55, 0x5f,
0x00, 0x0f, 0x7f, 0xe0, 0xaa, 0xaf, 0x00, 0x07, 0xff, 0x80, 0x55, 0x57, 0x00, 0x03, 0xfe, 0x00,
0x2a, 0xab, 0x00, 0x01, 0xf0, 0x00, 0x15, 0x55, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xaa, 0x00, 0x00,
0x00, 0x00, 0x05, 0x55, 0x00, 0x00, 0x00, 0x00, 0x02, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55,
};
const unsigned char eating2 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xff, 0xff, 0xfc, 0x00,
0x00, 0x03, 0x7c, 0x7f, 0xfe, 0x00, 0x00, 0x02, 0xf9, 0xff, 0xfe, 0x00, 0x00, 0x0c, 0xf3, 0xff,
0xff, 0x00, 0x00, 0x1f, 0xf4, 0x7f, 0xff, 0x80, 0x00, 0x7f, 0xf0, 0x7f, 0xff, 0xc0, 0x00, 0xff,
0xf8, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0,
0x1f, 0xe7, 0xff, 0xe0, 0xff, 0xe0, 0x3f, 0xdf, 0xff, 0xde, 0xff, 0xf0, 0x7f, 0xbf, 0xff, 0xbf,
0x7f, 0xf0, 0x7f, 0x7f, 0xfe, 0x77, 0xbf, 0xf8, 0x7f, 0x7f, 0xf9, 0xf7, 0xbf, 0xfc, 0x3f, 0xff,
0xe7, 0xef, 0xbf, 0xfe, 0x5f, 0xfe, 0x1f, 0x1f, 0xbf, 0xff, 0x67, 0xf1, 0xf9, 0x1f, 0xbf, 0xff,
0x38, 0x0f, 0xe8, 0x3f, 0xbf, 0xff, 0x1f, 0xff, 0xe1, 0x7f, 0x3f, 0xff, 0x0e, 0xfe, 0x41, 0xfe,
0xef, 0xff, 0x04, 0xd4, 0x0b, 0xfd, 0x57, 0xff, 0x00, 0xd4, 0x0f, 0xfa, 0xab, 0xff, 0x00, 0x60,
0x9f, 0xf5, 0x55, 0xff, 0x00, 0x75, 0xff, 0xca, 0xaa, 0xff, 0x00, 0x3f, 0xff, 0x05, 0x55, 0x5f,
0x00, 0x1f, 0xfc, 0x02, 0xaa, 0xaf, 0x00, 0x07, 0xc0, 0x01, 0x55, 0x57, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xab, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xaa, 0x00, 0x00,
0x00, 0x00, 0x05, 0x55, 0x00, 0x00, 0x00, 0x00, 0x02, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55,
};
const unsigned char eating3 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00,
0x7f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xff, 0xff, 0xfc, 0x00,
0x00, 0x03, 0x7c, 0x7f, 0xfe, 0x00, 0x00, 0x02, 0xf9, 0xff, 0xfe, 0x00, 0x00, 0x0c, 0xf3, 0xff,
0xff, 0x00, 0x00, 0x1f, 0xf4, 0x7f, 0xff, 0x80, 0x00, 0x7f, 0xf0, 0x7f, 0xff, 0xc0, 0x00, 0xff,
0xf8, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0,
0x1f, 0xe7, 0xff, 0xe0, 0xff, 0xe0, 0x3f, 0xdf, 0xff, 0xde, 0xff, 0xf0, 0x7f, 0xbf, 0xff, 0xbf,
0x7f, 0xf0, 0x7f, 0x7f, 0xfe, 0x77, 0xbf, 0xf8, 0x7f, 0x7f, 0xf9, 0xf7, 0xbf, 0xfc, 0x3f, 0xff,
0xe7, 0xef, 0xbf, 0xfe, 0x5f, 0xfe, 0x1f, 0xdf, 0xbf, 0xff, 0x67, 0xf1, 0xff, 0x3f, 0xbf, 0xff,
0x38, 0x0f, 0xfc, 0xff, 0xbf, 0xff, 0x1f, 0xff, 0xf3, 0xff, 0x3f, 0xff, 0x0f, 0xff, 0xcf, 0xfe,
0xef, 0xff, 0x00, 0x38, 0x3f, 0xf9, 0x57, 0xff, 0x07, 0x83, 0xff, 0xea, 0xab, 0xff, 0x01, 0xff,
0xfe, 0x15, 0x55, 0xff, 0x00, 0xff, 0xf0, 0x0a, 0xaa, 0xff, 0x00, 0x3f, 0xc0, 0x05, 0x55, 0x5f,
0x00, 0x00, 0x00, 0x02, 0xaa, 0xaf, 0x00, 0x00, 0x00, 0x05, 0x55, 0x57, 0x00, 0x00, 0x00, 0x02,
0xaa, 0xab, 0x00, 0x00, 0x00, 0x01, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55,
};
const unsigned char* eating[4] = {
eating1,eating2,eating3,eating2
};
//const unsigned char apple0 [] PROGMEM = {
const unsigned char apple [] PROGMEM = {
0x00, 0x01, 0xf0, 0x00, 0x07, 0xe0, 0x00, 0x0f, 0xe0, 0x3f, 0x1f, 0xc0, 0x00, 0xdf, 0x80, 0x00,
0x20, 0x00, 0x0f, 0xd7, 0xf0, 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xfe, 0x78, 0xff, 0xfe, 0xf0, 0x7f,
0xff, 0xe0, 0x7f, 0xff, 0xe0, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x1f,
0xff, 0xf8, 0x0f, 0xff, 0xf0, 0x07, 0xc3, 0xe0,
};
const unsigned char steak [] PROGMEM = {
0x0f, 0xe0, 0x00, 0x3f, 0xf8, 0x00, 0x31, 0xfe, 0x00, 0x6e, 0x7f, 0x00, 0xd1, 0x7f, 0x80, 0xa0,
0xbf, 0x80, 0xa0, 0xbf, 0xc0, 0xa0, 0xbf, 0xc0, 0xd1, 0x3f, 0xc0, 0xae, 0xff, 0xe0, 0xd1, 0xff,
0xe0, 0xef, 0xff, 0xe0, 0x77, 0xff, 0xf0, 0x7b, 0xff, 0xd0, 0x3d, 0xff, 0x78, 0x1e, 0xf9, 0xfe,
0x0f, 0x67, 0xff, 0x07, 0x7f, 0xff, 0x03, 0x9f, 0xfc, 0x03, 0xc3, 0xf9, 0x01, 0xf8, 0xc3, 0x00,
0xff, 0x1e, 0x00, 0x1f, 0xfe, 0x00, 0x01, 0xfc,
};
//ground
int grassXPos=0;
float treesXPos=-20;
//sky
float couldsXPos=0;
const int sunRadius=3;
bool sunOrMoon = false;
const int moonShadow=2;
float sunXPos=-2*sunRadius;
//clouds
const int cloud1Width=32;
float cloud1XPos=display.width()+cloud1Width;
int stars [6][2];
// menus
bool menuOpened = false;
int menu=0;
int subMenu=1;
bool menuDepth=false;
bool justOpened=false;
#define MENUSIZE 8
#define STRING_SIZE 11
const char mainMenu[MENUSIZE][8][STRING_SIZE] PROGMEM = {
{"food","apple","steak","water",NULL},
{"game",NULL},
{"sleep",NULL},
{"clean",NULL},
{"doctor",NULL},
{"discipline",NULL},
{"stats","hunger","happiness","health","discipline","weight","age",NULL},
{"settings","sound",
//"something",
NULL
},
};
/* ------- PET STATS ------- */
float hunger=100;
float happiness=100;
float health=100;
float discipline=100;
float weight=1;
float age=0;
//settings
bool soundEnabled=true;
int action=0;
int setting=0;
bool notification = false;
int notificationBlink=0;
bool dead=false;
bool sleeping=false;
//game
bool game=false;
bool paused=false;
bool gameOver=false;
int score = 0;
int hiScore = 0;
int level=0;
bool newHiScore = false;
bool jumping=false;
bool jumpUp=true;
int jumpPos=0;
bool obstacle1show = false;
bool obstacle2show = false;
int obstacle1XPos = 0;
int obstacle2XPos = 0;
float poopometer=0;
int poops [3] = {
0,0,0,
};
#define ACTIVATED LOW
void setup() {
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
pinMode(button3Pin, INPUT_PULLUP);
digitalWrite(button1Pin, HIGH);
digitalWrite(button2Pin, HIGH);
digitalWrite(button3Pin, HIGH);
pinMode(sound, OUTPUT);
pinMode(13,OUTPUT);
randomSeed(analogRead(0));
// zastavka
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.drawBitmap(0, 0, title1 , 128, 64, WHITE);
display.display();
tone(sound,1500,5);
delay(1000);
display.clearDisplay();
display.drawBitmap(0, 0, title2 , 128, 64, WHITE);
display.display();
tone(sound,1500,5);
delay(1000);
display.clearDisplay();
// splash
display.setTextColor(WHITE);
// zastavka s dino
display.print(F(" MintyBoard game"));
display.drawBitmap(15, 24, splash1 , 48, 26, WHITE);
display.drawBitmap(48, 24, splash2 , 80, 40, WHITE);
display.display();
//splash tone
tone(sound,500,200);
delay(200);
tone(sound,1000,200);
delay(400);
tone(sound,700,200);
delay(200);
tone(sound,1100,200);
delay(2200);
// end splash
display.clearDisplay();
}
void loop() {
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
button3State = digitalRead(button3Pin);
//char* str = "";
if(!dead){
/* -------- MODIFY PET STATS -------- */
// TODO: different gradients regarding to age
if(sleeping){
hunger-=0.00005;
poopometer+=0.00005;
if(happiness-0.0001>0){
happiness-=0.0001;
}
health-=0.00005+countPoops()*0.0001;
if(discipline-0.0001>0){
discipline-=0.0001;
}
}else{
hunger-=0.00025;
poopometer+=0.00025;
if(happiness-0.0002>0){
happiness-=0.0002;
}
health-=0.0001+countPoops()*0.0001;
if(discipline-0.0002>0){
discipline-=0.0002;
}
//discipline-=0.02;
}
age+=0.0000025;
//diarrhea :) for testing
//poopometer+=0.005;
//health-=1;
//health-=countPoops()*0.0001;
//health-=countPoops()*0.05;
if(poopometer>=10){
poopometer=countPoops();
poops[round(poopometer)]=random(20,display.width()+32);
if(soundEnabled){
tone(sound,200,50);
}
poopometer=0;
}
if((hunger>19.99975 && hunger<20.00025) || (happiness>19.9998 && happiness<20.0002) || (health>19.9999 && health<20.0001) && soundEnabled){
if(soundEnabled){
tone(sound,200,50);
}
}
if(hunger<=20 || countPoops()>0 || happiness<=20 || health<=20){
notification=true;
}
if(hunger>20 && countPoops()==0 && happiness>20 && health>20){
notification=false;
digitalWrite(13,LOW);
}
if(hunger<=0 || health<=0 || happiness<=0){
dead=true;
if(soundEnabled){
tone(sound,500,500);
delay(550);
tone(sound,400,500);
delay(550);
tone(sound,300,600);
}
}
display.clearDisplay();
display.setCursor(0,0);
/* ------- BUTTON PRESS ACTIONS ------- */
/* ------- BUTTON 1 - MENU ------- */
if(button1State==ACTIVATED){
// JUMP IN GAME
if(game){
if(!jumping && !paused){
if(soundEnabled){
tone(sound,200,50);
}
jumping=true;
}
}else{
// MENU
if(soundEnabled){
tone(sound,300,80);
}
if(!menuOpened){
menuOpened=true;
}else{
if(menuDepth){
if((const char*)pgm_read_word(&(mainMenu[menu][subMenu+1]))==NULL){
subMenu=1;
}else{
++subMenu;
}
setting=100*(menu+1)+subMenu;
}else{
if(menu==MENUSIZE-1){
menu=0;
}else{
++menu;
}
if((const char*)pgm_read_word(&(mainMenu[menu][1]))!=NULL){
subMenu=1;
justOpened=true;
}
setting=100*(menu+1)+subMenu;
}
}
delay(60);
}
}
/* ------- BUTTON 2 - SELECT ------- */
if(button2State==ACTIVATED){
if(game){
if(!gameOver){
paused=!paused;
if(soundEnabled){
tone(sound,600,80);
}
delay(60);
}
}else{
if(soundEnabled){
tone(sound,600,80);
}
if(menuOpened){
if(subMenu!=1 && (const char*)pgm_read_word(&(mainMenu[menu][1][0]))!=NULL){
action=100*(menu+1)+subMenu;
}
if(subMenu==1 && (const char*)pgm_read_word(&(mainMenu[menu][1][0]))==NULL){
action=100*(menu+1)+subMenu;
}
if(subMenu==1 && (const char*)pgm_read_word(&(mainMenu[menu][1][0]))!=NULL && menuDepth){
action=100*(menu+1)+subMenu;
}
if((const char*)pgm_read_word(&(mainMenu[menu][1][0]))!=NULL){
setting=100*(menu+1)+subMenu;
menuDepth=true;
}
}else{
action=NULL;
menuOpened=true;
menuDepth=true;
subMenu=1;
menu=6;
action=701;
setting=701;
}
justOpened=false;
delay(60);
}
}
/* ------- BUTTON 3 - BACK ------- */
if(button3State==ACTIVATED){
if(soundEnabled){
tone(sound,1000,80);
}
if(game || gameOver){
walkPos=0;
walkXPos=0;
walkAnimReverse=false;
walkRight=true;
walkDirOffset=0;
treesXPos=-20;
grassXPos=0;
obstacle1show=false;
obstacle2show=false;
jumping=false;
jumpPos=0;
jumpUp=true;
game=false;
score=0;
newHiScore=false;
gameOver=false;
level=0;
paused=false;
}else{
if(!menuDepth){
menuOpened=false;
menu=0;
setting=0;
}else{
menuDepth=false;
setting=100*(menu+1)+1;
}
action=NULL;
subMenu=1;
}
delay(60);
}
/* ------- SCENERY AND WALKING ------- */
//draw sun
sunXPos+=0.1;
if(sunXPos>display.width()+2*sunRadius){
sunXPos=-2*sunRadius;
sunOrMoon=!sunOrMoon;
}
if(sleeping) {sunOrMoon=true;}
if(sleeping){
sunOrMoon=true;
}
if(!sunOrMoon){
display.fillCircle(sunXPos,2*sunRadius,sunRadius,WHITE);
}else{
display.fillCircle(sunXPos,2*sunRadius,sunRadius,WHITE);
display.fillCircle(sunXPos-moonShadow,2*sunRadius,sunRadius,BLACK);
//if(walkPos == 5){
if(round(cloud1XPos) % 5 == 0){
for(int i=0;i<6;i++){
stars[i][0]=random(0,display.width());
stars[i][1]=random(0,10);
}
}else{
for(int i=0;i<6;i++){
display.drawPixel(stars[i][0],stars[i][1],WHITE);
}
}
}
//cloud 1
cloud1XPos-=0.3;
if(cloud1XPos<-cloud1Width){
cloud1XPos=display.width()+cloud1Width;
}
display.drawBitmap(cloud1XPos, 5, cloud2 , cloud1Width, 5, WHITE);
//mountains
display.drawBitmap(0, 7, mountains , 128, 16, WHITE);
//walk and move ground perspective
if(game){
/* ------ GAME -----*/
level=round(score/10);
if(jumping && !gameOver && !paused){
if(jumpUp){
jumpPos=jumpPos+1+level;
if(jumpPos>=12){
jumpUp=false;
}
}else{
//jumpPos--;
jumpPos=jumpPos-1-level;
if(jumpPos<=0){
jumpUp=true;
jumping=false;
if(soundEnabled){
tone(sound,100,50);
}
score+=1;
}
}
}
if(!gameOver && !paused){
if(walkAnimReverse){
walkPos-=1;
if(walkPos==-1){walkPos=0; walkAnimReverse=false;}
}else{
walkPos+=1;
if(walkPos==3){walkPos=2; walkAnimReverse=true;}
}
walkXPos+=2;
grassXPos+=4;
treesXPos=treesXPos+1+level;
obstacle1XPos=obstacle1XPos+2+level;
obstacle2XPos=obstacle2XPos+2+level;
if(!jumping &&
(
(obstacle1show && display.width()-obstacle1XPos>=20 && display.width()-obstacle1XPos<=46)
||
(obstacle2show && display.width()-obstacle2XPos>=20 && display.width()-obstacle2XPos<=46)
)
){
gameOver=true;
jumping=true;
jumpPos=-2;
if(soundEnabled){
tone(sound,500,40);
delay(50);
tone(sound,350,40);
delay(50);
tone(sound,200,60);
}
if(score>hiScore){
hiScore=score;
newHiScore=true;
}
if(happiness+15<100){
happiness+=15;
}else{
happiness=100;
}
health-=1;
if(weight-score*0.0025>5){
weight-=score*0.0025;
}
}
}
if(walkXPos==display.width()){
walkXPos=0;
}
if(grassXPos==display.width()){grassXPos=0;}
if(treesXPos==display.width()){treesXPos=-128;}
if(jumping){
display.drawBitmap(10, 26-jumpPos, dinoJump , 48, 24, WHITE);
}else{
display.drawBitmap(10, 26, dinoWalk[walkPos] , 48, 24, WHITE);
}
for(int i=0;i<display.width()/4+1;i++){
display.drawBitmap(-walkXPos+i*8, 50, grass , 8, 6, WHITE);
}
// obstacles 1
if(obstacle1XPos-16>=display.width()){
obstacle1XPos=0;
obstacle1show=false;
}
if(!obstacle1show && random(1,10)==1 && obstacle2XPos > 40){
obstacle1show = true;
obstacle1XPos=0;
}
if(obstacle1show){
display.drawBitmap(display.width()-obstacle1XPos, 44, obstacle1 , 16, 6, WHITE);
}
// obstacles 2
if(obstacle2XPos-16>=display.width()){
obstacle2XPos=0;
obstacle2show=false;
}
if(!obstacle2show && random(1,10)==1 && obstacle1XPos > 40){
obstacle2show = true;
obstacle2XPos=0;
}
if(obstacle2show){
display.drawBitmap(display.width()-obstacle2XPos, 44, obstacle2 , 16, 6, WHITE);
}
//draw front grass
for(int i=0;i<display.width()/16+1;i++){
display.drawBitmap(-grassXPos+i*32, 60, grass_front , 32, 8, WHITE);
}
//draw trees
display.drawBitmap(-treesXPos, 23, trees , 112, 20, WHITE);
if(!gameOver){
display.setCursor(0,56);
display.setTextColor(WHITE);
display.print(F("lvl: "));
display.print(level);
display.setCursor(64,56);
display.setTextColor(WHITE);
display.print(F("pts: "));
display.print(score);
}
if(paused && round(cloud1XPos)%2==0){
display.fillRect(24,11,80,15,BLACK);
display.fillRect(25,12,78,13,WHITE);
display.setCursor(47,15);
display.setTextColor(BLACK);
display.println(F("PAUSED"));
}
/* ---------- END GAME ----------*/
}else{
/* ------ NO GAME -----*/
if(!sleeping){
display.drawBitmap(walkXPos, 26, dinoWalk[walkPos+walkDirOffset] , 48, 24, WHITE);
}else{
display.drawBitmap(walkXPos, 29, dinoWalk[walkPos+walkDirOffset] , 48, 24, WHITE);
if(walkRight){
if(round(cloud1XPos) % 3 ==0){
display.setCursor(walkXPos+48,36);
display.print(F("Z"));
}else{
display.setCursor(walkXPos+46,38);
display.print(F("z"));
}
}else{
if(round(cloud1XPos) % 3 ==0){
display.setCursor(walkXPos-4,36);
display.print(F("Z"));
}else{
display.setCursor(walkXPos-2,38);
display.print(F("z"));
}
}
}
if(walkRight){
if(!sleeping){
walkXPos+=1;
grassXPos+=2;
treesXPos+=0.5;
}
if(walkXPos>80){walkRight=false; walkDirOffset=3;}
}else{
if(!sleeping){
walkXPos-=1;
grassXPos-=2;
treesXPos-=0.5;
}
if(walkXPos<0){walkRight=true; walkDirOffset=0;}
}
//draw grass (ground)
for(int i=0;i<2*display.width()/4;i++){
display.drawBitmap(-walkXPos+i*8, 50, grass , 8, 6, WHITE);
}
// draw poops
for(int i=0; i<3; i++){
if(poops[i]>0){
display.drawBitmap(-walkXPos+poops[i], 44, poop , 16, 6, WHITE);
}
}
//draw front grass
for(int i=0;i<2*display.width()/16;i++){
display.drawBitmap(-grassXPos+i*32, 56, grass_front , 32, 8, WHITE);
}
//draw trees
display.drawBitmap(-treesXPos, 23, trees , 112, 20, WHITE);
if(!sleeping){
if(walkAnimReverse){
--walkPos;
if(walkPos==-1){walkPos=0; walkAnimReverse=false;}
}else{
++walkPos;
if(walkPos==3){walkPos=2; walkAnimReverse=true;}
}
}
}
/* ------- MENUS AND ACTIONS ------- */
//render menu
if(menuOpened and !game){
display.fillRect(0,0,display.width(),30,BLACK);
display.drawRect(0,0,display.width(),29,WHITE);
display.fillRect(1,1,display.width()-2,27,BLACK);
display.drawRect(0,0,display.width(),12,WHITE);
display.setCursor(8,2);
display.setTextSize(1);
if(menuDepth){
display.fillRect(0,0,display.width(),12,WHITE);
display.fillRect(1,18,1,5,WHITE);
display.fillRect(2,19,1,3,WHITE);
display.fillRect(3,20,1,1,WHITE);
display.setTextColor(BLACK,WHITE);
}else{
display.fillRect(1,3,1,5,WHITE);
display.fillRect(2,4,1,3,WHITE);
display.fillRect(3,5,1,1,WHITE);
display.setTextColor(WHITE);
}
char oneItem [STRING_SIZE];
memcpy_P (&oneItem, &mainMenu[menu][0], sizeof oneItem);
//display.println(getItem(menu,0));
display.println(oneItem);
if(subMenu){
display.setTextColor(WHITE);
display.setCursor(8,16);
char subItem [STRING_SIZE];
memcpy_P (&subItem, &mainMenu[menu][subMenu], sizeof subItem);
//display.println(getItem(menu,subMenu));
display.println(subItem);
}
}
//do actions
if(action>0){
if((action==101 || action==102 || action==103) && !sleeping && random(1,(11-round(discipline/10)))==1 ){
//95-100 discipline = 100% chance to feed
//85-95 discipline = 50% chance
//75-85 discipline = 33.33% chance
//65-75 discipline = 25% chance
//55-65 discipline = 20% chance
//45-55 discipline = 16.67% chance
//35-45 discipline = 14.28% chance
//25-35 discipline = 12.5% chance
//15-25 discipline = 12.5% chance
//5-15 discipline = 10% chance
//0-5 discipline = 9% chance
//animate eating
display.fillRect(0,0,display.width(),display.height(),BLACK);
for(int j=0;j<3;j++){
for(int i=0; i<4; i++){
display.clearDisplay();
switch(action){
case 101:
//apple
display.drawBitmap(50,40,apple,24,24,WHITE);
if(j>0) display.fillCircle(76,54,12,BLACK);
if(j==2) display.fillCircle(47,55,12,BLACK);
break;
case 102:
//steak
display.drawBitmap(50,40,steak,24,24,WHITE);
if(j>0) display.fillCircle(76,59,13,BLACK);
if(j==2) display.fillCircle(60,63,13,BLACK);
break;
case 103:
//water ripples
display.drawCircle(80,55,1+1*i,WHITE);
display.drawCircle(80,55,5+2*i,WHITE);
display.drawCircle(80,55,10+4*i,WHITE);
break;
}
display.drawBitmap(80,24,eating[i],48,40,WHITE);
delay(150);
display.display();
}
}
switch(action){
//apple
case 101:
if(hunger+10>100){
hunger=100;
weight+=0.1;
}else{
hunger+=10;
}
if(health+1<=100){
health+=1;
}
poopometer+=0.02;
break;
//steak
case 102:
if(hunger+20>100){
hunger=100;
weight+=0.2;
}else{
hunger+=20;
weight+=0.1;
}
if(health-1>0){
health-=1;
}
poopometer+=0.05;
break;
//water
case 103:
if(hunger+5<=100){
hunger+=5;
}
poopometer+=0.01;
break;
}
}else{
if(action==101 || action==102 || action==103){
if(soundEnabled){
tone(sound,500,200);
delay(250);
}
}
}
switch(action){
case 201:
//game
if(!sleeping && health>20){
game=true;
walkPos=0;
walkXPos=0;
walkAnimReverse=false;
walkRight=false;
walkDirOffset=2;
treesXPos=-20;
grassXPos=0;
}
break;
case 301:
//sleep
sleeping=!sleeping;
if(!sleeping) {sunOrMoon=false;}else{
for(int i=0;i<6;i++){
stars[i][0]=random(0,display.width());
stars[i][1]=random(0,10);
}
}
break;
case 401:
//bath
resetPoops();
break;
case 501:
//doctor
if(health<60){
health=100;
for(int i=0;i<5;i++){
display.clearDisplay();
if(i%2!=0){
display.fillRect(32,23,64,16,WHITE);
display.fillRect(56,0,16,64,WHITE);
}
display.display();
delay(300);
}
}
break;
case 601:
//discipline
if(action==601 && !sleeping){
if(discipline+12<=100){
discipline+=12;
}else{
discipline=100;
}
if(happiness-3>0){
happiness-=3;
}
delay(150);
for(int i=0;i<5;i++){
if(soundEnabled){
tone(sound,200*i,100);
}
display.setCursor(100+3*i,32);
display.print(F("!"));
display.display();
delay(150);
}
}
break;
case 801:
soundEnabled=!soundEnabled;
break;
}
action=0;
}
//display settings
if(setting>0 and !game){
display.setCursor(8,16);
if(setting==201){
display.println(F("increase happiness"));
}
if(setting==301){
display.println(F("get some rest"));
}
if(setting==401){
display.println(F("keep it healthy"));
}
if(setting==501){
display.println(F("when health is bad"));
}
if(setting==601){
display.println(F("get smarter"));
}
if(setting==701 || setting==702 || setting==703 || setting==704){
display.drawRect(70,17,52,7,WHITE);
}
if(setting==701){
drawBar(hunger);
}
if(setting==702){
drawBar(happiness);
}
if(setting==703){
drawBar(health);
}
if(setting==704){
drawBar(discipline);
}
if(setting==705 || setting==706 || setting==801){
display.setCursor(80,16);
}
if(setting==705){
//display.setCursor(80,16);
display.print(weight,1);
display.println(F(" t"));
}
if(setting==706){
display.print(age,1);
display.println(F(" y."));
}
if(setting==801){
if(soundEnabled){
display.println(F("on"));
}else{
display.println(F("off"));
}
}
}
//display notification
if(notification){
++notificationBlink;
if(notificationBlink==10){
notificationBlink=0;
}
if(notificationBlink!=1){
display.drawRect(117,28,11,11,WHITE);
display.setTextColor(WHITE);
digitalWrite(13,LOW);
}else{
display.fillRect(117,28,11,11,WHITE);
display.setTextColor(BLACK);
digitalWrite(13,HIGH);
}
display.setCursor(120,30);
display.println(F("!"));
if(dead){
digitalWrite(13,LOW);
}
}
// GAME OVER
if(gameOver){
display.fillRect(15,11,98,43,BLACK);
display.drawRect(16,12,96,41,WHITE);
display.fillRect(16,12,96,13,WHITE);
display.setCursor(36,15);
display.setTextColor(BLACK);
display.println(F("GAME OVER"));
display.setTextColor(WHITE);
display.setCursor(21,29);
if(newHiScore){
display.println(F("NEW HI-SCORE!"));
display.setCursor(21,40);
}else{
display.println(F("SCORE:"));
display.setCursor(21,40);
}
display.println(score);
}
display.display();
}else{
//dead...
display.clearDisplay();
display.setCursor(0,0);
display.setTextColor(WHITE);
display.println(F("Pet died...\n\nPress button 1\nto restart"));
display.display();
if(button1State==HIGH){
if(soundEnabled){
tone(sound,300,80);
delay(200);
}
noTone(sound);
asm volatile (" jmp 0");
}
}
}
void drawBar(float value){
display.fillRect(72,19,48*value/100,3,WHITE);
}
char* getItem(int menu, int index){
char oneItem [STRING_SIZE];
memcpy_P (&oneItem, &mainMenu[menu][index], sizeof oneItem);
return oneItem;
}
int countPoops(){
int poopsCnt = 0;
for(int i=0; i<3; i++){
if(poops[i]>0){
++poopsCnt;
}
}
return poopsCnt;
}
void resetPoops(){
for(int i=0; i<3; i++){
poops[i]=0;
}
}
Если что мне надо его впихнуть на ардуино нано
Не подключена библиотека PROGMEM
Никогда с этим не сталкивался можите обяснить по подробнее.
А можно избежать применения столь дорогостоящей переменной как float?
Судя по алгоритму вполне можно обойтись 8-ми битной переменной.
Да и int жрет 2 байта. Также можно заменить на uint8_t.
Это сэкономит существенное количество и тактов и флэш-памяти. От отрицательных значений переменных тоже вполне можно отказаться. Достаточно сместить переменные вправо.
Чтобы сократить - надо переписать.
Если это не вариант, попробуйте подобрать версию IDE в которой влезет. Может и повезёт.
Например, моя 1.8.5 для Nano не влазит совсем чуток
А для UNO так и вовсе влазит
Записать в контроллер hex без bootloader. Ну или заменить bootloader в проминьке на омнибут. Экономия в первом случае 2к, во втором 1,5к.
uint8_t помогло
но я никогда не столкивался с такой командой не будут ли последствия ее использования
uint8_t помогло
но я никогда не столкивался с такой командой не будут ли последствия ее использования
Это не команда. Это тип переменной или константы с явным указанием размерности в битах. Для наглядности лучше всего подходит именно такое указание типа переменной.
не будут ли последствия ее использования
Конечно будут! Миллис переполнится, биты в байте поменяют порядок, а на пине 3 появится аналоговый сигнал мелодии "Даром преподаватели время со мною тратили".
Чтобы сократить - надо переписать.
Если это не вариант, попробуйте подобрать версию IDE в которой влезет. Может и повезёт.
....
Тут дело не столько в IDE сколько в bootloader. В proMini загрузчик большой, около 2к. В UNO около 0.5 к. Хотя при желании можно заменить загрузчик в проминьке на уновский. Но если до этого дело дошло, так лучше вообще записывать HEX без загрузчика. Тогда без разницы промини или Уно. Процессор один и тоже. Только записывать скетч уже придётся не через усб - уарт переходник. Программатором типа usbasp или подобным.
Хотя " переписать " более спортивно!
Код безусловно безобразен и переписать - это правильно. Перед этим осмыслить философскую роль функций в программировании. Это как минимум для начала. Если же хочется повозится с тем что есть - обратите внимание на ваши битмапы, а особенно на кол-во нулей в них, например в title2 занято на глаз, двумя блоками, порядка 800 байт нулями. Причем прямо перед использованием title2 делается display.clearDisplay(); В остальных битмапах тоже дофига. Это резерв и он может тут выручить.
Всегда пишу этот тип как byte, мне так понятнее. Ошибка ли это? Вроде как во всех платформах от tiny до due байт объявлен как uint8_t.
Всегда пишу этот тип как byte, мне так понятнее. Ошибка ли это? Вроде как во всех платформах от tiny до due байт объявлен как uint8_t.
Собственно это разумно пользоваться языком и терминами которыми владеешь лучше всего. Но! Кажется здесь на форуме уже была дискуссия на предмет разрядности типа byte. И как оказалось байт не всегда 8 бит. Да и для наглядности проще применять явное указание типов переменных. Сразу видны ограничения. Да и код удобнее оптимизировать. Простой пример: есть тип long. Разрядность 32 бита. В голову сразу приходят кошмарные картины обработки long на 8-разрядном процессоре. А ведь часто в long или uint32_t меняется всего лишь младший байт! И только иногда необходимо провести какие-то манипуляции действительно с long. Так зачем каждый раз обрабатывать все 32 бита когда можно разбить long на 4 байта uint8_t и обрабатывать только младший байт. При этом обрабатывать условие переполнения его и более старших байтов. В 8-ми разрядных процессорах компилятор генерит даже более короткий код. Хоть листинг выглядит и более громоздким. При этом существенно уменьшается время выполнения кода. БОльшую часть программа обрабатывает только 1 байт. Следующий байт лишь раз в 256 инкрементов младшего. А до других глядишь и дело не дойдёт....
ПыСы: сразу же оговорюсь данный метод хорошо себя зарекомендовал для работы с большими переменными - счетчиками. Типа long. Также этот метод позволяет существенно сократить время выполнения задачи. Инкрементировал байт, сравнил с 255, если нет то спать, если да то обнулить, инкрементировать следующий сравнить и так далее и спать.
Вообще в среде программирования есть хорошая возможность ознакомиться с ассемблерным кодом, который генерируется компилятором. Очччень помогает при оптимизации кода.
//сразу же оговорюсь данный метод
А какой собственно метод? Рассуждения что иногда лонг не сильно хуже байта? Ну да иногда бывает. А байт, если диапазона 0-255 хватает, всегда на 8-битной не хуже лонга. Нету тут метода.