Advertisement
Guest User

Dangestein- VGAX Arduino UNO Game.

a guest
Jan 24th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.16 KB | None | 0 0
  1. //Dangerstein, by Maximiliano Ozono. For private use and non profit purposes only.
  2. // VGAX Library is property of Sandro Maffiodo.
  3.  
  4. #include <VGAX.h>
  5. //font generated from BITFONZI - by Sandro Maffiodo
  6. #define FNT_NANOFONT_HEIGHT 6
  7. #define FNT_NANOFONT_SYMBOLS_COUNT 95
  8. //data size=570 bytes
  9. const unsigned char fnt_nanofont_data[FNT_NANOFONT_SYMBOLS_COUNT][1+FNT_NANOFONT_HEIGHT] PROGMEM={
  10. { 1, 128, 128, 128, 0, 128, 0, }, //glyph '!' code=0
  11. { 3, 160, 160, 0, 0, 0, 0, }, //glyph '"' code=1
  12. { 5, 80, 248, 80, 248, 80, 0, },  //glyph '#' code=2
  13. { 5, 120, 160, 112, 40, 240, 0, },  //glyph '$' code=3
  14. { 5, 136, 16, 32, 64, 136, 0, },  //glyph '%' code=4
  15. { 5, 96, 144, 104, 144, 104, 0, },  //glyph '&' code=5
  16. { 2, 128, 64, 0, 0, 0, 0, },  //glyph ''' code=6
  17. { 2, 64, 128, 128, 128, 64, 0, }, //glyph '(' code=7
  18. { 2, 128, 64, 64, 64, 128, 0, },  //glyph ')' code=8
  19. { 3, 0, 160, 64, 160, 0, 0, },  //glyph '*' code=9
  20. { 3, 0, 64, 224, 64, 0, 0, }, //glyph '+' code=10
  21. { 2, 0, 0, 0, 0, 128, 64, },  //glyph ',' code=11
  22. { 3, 0, 0, 224, 0, 0, 0, }, //glyph '-' code=12
  23. { 1, 0, 0, 0, 0, 128, 0, }, //glyph '.' code=13
  24. { 5, 8, 16, 32, 64, 128, 0, },  //glyph '/' code=14
  25. { 4, 96, 144, 144, 144, 96, 0, }, //glyph '0' code=15
  26. { 3, 64, 192, 64, 64, 224, 0, },  //glyph '1' code=16
  27. { 4, 224, 16, 96, 128, 240, 0, }, //glyph '2' code=17
  28. { 4, 224, 16, 96, 16, 224, 0, },  //glyph '3' code=18
  29. { 4, 144, 144, 240, 16, 16, 0, }, //glyph '4' code=19
  30. { 4, 240, 128, 224, 16, 224, 0, },  //glyph '5' code=20
  31. { 4, 96, 128, 224, 144, 96, 0, }, //glyph '6' code=21
  32. { 4, 240, 16, 32, 64, 64, 0, }, //glyph '7' code=22
  33. { 4, 96, 144, 96, 144, 96, 0, },  //glyph '8' code=23
  34. { 4, 96, 144, 112, 16, 96, 0, },  //glyph '9' code=24
  35. { 1, 0, 128, 0, 128, 0, 0, }, //glyph ':' code=25
  36. { 2, 0, 128, 0, 0, 128, 64, },  //glyph ';' code=26
  37. { 3, 32, 64, 128, 64, 32, 0, }, //glyph '<' code=27
  38. { 3, 0, 224, 0, 224, 0, 0, }, //glyph '=' code=28
  39. { 3, 128, 64, 32, 64, 128, 0, },  //glyph '>' code=29
  40. { 4, 224, 16, 96, 0, 64, 0, },  //glyph '?' code=30
  41. { 4, 96, 144, 176, 128, 112, 0, },  //glyph '@' code=31
  42. { 4, 96, 144, 240, 144, 144, 0, },  //glyph 'A' code=32
  43. { 4, 224, 144, 224, 144, 224, 0, }, //glyph 'B' code=33
  44. { 4, 112, 128, 128, 128, 112, 0, }, //glyph 'C' code=34
  45. { 4, 224, 144, 144, 144, 224, 0, }, //glyph 'D' code=35
  46. { 4, 240, 128, 224, 128, 240, 0, }, //glyph 'E' code=36
  47. { 4, 240, 128, 224, 128, 128, 0, }, //glyph 'F' code=37
  48. { 4, 112, 128, 176, 144, 112, 0, }, //glyph 'G' code=38
  49. { 4, 144, 144, 240, 144, 144, 0, }, //glyph 'H' code=39
  50. { 3, 224, 64, 64, 64, 224, 0, },  //glyph 'I' code=40
  51. { 4, 240, 16, 16, 144, 96, 0, },  //glyph 'J' code=41
  52. { 4, 144, 160, 192, 160, 144, 0, }, //glyph 'K' code=42
  53. { 4, 128, 128, 128, 128, 240, 0, }, //glyph 'L' code=43
  54. { 5, 136, 216, 168, 136, 136, 0, }, //glyph 'M' code=44
  55. { 4, 144, 208, 176, 144, 144, 0, }, //glyph 'N' code=45
  56. { 4, 96, 144, 144, 144, 96, 0, }, //glyph 'O' code=46
  57. { 4, 224, 144, 224, 128, 128, 0, }, //glyph 'P' code=47
  58. { 4, 96, 144, 144, 144, 96, 16, },  //glyph 'Q' code=48
  59. { 4, 224, 144, 224, 160, 144, 0, }, //glyph 'R' code=49
  60. { 4, 112, 128, 96, 16, 224, 0, }, //glyph 'S' code=50
  61. { 3, 224, 64, 64, 64, 64, 0, }, //glyph 'T' code=51
  62. { 4, 144, 144, 144, 144, 96, 0, },  //glyph 'U' code=52
  63. { 3, 160, 160, 160, 160, 64, 0, },  //glyph 'V' code=53
  64. { 5, 136, 168, 168, 168, 80, 0, },  //glyph 'W' code=54
  65. { 4, 144, 144, 96, 144, 144, 0, },  //glyph 'X' code=55
  66. { 3, 160, 160, 64, 64, 64, 0, },  //glyph 'Y' code=56
  67. { 4, 240, 16, 96, 128, 240, 0, }, //glyph 'Z' code=57
  68. { 2, 192, 128, 128, 128, 192, 0, }, //glyph '[' code=58
  69. { 5, 128, 64, 32, 16, 8, 0, },  //glyph '\' code=59
  70. { 2, 192, 64, 64, 64, 192, 0, },  //glyph ']' code=60
  71. { 5, 32, 80, 136, 0, 0, 0, }, //glyph '^' code=61
  72. { 4, 0, 0, 0, 0, 240, 0, }, //glyph '_' code=62
  73. { 2, 128, 64, 0, 0, 0, 0, },  //glyph '`' code=63
  74. { 3, 0, 224, 32, 224, 224, 0, },  //glyph 'a' code=64
  75. { 3, 128, 224, 160, 160, 224, 0, }, //glyph 'b' code=65
  76. { 3, 0, 224, 128, 128, 224, 0, }, //glyph 'c' code=66
  77. { 3, 32, 224, 160, 160, 224, 0, },  //glyph 'd' code=67
  78. { 3, 0, 224, 224, 128, 224, 0, }, //glyph 'e' code=68
  79. { 2, 64, 128, 192, 128, 128, 0, },  //glyph 'f' code=69
  80. { 3, 0, 224, 160, 224, 32, 224, },  //glyph 'g' code=70
  81. { 3, 128, 224, 160, 160, 160, 0, }, //glyph 'h' code=71
  82. { 1, 128, 0, 128, 128, 128, 0, }, //glyph 'i' code=72
  83. { 2, 0, 192, 64, 64, 64, 128, },  //glyph 'j' code=73
  84. { 3, 128, 160, 192, 160, 160, 0, }, //glyph 'k' code=74
  85. { 1, 128, 128, 128, 128, 128, 0, }, //glyph 'l' code=75
  86. { 5, 0, 248, 168, 168, 168, 0, }, //glyph 'm' code=76
  87. { 3, 0, 224, 160, 160, 160, 0, }, //glyph 'n' code=77
  88. { 3, 0, 224, 160, 160, 224, 0, }, //glyph 'o' code=78
  89. { 3, 0, 224, 160, 160, 224, 128, }, //glyph 'p' code=79
  90. { 3, 0, 224, 160, 160, 224, 32, },  //glyph 'q' code=80
  91. { 3, 0, 224, 128, 128, 128, 0, }, //glyph 'r' code=81
  92. { 2, 0, 192, 128, 64, 192, 0, },  //glyph 's' code=82
  93. { 3, 64, 224, 64, 64, 64, 0, }, //glyph 't' code=83
  94. { 3, 0, 160, 160, 160, 224, 0, }, //glyph 'u' code=84
  95. { 3, 0, 160, 160, 160, 64, 0, },  //glyph 'v' code=85
  96. { 5, 0, 168, 168, 168, 80, 0, },  //glyph 'w' code=86
  97. { 3, 0, 160, 64, 160, 160, 0, },  //glyph 'x' code=87
  98. { 3, 0, 160, 160, 224, 32, 224, },  //glyph 'y' code=88
  99. { 2, 0, 192, 64, 128, 192, 0, },  //glyph 'z' code=89
  100. { 3, 96, 64, 192, 64, 96, 0, }, //glyph '{' code=90
  101. { 1, 128, 128, 128, 128, 128, 0, }, //glyph '|' code=91
  102. { 3, 192, 64, 96, 64, 192, 0, },  //glyph '}' code=92
  103. { 3, 96, 192, 0, 0, 0, 0, },  //glyph '~' code=93
  104. { 4, 48, 64, 224, 64, 240, 0, },  //glyph '£' code=94
  105. };
  106.  
  107.  
  108.  
  109. VGAX vga;
  110.  
  111. static const char str0[] PROGMEM="DANGERSTEIN";
  112. static const char str1[] PROGMEM="BY CIRUJADIGITAL";
  113. static const char str2[] PROGMEM="Tiempo";
  114. static const char str3[] PROGMEM="Nivel";
  115. static const char str4[] PROGMEM="Perdiste";
  116. static const char str5[] PROGMEM="Bien!";
  117. static const byte tiempo PROGMEM= 30;
  118. boolean screen = true;
  119. byte i = 0;
  120. byte tiempo_contador;
  121. char tiemp[4];
  122. byte nivel=1;
  123. char niv[2];
  124. byte velocidad=100;
  125. byte x_bomb1=rand()%VGAX_WIDTH;
  126. byte y_bomb1=random(0,40);
  127. byte x_bomb2=rand()%VGAX_WIDTH;
  128. byte y_bomb2=random(0,40);
  129. byte x_bomb3=rand()%VGAX_WIDTH;
  130. byte y_bomb3=random(0,40);
  131. byte x_bomb4=rand()%VGAX_WIDTH;
  132. byte y_bomb4=random(0,40);
  133. byte x_bomb5=rand()%VGAX_WIDTH;
  134. byte y_bomb5=random(0,40);
  135. byte x_bomb6=rand()%VGAX_WIDTH;
  136. byte y_bomb6=random(0,40);
  137. byte x_bomb7=rand()%VGAX_WIDTH;
  138. byte y_bomb7=random(0,40);
  139. byte x_bomb8=rand()%VGAX_WIDTH;
  140. byte y_bomb8=random(0,40);
  141. byte x_bomb9=rand()%VGAX_WIDTH;
  142. byte y_bomb9=random(0,40);
  143. byte x_bomb10=rand()%VGAX_WIDTH;
  144. byte y_bomb10=random(0,40);
  145.  
  146.  
  147.  
  148. void setup() {
  149.   vga.begin();
  150.  
  151.   pinMode(11,INPUT); //definirlos despues de vgabegin sino se caga.
  152.    pinMode(10,INPUT);
  153.  
  154.   tiempo_contador = tiempo;
  155.   vga.clear(2);
  156. //x_bomb =rand()%VGAX_WIDTH;
  157.  //   vga.putpixel4(0,1, 0x55); //ox55 = todo verde, pasar lso valores binarios de cada color a hex (uno al lado del otro)
  158. }
  159. void loop() {
  160.  
  161.     if (screen==true)
  162.     {vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 2, 3, str0, 10, 10, 0);
  163.  vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 2, 1, str1, 10, 50, 1);
  164.  
  165.   vga.delay(5000);
  166.  vga.clear(0);
  167.  screen=false;
  168.     }
  169.    
  170.  
  171.  
  172. if (digitalRead(11)==HIGH)
  173. {
  174. i = i+1;
  175. }
  176.  
  177. if (digitalRead(10)==HIGH)
  178. {
  179.   if (i>=1)
  180.   {
  181. i = i-1;
  182.   }
  183.   else {i=0;}
  184. }
  185. vga.clear(0);
  186. bomba();
  187. tanque(i,1);
  188.  
  189. if (i>= VGAX_BWIDTH) {i=14;}
  190. if (i<=0) {i=0;}
  191.  
  192. GUI();
  193.  
  194. piso_objetivo();
  195.  
  196.  vga.delay(velocidad); //velocidad del juego
  197.  
  198. }
  199.  
  200. /*
  201.   vga.putpixel(1,2,0); //0 =negro posicionX,PosicionY,numColor
  202.   vga.putpixel(2,2,1); // 1= verde
  203. vga.putpixel(3,2,2); // 2= rojo
  204. vga.putpixel(4,2,3); // 3= amarillo
  205. */
  206.  
  207. void tanque(byte X,byte Y)
  208.  
  209. {
  210.  
  211.    vga.putpixel4(X,VGAX_HEIGHT-(Y+1), 0x44);
  212.     vga.putpixel4(X+1,VGAX_HEIGHT-(Y+1), 0x44);
  213.   vga.putpixel4(X,VGAX_HEIGHT-(Y+2), 0x55);
  214.     vga.putpixel4(X+1,VGAX_HEIGHT-(Y+2), 0x55);
  215.    
  216.     vga.putpixel4(X+1,VGAX_HEIGHT-(Y+3), 0x54);
  217.   vga.putpixel4(X,VGAX_HEIGHT-(Y+3), 0x15);
  218.    vga.putpixel4(X+1,VGAX_HEIGHT-(Y+4), 0x55);
  219.     vga.putpixel4(X,VGAX_HEIGHT-(Y+4), 0x15);
  220.      vga.putpixel4(X+2,VGAX_HEIGHT-(Y+4), 0x55);
  221.  // vga.putpixel(X+6,VGAX_HEIGHT-(Y+3),1); // 1= verde
  222.  
  223.  
  224.  if ((i*4+13)>=(x_bomb1) && (i*4)<=(x_bomb1) && (VGAX_HEIGHT-3) <= y_bomb1) { perdiste(); }
  225.  if ((i*4+13)>=(x_bomb2) && (i*4)<=(x_bomb2) && (VGAX_HEIGHT-3) <= y_bomb2) { perdiste(); }
  226.  if ((i*4+13)>=(x_bomb3) && (i*4)<=(x_bomb3) && (VGAX_HEIGHT-3) <= y_bomb3) { perdiste(); }
  227.  if ((i*4+13)>=(x_bomb4) && (i*4)<=(x_bomb4) && (VGAX_HEIGHT-3) <= y_bomb4) { perdiste(); }
  228.  if ((i*4+13)>=(x_bomb5) && (i*4)<=(x_bomb5) && (VGAX_HEIGHT-3) <= y_bomb5) { perdiste(); }
  229.  if ((i*4+13)>=(x_bomb6) && (i*4)<=(x_bomb6) && (VGAX_HEIGHT-3) <= y_bomb6) { perdiste(); }
  230.  if ((i*4+13)>=(x_bomb7) && (i*4)<=(x_bomb7) && (VGAX_HEIGHT-3) <= y_bomb7) { perdiste(); }
  231.  if ((i*4+13)>=(x_bomb8) && (i*4)<=(x_bomb8) && (VGAX_HEIGHT-3) <= y_bomb8) { perdiste(); }
  232.  if ((i*4+13)>=(x_bomb9) && (i*4)<=(x_bomb9) && (VGAX_HEIGHT-3) <= y_bomb9) { perdiste(); }
  233.  if ((i*4+13)>=(x_bomb10) && (i*4)<=(x_bomb10) && (VGAX_HEIGHT-3) <= y_bomb10) { perdiste(); }
  234.  
  235.   if (X>=(VGAX_BWIDTH-4)) {ganaste();}
  236. }
  237.  
  238. void bomba()
  239. {
  240.   //0x2 negro negro negro verde
  241.   //0x80 verde negro negro negro
  242.  
  243.     vga.putpixel(x_bomb1,y_bomb1,2);
  244.  
  245.     vga.putpixel(x_bomb2,y_bomb2,2);
  246.     vga.putpixel(x_bomb3,y_bomb3,2);
  247.     vga.putpixel(x_bomb4,y_bomb4,2);
  248.      vga.putpixel(x_bomb5,y_bomb5,2);
  249.       vga.putpixel(x_bomb6,y_bomb6,2);
  250.        vga.putpixel(x_bomb7,y_bomb7,2);
  251.         vga.putpixel(x_bomb8,y_bomb8,2);
  252.          vga.putpixel(x_bomb9,y_bomb9,2);
  253.           vga.putpixel(x_bomb10,y_bomb10,2);
  254.    
  255.     y_bomb1=y_bomb1+random(2,4);
  256.    
  257.     y_bomb2=y_bomb2+random(2,4);
  258.     y_bomb3=y_bomb3+random(2,4);
  259.     y_bomb4=y_bomb4+random(2,4);
  260.   y_bomb5=y_bomb5+random(2,4);
  261.   y_bomb6=y_bomb6+random(2,4);
  262.   y_bomb7=y_bomb7+random(2,4);
  263.   y_bomb8=y_bomb8+random(2,4);
  264.   y_bomb9=y_bomb9+random(2,4);
  265.   y_bomb10=y_bomb10+random(2,4);
  266.  
  267.   if(y_bomb1>=VGAX_HEIGHT) {x_bomb1 =rand()%VGAX_WIDTH; y_bomb1=random(0,20); tiempo_contador = tiempo_contador-1;}
  268.  
  269.  
  270.     if(y_bomb2>=VGAX_HEIGHT) {x_bomb2 =rand()%VGAX_WIDTH; y_bomb2=random(0,25);}
  271.     if(y_bomb3>=VGAX_HEIGHT) {x_bomb3 =rand()%VGAX_WIDTH; y_bomb3=random(0,20);}
  272.   if(y_bomb4>=VGAX_HEIGHT) {x_bomb4 =rand()%VGAX_WIDTH; y_bomb4=random(0,20);}
  273.     if(y_bomb5>=VGAX_HEIGHT) {x_bomb5 =rand()%VGAX_WIDTH; y_bomb5=random(0,20);}
  274.       if(y_bomb6>=VGAX_HEIGHT) {x_bomb6 =rand()%VGAX_WIDTH; y_bomb6=random(0,20);}
  275.         if(y_bomb7>=VGAX_HEIGHT) {x_bomb7 =rand()%VGAX_WIDTH; y_bomb7=random(0,20);}
  276.           if(y_bomb8>=VGAX_HEIGHT) {x_bomb8 =rand()%VGAX_WIDTH; y_bomb8=random(0,20);}
  277.             if(y_bomb9>=VGAX_HEIGHT) {x_bomb9 =rand()%VGAX_WIDTH; y_bomb9=random(0,20);}
  278.               if(y_bomb10>=VGAX_HEIGHT) {x_bomb10 =rand()%VGAX_WIDTH; y_bomb10=random(0,20);}
  279.              
  280. }
  281.  
  282. void piso_objetivo()
  283. {
  284. vga.putpixel(VGAX_WIDTH-4,VGAX_HEIGHT-4,2); //debug
  285. for (int i =0; i< VGAX_WIDTH; i++)
  286. {
  287. vga.putpixel(i,VGAX_HEIGHT-1,1); //
  288. }
  289. //casita bandera:
  290. vga.putpixel4(VGAX_BWIDTH-2,VGAX_HEIGHT-2,0xc0);
  291. vga.putpixel4(VGAX_BWIDTH-2,VGAX_HEIGHT-3,0xC0);
  292. vga.putpixel4(VGAX_BWIDTH-2,VGAX_HEIGHT-4,0xC0);
  293. vga.putpixel4(VGAX_BWIDTH-2,VGAX_HEIGHT-5,0xD5);
  294. vga.putpixel4(VGAX_BWIDTH-2,VGAX_HEIGHT-6,0xD5);
  295. vga.putpixel4(VGAX_BWIDTH-2,VGAX_HEIGHT-7,0xD5);
  296. }
  297.  
  298. void GUI()
  299. {
  300.   vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 2, 3, str0, VGAX_WIDTH-75, 5, 3); //dangerstein
  301.  vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 2, 1, str1, VGAX_WIDTH-75, 15, 3); //by cirujadigital
  302.  
  303. sprintf(tiemp,"%03u",tiempo_contador); //convierto el byte al char array.
  304. vga.printSRAM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 1, 1, tiemp, 25, 5, 2); //var tiempo
  305. vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 1, 1, str2, 0, 5, 3);
  306.  
  307. sprintf(niv,"%03u",nivel); //convierto el byte al char array.
  308.  
  309. vga.printSRAM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 1, 1, niv, 25, 15, 2); //var nivel
  310. vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 1, 1, str3, 0, 15,3);
  311.  
  312. if (tiempo_contador==0) { tiempo_contador=tiempo;
  313. perdiste();
  314.  
  315. }
  316.   }
  317.  
  318.   void perdiste()
  319.   {i=0;
  320.   tiempo_contador=tiempo;
  321.     vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 1, 1, str4, VGAX_WIDTH/3, VGAX_HEIGHT/2,2);
  322. vga.delay(3000);
  323. byte y_bomb1=random(0,40);
  324. byte y_bomb2=random(0,40);
  325. byte y_bomb3=random(0,40);
  326. byte y_bomb4=random(0,40);
  327. byte y_bomb5=random(0,40);
  328. byte y_bomb6=random(0,40);
  329. byte y_bomb7=random(0,40);
  330. byte y_bomb8=random(0,40);
  331. byte y_bomb9=random(0,40);
  332. byte y_bomb10=random(0,40);
  333. vga.clear(0);
  334.     }
  335.  
  336.     void ganaste()
  337.     {    vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 1, 1, str5, VGAX_WIDTH/3, VGAX_HEIGHT/2,3);
  338.     nivel++;
  339.     i=0;
  340.     velocidad=velocidad-30;
  341.     if (nivel>4)
  342.     {nivel =1;
  343.     velocidad=100;
  344.       }
  345. vga.delay(3000);
  346. vga.clear(0);
  347.      
  348.       }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement