Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <gfxfont.h>
- #include <Adafruit_SSD1306.h>
- //pin for the button
- #define BUTTON 5
- //actually my OLED don't have this pin, but works anyways
- #define OLED_RESET 4
- Adafruit_SSD1306 display(OLED_RESET);
- static const int ANI1_WIDTH = 24;
- static const int ANI1_HEIGHT = 17;
- static const unsigned char PROGMEM ANI1[] =
- {
- B11111110, B00000000, B00000000
- , B10111111, B00000000, B00000000
- , B00011111, B00000000, B00000000
- , B00111111, B00000010, B00000000
- , B00111111, B00001111, B00000000
- , B00111111, B00001111, B00000000
- , B00111110, B00001111, B11100000
- , B00111100, B00001110, B11100000
- , B00111100, B00001111, B11100000
- , B00111110, B00001111, B11000000
- , B00011111, B10001111, B00000000
- , B00011111, B10111111, B00000000
- , B00000111, B11111111, B00000000
- , B00000001, B11111111, B10000000
- , B00000001, B11111111, B10000000
- , B00000001, B11100111, B10000000
- , B00000000, B11100110, B00000000
- };
- static const int ANI2_WIDTH = 24;
- static const int ANI2_HEIGHT = 17;
- static const unsigned char PROGMEM ANI2[] =
- {
- B11111110, B00000000, B00000000
- , B10111111, B00000000, B00000000
- , B00011111, B00000000, B00000000
- , B00111111, B00000010, B00000000
- , B00111111, B00001111, B00000000
- , B00111111, B00001111, B00000000
- , B00111110, B00001111, B11100000
- , B00111100, B00001110, B11100000
- , B00111100, B00001111, B11100000
- , B00111110, B00001111, B11000000
- , B00011111, B10001111, B00000000
- , B00011111, B10111111, B00000000
- , B00000111, B11111111, B00000000
- , B00000001, B11111111, B10000000
- , B00000001, B11100011, B10000000
- , B00000001, B10100110, B10000000
- , B00000001, B00010100, B01000000
- };
- //earlier i randomized the floor, but it seems it's too heavy for arduino
- //static const int PATH1_WIDTH = 8;
- //static const int PATH1_HEIGHT = 5;
- //static const unsigned char PROGMEM PATH1[] =
- //{
- //B11111111
- //, B00000000
- //, B01100001
- //, B00000100
- //, B00000000
- //};
- //static const int PATH2_WIDTH = 8;
- //static const int PATH2_HEIGHT = 5;
- //static const unsigned char PROGMEM PATH2[] =
- //{
- //B11111111
- //, B00000000
- //, B00000110
- //, B01010000
- //, B00000000
- //};
- static const int PATH3_WIDTH = 8;
- static const int PATH3_HEIGHT = 5;
- static const unsigned char PROGMEM PATH3[] =
- {
- B11111111
- , B00000000
- , B00001000
- , B00000000
- , B00000000
- };
- static const int CACTUS_WIDTH = 8;
- static const int CACTUS_HEIGHT = 14;
- static const unsigned char PROGMEM CACTUS[] =
- {
- B00011000
- , B00011000
- , B00011000
- , B00011011
- , B00011011
- , B11011011
- , B11011011
- , B11011011
- , B11011111
- , B11011110
- , B11111000
- , B01111000
- , B00011000
- , B00011000
- };
- static const int GAMEOVER_WIDTH = 128;
- static const int GAMEOVER_HEIGHT = 32;
- static const unsigned char PROGMEM GAMEOVER[] =
- {
- B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B00011111, B11000011, B11000011, B11000111, B00000011, B11111110, B00111110, B00111000, B10000001, B11000000, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111100, B00000111, B11000011, B11000011, B11000111, B00000011, B11111000, B00001110, B00111000, B10000001, B11000000, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111100, B00000111, B10000001, B11000001, B10000111, B00000011, B11111000, B00001110, B00111000, B10000001, B11000000, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111100, B11100111, B10011001, B11000001, B10000111, B00011111, B11111001, B11001110, B00111001, B10001111, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11100111, B10011001, B11000001, B10000111, B00011111, B11110001, B11000110, B00111001, B10001111, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11100111, B10011001, B11000001, B10100111, B00011111, B11110001, B11000110, B00111001, B10001111, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11111111, B10011001, B11000101, B10100111, B00000111, B11110001, B11000111, B00110001, B10000011, B11000000, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11111111, B10011001, B11000100, B00100111, B00000111, B11110001, B11000111, B00110001, B10000011, B11000000, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11000111, B10011001, B11000110, B01100111, B00000111, B11110001, B11000111, B00110001, B10000011, B11000000, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11000111, B00011000, B11000110, B01100111, B00011111, B11110001, B11000111, B00110001, B10001111, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11100111, B00000000, B11000110, B01100111, B00011111, B11110001, B11000111, B00110011, B10001111, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111000, B11100111, B00000000, B11000110, B01100111, B00011111, B11110001, B11000111, B00000011, B10001111, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111100, B11100111, B00000000, B11000110, B01100111, B00011111, B11111001, B11001111, B00000011, B10001111, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111100, B00000111, B00011100, B11000110, B01100111, B00000011, B11111000, B00001111, B10000011, B10000001, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111100, B00000111, B00011100, B11000110, B01100111, B00000011, B11111000, B00001111, B10000011, B10000001, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B00110111, B00111100, B11000111, B11100111, B00000011, B11111110, B00111111, B10000011, B10000001, B11001110, B01111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- };
- static const int START_WIDTH = 128;
- static const int START_HEIGHT = 32;
- static const unsigned char PROGMEM START[] =
- {
- B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B10000111, B10000000, B11110000, B11111000, B00011110, B00000011, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B00000011, B10000000, B11110000, B11111000, B00001110, B00000011, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111110, B00000011, B10000000, B11100000, B01111000, B00001110, B00000011, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11100110, B01111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11100110, B01111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111110, B00011111, B11100011, B11100110, B01111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B00001111, B11100011, B11100110, B01111000, B00001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B00000111, B11100011, B11100110, B01111000, B00011111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11000011, B11100011, B11100110, B01111000, B00001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11100001, B11100011, B11000110, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11110001, B11100011, B11000000, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11000000, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11000000, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111110, B00000001, B11100011, B11000111, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B00000011, B11100011, B11000111, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B10000111, B11100011, B11001111, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
- };
- int animation = 0;
- int evieX = 52;
- int evieY = 12;
- bool jump = false;
- int buttonState = 0;
- int c1 = -100;
- int c2 = -100;
- double yVel = 0;
- bool isOver = true;
- bool isStart = true;
- int score = 0;
- int lookWhatYouveDone = 0;
- bool isVisible(int x, int width) {
- return evieX - (x + width) <= 55;
- }
- int toLocal(int x) {
- return x - (evieX - 55);
- }
- void render() {
- display.clearDisplay();
- if (isOver || isStart) {
- if (isStart)
- display.drawBitmap(0, 0, START, START_WIDTH, START_HEIGHT, 1, 0);
- else {
- display.drawBitmap(0, 0, GAMEOVER, GAMEOVER_WIDTH, GAMEOVER_HEIGHT, 1, 0);
- display.setTextColor(0);
- int x = 0;
- int y = 0;
- int w = 0;
- int h = 0;
- String str = "SCORE: " + String(score);
- display.getTextBounds(str.c_str(), 0, 0, &x, &y, &w, &h);
- display.setCursor(64 - (w / 2), 23);
- display.print(str.c_str());
- display.setTextColor(1);
- }
- if (isStart || lookWhatYouveDone >= 6)
- display.display();
- else if (!isStart)
- lookWhatYouveDone++;
- delay(100);
- return;
- }
- animation++;
- if (animation >= 10) animation = 0;
- for (int i = -(evieX % 8); i < 128; i += 8) {
- display.drawBitmap(i, 27, PATH3, PATH3_WIDTH, PATH3_HEIGHT, 1);
- }
- int cc1 = toLocal(c1);
- int cc2 = toLocal(c2);
- display.drawBitmap(cc1, 16, CACTUS, CACTUS_WIDTH, CACTUS_HEIGHT, 1);
- display.drawBitmap(cc2, 16, CACTUS, CACTUS_WIDTH, CACTUS_HEIGHT, 1);
- if (animation / 5 == 0) display.drawBitmap(44, evieY, ANI1, ANI1_WIDTH, ANI1_HEIGHT, 1);
- else display.drawBitmap(44, evieY, ANI2, ANI2_WIDTH, ANI2_HEIGHT, 1);
- display.setCursor(0, 0);
- display.print("SCORE: ");
- display.print(score);
- display.display();
- }
- void logic() {
- evieX++;
- evieY += yVel;
- if (evieY > 12) {
- yVel = 0;
- evieY = 12;
- jump = false;
- }
- if (yVel != 0) {
- yVel *= 0.95;
- yVel += 0.2;
- }
- if (!isVisible(c1, 8)) {
- c1 = rand() % 300 + evieX;
- while (c1 - evieX < 64 || abs(c1 - c2) < 40) {
- c1 = rand() % 300 + evieX;
- }
- }
- if (!isVisible(c2, 8)) {
- c2 = rand() % 300 + evieX;
- while (c2 - evieX < 64 || abs(c1 - c2) < 40) {
- c2 = rand() % 300 + evieX;
- }
- }
- int x = evieX + 11;
- if (x > c1 + 1 && x < c1 + 9 && evieY > 2) {
- isOver = true;
- return;
- }
- if (x > c2 + 1 && x < c2 + 9 && evieY > 2) {
- isOver = true;
- return;
- }
- if (evieX > c1 + 1 && evieX <= c1 + 9 && evieY > 2) {
- isOver = true;
- return;
- }
- if (evieX > c2 + 1 && evieX <= c2 + 9 && evieY > 2) {
- isOver = true;
- return;
- }
- if (c1 + 7 < evieX && c1 + 9 > evieX) {
- score++;
- }
- if (c2 + 7 < evieX && c2 + 9 > evieX) {
- score++;
- }
- }
- void setup() {
- pinMode(BUTTON, INPUT);
- display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
- display.setTextSize(1);
- display.setTextColor(WHITE);
- }
- void loop() {
- int nButtonState = digitalRead(BUTTON);
- if (nButtonState != buttonState && nButtonState == 1) {
- if (isOver) {
- isOver = false;
- isStart = false;
- animation = 0;
- evieX = 52;
- evieY = 12;
- jump = false;
- c1 = -100;
- c2 = -100;
- yVel = 0;
- score = 0;
- lookWhatYouveDone = 0;
- } else if (!jump) {
- jump = true;
- yVel = -6;
- }
- }
- buttonState = nButtonState;
- if (!isOver) {
- logic();
- logic();
- }
- render();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement