Guest User

Cutie Hack Arduino Game

a guest
Nov 11th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.81 KB | None | 0 0
  1. // Cutie Hack Project 2017
  2. // By: Rahul Nair and Suhas Jagannath (rnair005 and sjaga003)
  3. // November 11, 2017
  4.  
  5. #include <LiquidCrystal.h>
  6. byte face1[8] = { // sprite for character 1
  7. B00000,
  8. B00000,
  9. B00000,
  10. B01010,
  11. B00000,
  12. B10001,
  13. B01110,
  14. B00000,
  15. };
  16.  
  17. byte face2[8] = { // sprite for character 2
  18. B00000,
  19. B00000,
  20. B00000,
  21. B01110,
  22. B10101,
  23. B10101,
  24. B01110,
  25. B11011,
  26. };
  27.  
  28. byte face3[8] = { // sprite for character 3
  29. B00100,
  30. B01110,
  31. B11111,
  32. B01110,
  33. B10101,
  34. B10101,
  35. B01110,
  36. B11011,
  37. };
  38.  
  39. byte face4[8] = { // sprite for character 4
  40. B10001,
  41. B01110,
  42. B11111,
  43. B10101,
  44. B01110,
  45. B10001,
  46. B01110,
  47. B00100,
  48. };
  49.  
  50. byte face5[8] = { // sprite for character 5
  51. B10101,
  52. B01110,
  53. B11111,
  54. B10101,
  55. B01110,
  56. B11111,
  57. B01110,
  58. B11111,
  59. };
  60.  
  61. byte block[8] = { // sprite for blocks
  62. B11111,
  63. B11111,
  64. B11111,
  65. B11111,
  66. B11111,
  67. B11111,
  68. B11111,
  69. B11111,
  70. };
  71.  
  72.  
  73.  
  74. int buttonState = 0;
  75.  
  76. const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // integers correspond to ports being used
  77. LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // main function for LCD program
  78. int state = 0; // mode the button is on (HIGH or LOW)
  79. int where = 0; // variable used to maintain positon of Kirby without holding down button
  80. int pressed = 0; // proxy variable used to maintain a certain state
  81. int i = 18; // variable used to represent column space in first row
  82. int j = 18; // variable used to represent columns space in second row
  83. int randNum = 0; // random number of spaces in between each block
  84. int score = 0; // score recieved based on seconds lasted
  85. bool gameEnd = false; // says when game is over
  86. int sprite = 0; // starting character sprite of game
  87.  
  88. void setup()
  89. {
  90. randomSeed(analogRead(A0));
  91. lcd.begin(16, 2);
  92. pinMode(8, INPUT);
  93. lcd.createChar(0, face1);
  94. lcd.createChar(2, face2);
  95. lcd.createChar(3, face3);
  96. lcd.createChar(4, face4);
  97. lcd.createChar(5, face5);
  98. lcd.setCursor(1, 1);
  99. lcd.write(byte(sprite));
  100. lcd.createChar(1, block);
  101. randNum = random(4, 6);
  102. Serial.begin(9600);
  103. }
  104.  
  105. void loop()
  106. {
  107. if (lost(i, where)) {
  108. state = digitalRead(8);
  109.  
  110. if (state == HIGH && pressed == LOW) {
  111. pressed = HIGH;
  112. jump(sprite);
  113. }
  114. pressed = state;
  115.  
  116.  
  117. static unsigned long interval = 500; // ms 500 350 200 100
  118. static unsigned long lastRefreshTime = 0;
  119.  
  120. if (millis() - lastRefreshTime >= interval) {
  121. lastRefreshTime += interval;
  122. if (i == j + randNum || i == j + randNum + 1
  123. || i + 1 == j + randNum || i == j + randNum + 2
  124. || i + 2 == j + randNum) {
  125. Serial.print(i);
  126. Serial.print("\n");
  127. Serial.print(j + randNum);
  128. i = 18;
  129. j = 18;
  130.  
  131. }
  132.  
  133. blocks(i, 1);
  134. blocks(j + randNum, 0);
  135.  
  136. if (i == 0) {
  137. lcd.setCursor(0, 1);
  138. lcd.print(" ");
  139.  
  140. i = 18;
  141.  
  142. }
  143.  
  144. if (j + randNum == 0) {
  145.  
  146. lcd.setCursor(0, 0);
  147. lcd.print(" ");
  148. randNum = random(4, 6);
  149.  
  150. j = 18;
  151.  
  152. }
  153. --j;
  154. --i;
  155.  
  156.  
  157. score = millis() / 1000;
  158.  
  159. if (score == 15) {
  160.  
  161. interval = 400;
  162. sprite = 2;
  163.  
  164. }
  165. if (score == 30) {
  166.  
  167. interval = 300;
  168. sprite = 3;
  169.  
  170. }
  171. if (score == 45) {
  172.  
  173. interval = 200;
  174. sprite = 4;
  175.  
  176. }
  177. if (score == 60) {
  178.  
  179. interval = 100;
  180. sprite = 5;
  181. }
  182. }
  183. } else {
  184.  
  185. lost(i, where);
  186.  
  187. }
  188. }
  189.  
  190. void blocks(int row, int column)
  191. {
  192.  
  193. lcd.setCursor(row, column);
  194. lcd.write(byte(1));
  195. lcd.setCursor(row + 1, column);
  196. lcd.print(" ");
  197. }
  198.  
  199.  
  200.  
  201. void jump(int sprite)
  202. {
  203.  
  204. if (where == 0) {
  205. lcd.setCursor(1, 0);
  206. lcd.write(byte(sprite));
  207. lcd.setCursor(1, 1);
  208. lcd.print(" ");
  209. where = 1;
  210. } else {
  211. lcd.setCursor(1, 1);
  212. lcd.write(byte(sprite));
  213. lcd.setCursor(1, 0);
  214. lcd.print(" ");
  215. where = 0;
  216. }
  217.  
  218.  
  219. }
  220.  
  221. bool lost(int kirby, int block)
  222. {
  223.  
  224. if (i == 0 && block == 0 || j + randNum == 0 && block == 1) {
  225. if (gameEnd == false) {
  226.  
  227. gameEnd = true;
  228. lcd.clear();
  229.  
  230. }
  231. lcd.setCursor(3, 0);
  232. lcd.print("GAME OVER");
  233. lcd.setCursor(7, 1);
  234.  
  235. lcd.print(score);
  236. return false;
  237.  
  238. }
  239.  
  240. return true;
  241.  
  242. }
Add Comment
Please, Sign In to add comment