Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.44 KB | None | 0 0
  1. #include <Arduino.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_NeoPixel.h>
  4. #include <Adafruit_NeoMatrix.h>
  5.  
  6. #include "constants.h"
  7. #include "bitmaps.h"
  8.  
  9.  
  10. /*
  11. * Infos pour la programmation :
  12. * Le pixel (0,0) est TOUJOURS situé en haut à gauche de l'écran
  13. * L'écran fait WIDTH de large par HEIGHT de haut, vous pouvez utiliser ces constantes dans les boucles
  14. * La luminosité (BRIGHTNESS) est définie par l'utilisateur et donc ne peut pas être modifiée par un jeu
  15. * Pour pouvoir combiner tous les jeux suivez l'exemple et créer une classe ayant le nom de votre jeu
  16. *
  17. *
  18. * La librairie vous donne accès à des fonctions de dessin la liste est détaille ci-dessous :
  19. *
  20. * ATTENTION : TOUTES LES FONCTIONS CI DESSOUS DOIVENT ETRE PREFIXEES DE "matrix."
  21. * Exemple matrix.Color(1,2,3)
  22. *
  23. * - Color(R, G, B) : une couleur représentée selon ses valeurs en rouge (Red), vert (Green) et bleu (Blue) entre 0 et 255
  24. * La couleur (0,0,0) correspond au noir complet (pixel éteint) et (255,255,255) au blanc le plus blanc
  25. * Site pour choisir les valeurs pour sa couleur : https://htmlcolorcodes.com/fr/
  26. *
  27. * - drawPixel(x, y, color) : met le pixel en (x,y) à la couleur color
  28. *
  29. * - drawLine(x0, y0, x1, y1, color) : dessine une ligne droite entre (x0, y0) et (x1, y1) de la couleur color
  30. *
  31. * - drawRect(x0, y0, w, h, color) OU fillRect(x0, y0, w, h, color) : dessine un rectangle avec le côté haut-gauche en (x0, y0) de largeur w et de hauteur h avec la couleur color
  32. * drawRect va dessiner uniquement le contour du rectangle tandis que fillRect va aussi le remplir
  33. *
  34. * - drawCircle(x0, y0, r, color) OU fillCircle(x0, y0, r, color) : dessine un cercle de centre (x0, y0) et de rayon r avec la couleur color
  35. * drawCircle va dessiner uniquement le contour du cercle tandis que fillCircle va aussi le remplir
  36. *
  37. * - drawRoundRect(x0, y0, w, h, r, color) OU fillRoundRect(x0, y0, w, h, r, color) : dessine un rectangle avec le côté haut-gauche en (x0, y0) de largeur w et hauteur h avec des bords arrondis de rayon r et la couleur color
  38. * drawRoundRect va dessiner uniquement le contour du rectangle tandis que fillRoundRect va aussi le remplir
  39. *
  40. * - drawTriangle(x0, y0, x1, y1, x2, y2, color) OU fillTriangle(x0, y0, x1, y1, x2, y2, color) : dessine un triangle entre les points (x0, y0), (x1, y1), (x2, y2) avec la couleur color
  41. * drawTriangle va dessiner uniquement le contour du triangle tandis que fillTriangle va aussi le remplir
  42. *
  43. * - drawBitmap(x, y, bitmap, w, h, color) : dessine une image bitmap avec l'angle haut-gauche en (x, y) de largeur w, hauteur h et couleur color
  44. * L'image bitmap doit être convertie avec ce site http://javl.github.io/image2cpp/ et les paramètres suivants :
  45. * - Background color : White
  46. * - Invert Image Color : Permet d'inverser les couleurs (les pixels blancs seront allumés, les noirs éteints)
  47. * - Brightness Threshold : A ajuster pour que l'aperçu ressemble à l'image qui vous intéresse
  48. * - Scaling : scale to fit (vous pouvez expérimenter pour trouver ce qui marche le mieux)
  49. * - Center : Permet de centrer votre image dans le cadre (utile pour une image qui prend tout l'écran)
  50. * - Code output format : Arduino Code
  51. * - Identifier : Un nom pour votre image bitmap
  52. * - Draw mode : Horizontal
  53. *
  54. * - fillScreen(color) : Remplit l'écran avec la couleur color
  55. *
  56. *
  57. *
  58. * Infos pour l'utilisation des boutons poussoirs :
  59. * La fonction permettant d'actualiser l'état des boutons est readButtons(), elle est appelée automatiquement
  60. * mais il est possible de l'appeler vous même si besoin (ex: longue boucle)
  61. *
  62. * Pour tester si un bouton est pressé il suffit d'utiliser la condition
  63. * if (buttons & BOUTON_CHOISI) {}
  64. *
  65. * Les boutons disponibles sont
  66. * RIGHT_1, LEFT_1, UP_1, DOWN_1 pour le joueur 1 et RIGHT_2, LEFT_2, UP_2, DOWN_2 pour le joueur 2
  67. */
  68.  
  69. // Initialisation de la librairie
  70. Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(WIDTH, HEIGHT, PIN,
  71. NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +
  72. NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  73. NEO_GRB + NEO_KHZ800);
  74.  
  75. short buttons = 0x00;
  76. void readButtons() {
  77. for (int i = 0; i < BUTTONS; i++) {
  78. int state = digitalRead(buttons_pins[i]);
  79. bitWrite(buttons, i, !state);
  80. }
  81. }
  82.  
  83. /*
  84. * Jeux
  85. */
  86. class Program {
  87. public:
  88. virtual void setup() = 0;
  89. virtual void loop() = 0;
  90. };
  91.  
  92. /*******************************************************************************************************************
  93. *
  94. * LE JEU VA ICI
  95. *
  96. *******************************************************************************************************************/
  97.  
  98. class Jeu: public Program {
  99. public:
  100. Jeu() {}
  101.  
  102. int xj1=7;
  103. int yj1=0;
  104. int pxj1=7;
  105. int pyj1=0;
  106. int vxj1 = 0;
  107. int vyj1 = 1;
  108. int t=0;
  109. int pixels_occupe[t][t];
  110. int draw_delay = 100;
  111. long last_draw = millis();
  112.  
  113. int input_delay = 100;
  114. long last_input = millis();
  115.  
  116. int update_delay = 200;
  117. long last_update = millis();
  118.  
  119. void setup() {
  120.  
  121. }
  122.  
  123. void loop() {
  124. // Vérifie les boutons
  125. if (millis() > last_input + input_delay) {
  126. last_input = millis();
  127.  
  128. input();
  129. }
  130.  
  131. // Vérifie le jeu
  132. if (millis() > last_update + update_delay) {
  133. last_update = millis();
  134.  
  135. update();
  136. }
  137.  
  138. // Vérifie l'écran
  139. if (millis() > last_draw + draw_delay) {
  140. last_draw = millis();
  141.  
  142. draw();
  143. matrix.show();
  144. }
  145. }
  146.  
  147. // Regarde l'état des boutons
  148. void input() {
  149. if (buttons & UP_1){
  150. if (vyj1==0){
  151. vyj1++;
  152. vxj1=0;
  153. }
  154. }
  155. if (buttons & DOWN_1){
  156. if (vyj1==0){
  157. vyj1--;
  158. vxj1=0;
  159. }
  160. }
  161. if (buttons & LEFT_1){
  162. if (vxj1==0){
  163. vxj1--;
  164. vyj1=0;
  165. }
  166. }
  167. if (buttons & RIGHT_1){
  168. if (vxj1==0){
  169. vxj1--;
  170. vyj1=0;
  171. }
  172. }
  173. }
  174.  
  175. // Gère les mises à jour du jeu
  176. void update() {
  177. pxj1=xj1;
  178. pyj1=yj1;
  179. xj1+=vxj1;
  180. yj1+=vyj1;
  181. if (xj1>= matrix.width() || yj1>= matrix.height()|| xj1<0 || yj1<0){
  182. // le joueur 1 à perdu
  183. }
  184. for (int i=0; i <= t; i++){
  185. if (xj1==pixels_occupe[i][0] && yj1==pixels_occupe[i][1])
  186. {
  187. // le joueur 1 à perdu
  188. }
  189. }
  190.  
  191. }
  192.  
  193. // Gère l'affichage
  194. void draw() {
  195. matrix.drawPixel(xj1, yj1, matrix.Color(160,200,255));
  196. int pixels_occupe[t]={xj1,yj1};
  197. t++;
  198. matrix.drawPixel(pxj1, pyj1, matrix.Color(0,0,255));
  199. }
  200. };
  201.  
  202. /*******************************************************************************************************************
  203. *
  204. * RIEN D'INTERRESSANT EN DESSOUS
  205. *
  206. *******************************************************************************************************************/
  207.  
  208. // Initialisation des jeux
  209. Jeu jeu;
  210.  
  211. void setup() {
  212. Serial.begin(115200);
  213.  
  214. matrix.begin();
  215. matrix.setBrightness(BRIGHTNESS);
  216.  
  217. // Remplit avec la couleur "noire" (= éteint) tout l'écran
  218. matrix.fillScreen(0);
  219. // Affiche les pixels sur l'écran
  220. matrix.show();
  221.  
  222. // Initialise le générateur d'aléatoire
  223. randomSeed(analogRead(A0));
  224.  
  225. // Initialise les boutons poussoirs
  226. for (int i = 0; i < BUTTONS; i++) {
  227. pinMode(buttons_pins[i], INPUT_PULLUP);
  228. }
  229.  
  230. jeu.setup();
  231. }
  232.  
  233. void loop() {
  234. // Gestion des boutons poussoirs
  235. readButtons();
  236.  
  237. jeu.loop();
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement