Advertisement
stirante

Evie game

Aug 6th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.51 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <gfxfont.h>
  5. #include <Adafruit_SSD1306.h>
  6.  
  7.  
  8. //pin for the button
  9. #define BUTTON 5
  10. //actually my OLED don't have this pin, but works anyways
  11. #define OLED_RESET 4
  12. Adafruit_SSD1306 display(OLED_RESET);
  13.  
  14. static const int ANI1_WIDTH = 24;
  15. static const int ANI1_HEIGHT = 17;
  16. static const unsigned char PROGMEM ANI1[] =
  17. {
  18.   B11111110, B00000000, B00000000
  19.   , B10111111, B00000000, B00000000
  20.   , B00011111, B00000000, B00000000
  21.   , B00111111, B00000010, B00000000
  22.   , B00111111, B00001111, B00000000
  23.   , B00111111, B00001111, B00000000
  24.   , B00111110, B00001111, B11100000
  25.   , B00111100, B00001110, B11100000
  26.   , B00111100, B00001111, B11100000
  27.   , B00111110, B00001111, B11000000
  28.   , B00011111, B10001111, B00000000
  29.   , B00011111, B10111111, B00000000
  30.   , B00000111, B11111111, B00000000
  31.   , B00000001, B11111111, B10000000
  32.   , B00000001, B11111111, B10000000
  33.   , B00000001, B11100111, B10000000
  34.   , B00000000, B11100110, B00000000
  35. };
  36. static const int ANI2_WIDTH = 24;
  37. static const int ANI2_HEIGHT = 17;
  38. static const unsigned char PROGMEM ANI2[] =
  39. {
  40.   B11111110, B00000000, B00000000
  41.   , B10111111, B00000000, B00000000
  42.   , B00011111, B00000000, B00000000
  43.   , B00111111, B00000010, B00000000
  44.   , B00111111, B00001111, B00000000
  45.   , B00111111, B00001111, B00000000
  46.   , B00111110, B00001111, B11100000
  47.   , B00111100, B00001110, B11100000
  48.   , B00111100, B00001111, B11100000
  49.   , B00111110, B00001111, B11000000
  50.   , B00011111, B10001111, B00000000
  51.   , B00011111, B10111111, B00000000
  52.   , B00000111, B11111111, B00000000
  53.   , B00000001, B11111111, B10000000
  54.   , B00000001, B11100011, B10000000
  55.   , B00000001, B10100110, B10000000
  56.   , B00000001, B00010100, B01000000
  57. };
  58.  
  59. //earlier i randomized the floor, but it seems it's too heavy for arduino
  60.  
  61. //static const int PATH1_WIDTH = 8;
  62. //static const int PATH1_HEIGHT = 5;
  63. //static const unsigned char PROGMEM PATH1[] =
  64. //{
  65. //B11111111
  66. //, B00000000
  67. //, B01100001
  68. //, B00000100
  69. //, B00000000
  70. //};
  71. //static const int PATH2_WIDTH = 8;
  72. //static const int PATH2_HEIGHT = 5;
  73. //static const unsigned char PROGMEM PATH2[] =
  74. //{
  75. //B11111111
  76. //, B00000000
  77. //, B00000110
  78. //, B01010000
  79. //, B00000000
  80. //};
  81. static const int PATH3_WIDTH = 8;
  82. static const int PATH3_HEIGHT = 5;
  83. static const unsigned char PROGMEM PATH3[] =
  84. {
  85.   B11111111
  86.   , B00000000
  87.   , B00001000
  88.   , B00000000
  89.   , B00000000
  90. };
  91. static const int CACTUS_WIDTH = 8;
  92. static const int CACTUS_HEIGHT = 14;
  93. static const unsigned char PROGMEM CACTUS[] =
  94. {
  95.   B00011000
  96.   , B00011000
  97.   , B00011000
  98.   , B00011011
  99.   , B00011011
  100.   , B11011011
  101.   , B11011011
  102.   , B11011011
  103.   , B11011111
  104.   , B11011110
  105.   , B11111000
  106.   , B01111000
  107.   , B00011000
  108.   , B00011000
  109. };
  110.  
  111. static const int GAMEOVER_WIDTH = 128;
  112. static const int GAMEOVER_HEIGHT = 32;
  113. static const unsigned char PROGMEM GAMEOVER[] =
  114. {
  115. B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  116. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  117. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  118. , B11111111, B11111111, B11111111, B00011111, B11000011, B11000011, B11000111, B00000011, B11111110, B00111110, B00111000, B10000001, B11000000, B11111111, B11111111, B11111111
  119. , B11111111, B11111111, B11111100, B00000111, B11000011, B11000011, B11000111, B00000011, B11111000, B00001110, B00111000, B10000001, B11000000, B01111111, B11111111, B11111111
  120. , B11111111, B11111111, B11111100, B00000111, B10000001, B11000001, B10000111, B00000011, B11111000, B00001110, B00111000, B10000001, B11000000, B01111111, B11111111, B11111111
  121. , B11111111, B11111111, B11111100, B11100111, B10011001, B11000001, B10000111, B00011111, B11111001, B11001110, B00111001, B10001111, B11001110, B01111111, B11111111, B11111111
  122. , B11111111, B11111111, B11111000, B11100111, B10011001, B11000001, B10000111, B00011111, B11110001, B11000110, B00111001, B10001111, B11001110, B01111111, B11111111, B11111111
  123. , B11111111, B11111111, B11111000, B11100111, B10011001, B11000001, B10100111, B00011111, B11110001, B11000110, B00111001, B10001111, B11001110, B01111111, B11111111, B11111111
  124. , B11111111, B11111111, B11111000, B11111111, B10011001, B11000101, B10100111, B00000111, B11110001, B11000111, B00110001, B10000011, B11000000, B01111111, B11111111, B11111111
  125. , B11111111, B11111111, B11111000, B11111111, B10011001, B11000100, B00100111, B00000111, B11110001, B11000111, B00110001, B10000011, B11000000, B11111111, B11111111, B11111111
  126. , B11111111, B11111111, B11111000, B11000111, B10011001, B11000110, B01100111, B00000111, B11110001, B11000111, B00110001, B10000011, B11000000, B01111111, B11111111, B11111111
  127. , B11111111, B11111111, B11111000, B11000111, B00011000, B11000110, B01100111, B00011111, B11110001, B11000111, B00110001, B10001111, B11001110, B01111111, B11111111, B11111111
  128. , B11111111, B11111111, B11111000, B11100111, B00000000, B11000110, B01100111, B00011111, B11110001, B11000111, B00110011, B10001111, B11001110, B01111111, B11111111, B11111111
  129. , B11111111, B11111111, B11111000, B11100111, B00000000, B11000110, B01100111, B00011111, B11110001, B11000111, B00000011, B10001111, B11001110, B01111111, B11111111, B11111111
  130. , B11111111, B11111111, B11111100, B11100111, B00000000, B11000110, B01100111, B00011111, B11111001, B11001111, B00000011, B10001111, B11001110, B01111111, B11111111, B11111111
  131. , B11111111, B11111111, B11111100, B00000111, B00011100, B11000110, B01100111, B00000011, B11111000, B00001111, B10000011, B10000001, B11001110, B01111111, B11111111, B11111111
  132. , B11111111, B11111111, B11111100, B00000111, B00011100, B11000110, B01100111, B00000011, B11111000, B00001111, B10000011, B10000001, B11001110, B01111111, B11111111, B11111111
  133. , B11111111, B11111111, B11111111, B00110111, B00111100, B11000111, B11100111, B00000011, B11111110, B00111111, B10000011, B10000001, B11001110, B01111111, B11111111, B11111111
  134. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  135. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  136. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  137. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  138. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  139. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  140. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  141. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  142. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  143. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  144. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  145. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  146. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  147. };
  148. static const int START_WIDTH = 128;
  149. static const int START_HEIGHT = 32;
  150. static const unsigned char PROGMEM START[] =
  151. {
  152. B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  153. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  154. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  155. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  156. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  157. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  158. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  159. , B11111111, B11111111, B11111111, B11111111, B11111111, B10000111, B10000000, B11110000, B11111000, B00011110, B00000011, B11111111, B11111111, B11111111, B11111111, B11111111
  160. , B11111111, B11111111, B11111111, B11111111, B11111111, B00000011, B10000000, B11110000, B11111000, B00001110, B00000011, B11111111, B11111111, B11111111, B11111111, B11111111
  161. , B11111111, B11111111, B11111111, B11111111, B11111110, B00000011, B10000000, B11100000, B01111000, B00001110, B00000011, B11111111, B11111111, B11111111, B11111111, B11111111
  162. , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11100110, B01111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  163. , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11100110, B01111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  164. , B11111111, B11111111, B11111111, B11111111, B11111110, B00011111, B11100011, B11100110, B01111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  165. , B11111111, B11111111, B11111111, B11111111, B11111111, B00001111, B11100011, B11100110, B01111000, B00001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  166. , B11111111, B11111111, B11111111, B11111111, B11111111, B00000111, B11100011, B11100110, B01111000, B00011111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  167. , B11111111, B11111111, B11111111, B11111111, B11111111, B11000011, B11100011, B11100110, B01111000, B00001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  168. , B11111111, B11111111, B11111111, B11111111, B11111111, B11100001, B11100011, B11000110, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  169. , B11111111, B11111111, B11111111, B11111111, B11111111, B11110001, B11100011, B11000000, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  170. , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11000000, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  171. , B11111111, B11111111, B11111111, B11111111, B11111110, B00110001, B11100011, B11000000, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  172. , B11111111, B11111111, B11111111, B11111111, B11111110, B00000001, B11100011, B11000111, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  173. , B11111111, B11111111, B11111111, B11111111, B11111111, B00000011, B11100011, B11000111, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  174. , B11111111, B11111111, B11111111, B11111111, B11111111, B10000111, B11100011, B11001111, B00111001, B11001111, B10001111, B11111111, B11111111, B11111111, B11111111, B11111111
  175. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  176. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  177. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  178. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  179. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  180. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  181. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  182. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  183. , B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111, B11111111
  184. };
  185.  
  186. int animation = 0;
  187. int evieX = 52;
  188. int evieY = 12;
  189. bool jump = false;
  190. int buttonState = 0;
  191. int c1 = -100;
  192. int c2 = -100;
  193. double yVel = 0;
  194. bool isOver = true;
  195. bool isStart = true;
  196. int score = 0;
  197. int lookWhatYouveDone = 0;
  198.  
  199. bool isVisible(int x, int width) {
  200.   return evieX - (x + width) <= 55;
  201. }
  202.  
  203. int toLocal(int x) {
  204.   return x - (evieX - 55);
  205. }
  206.  
  207. void render() {
  208.   display.clearDisplay();
  209.   if (isOver || isStart) {
  210.     if (isStart)
  211.       display.drawBitmap(0, 0, START, START_WIDTH, START_HEIGHT, 1, 0);
  212.     else {
  213.       display.drawBitmap(0, 0, GAMEOVER, GAMEOVER_WIDTH, GAMEOVER_HEIGHT, 1, 0);
  214.       display.setTextColor(0);
  215.       int x = 0;
  216.       int y = 0;
  217.       int w = 0;
  218.       int h = 0;
  219.       String str = "SCORE: " + String(score);
  220.       display.getTextBounds(str.c_str(), 0, 0, &x, &y, &w, &h);
  221.       display.setCursor(64 - (w / 2), 23);
  222.       display.print(str.c_str());
  223.       display.setTextColor(1);
  224.     }
  225.     if (isStart || lookWhatYouveDone >= 6)
  226.       display.display();
  227.     else if (!isStart)
  228.       lookWhatYouveDone++;
  229.     delay(100);
  230.     return;
  231.   }
  232.   animation++;
  233.   if (animation >= 10) animation = 0;
  234.   for (int i = -(evieX % 8); i < 128; i += 8) {
  235.     display.drawBitmap(i, 27, PATH3, PATH3_WIDTH, PATH3_HEIGHT, 1);
  236.   }
  237.   int cc1 = toLocal(c1);
  238.   int cc2 = toLocal(c2);
  239.   display.drawBitmap(cc1, 16, CACTUS, CACTUS_WIDTH, CACTUS_HEIGHT, 1);
  240.   display.drawBitmap(cc2, 16, CACTUS, CACTUS_WIDTH, CACTUS_HEIGHT, 1);
  241.   if (animation / 5 == 0) display.drawBitmap(44, evieY, ANI1, ANI1_WIDTH, ANI1_HEIGHT, 1);
  242.   else display.drawBitmap(44, evieY, ANI2, ANI2_WIDTH, ANI2_HEIGHT, 1);
  243.   display.setCursor(0, 0);
  244.   display.print("SCORE: ");
  245.   display.print(score);
  246.   display.display();
  247. }
  248.  
  249. void logic() {
  250.   evieX++;
  251.   evieY += yVel;
  252.   if (evieY > 12) {
  253.     yVel = 0;
  254.     evieY = 12;
  255.     jump = false;
  256.   }
  257.   if (yVel != 0) {
  258.     yVel *= 0.95;
  259.     yVel += 0.2;
  260.   }
  261.   if (!isVisible(c1, 8)) {
  262.     c1 = rand() % 300 + evieX;
  263.     while (c1 - evieX < 64 || abs(c1 - c2) < 40) {
  264.       c1 = rand() % 300 + evieX;
  265.     }
  266.   }
  267.   if (!isVisible(c2, 8)) {
  268.     c2 = rand() % 300 + evieX;
  269.     while (c2 - evieX < 64 || abs(c1 - c2) < 40) {
  270.       c2 = rand() % 300 + evieX;
  271.     }
  272.   }
  273.   int x = evieX + 11;
  274.   if (x > c1 + 1 && x < c1 + 9 && evieY > 2) {
  275.     isOver = true;
  276.     return;
  277.   }
  278.   if (x > c2 + 1 && x < c2 + 9 && evieY > 2) {
  279.     isOver = true;
  280.     return;
  281.   }
  282.   if (evieX > c1 + 1 && evieX <= c1 + 9 && evieY > 2) {
  283.     isOver = true;
  284.     return;
  285.   }
  286.   if (evieX > c2 + 1 && evieX <= c2 + 9 && evieY > 2) {
  287.     isOver = true;
  288.     return;
  289.   }
  290.   if (c1 + 7 < evieX && c1 + 9 > evieX) {
  291.     score++;
  292.   }
  293.   if (c2 + 7 < evieX && c2 + 9 > evieX) {
  294.     score++;
  295.   }
  296. }
  297.  
  298. void setup() {
  299.   pinMode(BUTTON, INPUT);
  300.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  301.   display.setTextSize(1);
  302.   display.setTextColor(WHITE);
  303. }
  304.  
  305. void loop() {
  306.   int nButtonState = digitalRead(BUTTON);
  307.   if (nButtonState != buttonState && nButtonState == 1) {
  308.     if (isOver) {
  309.       isOver = false;
  310.       isStart = false;
  311.       animation = 0;
  312.       evieX = 52;
  313.       evieY = 12;
  314.       jump = false;
  315.       c1 = -100;
  316.       c2 = -100;
  317.       yVel = 0;
  318.       score = 0;
  319.       lookWhatYouveDone = 0;
  320.     } else if (!jump) {
  321.       jump  = true;
  322.       yVel = -6;
  323.     }
  324.   }
  325.   buttonState = nButtonState;
  326.   if (!isOver) {
  327.     logic();
  328.     logic();
  329.   }
  330.   render();
  331. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement