Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Créer un jeu Snake sur matrice LED 16x16 avec Arduino UNO

Composants et fournitures

Arduino UNO × 1
Matrice LED RGB NeoPixel NeoMatrix 16x16 × 1
Fils de connexion (jumper wires) × 1
Joystick analogique (générique) × 1
Plaque d'essai (breadboard) × 1

À propos de ce projet

Salut ! J'apprends les possibilités d'Arduino. J'ai décidé de recréer le classique jeu Snake de mon vieux Nokia. Voici le résultat.

J'ai utilisé une matrice LED 16x16, un joystick et un Arduino UNO. Ce n'était pas facile car chaque LED est connectée en série, donc la logique de déplacement est un peu délicate.

Vous contrôlez le serpent. Mangez de la nourriture, grandissez, et... mourez. Le code est prêt à être amélioré.

Amusez-vous bien ! Si vous aimez, n'hésitez pas à vous abonner à ma chaîne YouTube et Instagram :) Elles sont en russe, mais je ferai des sous-titres très bientôt.

Créer un jeu Snake sur matrice LED 16x16 avec Arduino UNO
Créer un jeu Snake sur matrice LED 16x16 avec Arduino UNO
Créer un jeu Snake sur matrice LED 16x16 avec Arduino UNO

Code

#include  
// Réglages matrice 
#define NUM_LEDS 256 
#define DATA_PIN 3 
#define BRIGHTNESS 8 

// Réglages joystick 
#define pinX A2 
#define pinY A1 
#define swPin 2 

int snake[256]; 
int snakeSize = 2; 
int snakeSpeed = 500; 
int row, col; 
int lastDirection = 135; 
int i, newDirection, OlddX = 1, OlddY, f; 
int red, green, blue, fred, fgreen, fblue; 

CRGB leds[NUM_LEDS]; 

void setup() { 
  red = random(0, 255); 
  green = random(0, 255); 
  blue = random(0, 255); 
  fred = random(127, 255); 
  fgreen = random(127, 255); 
  fblue = random(127, 255); 
  Serial.begin(9600); 
  pinMode(pinX, INPUT); 
  pinMode(pinY, INPUT); 
  pinMode(swPin, INPUT); 
  digitalWrite(swPin, HIGH); 
  FastLED.addLeds(leds, NUM_LEDS); 
  FastLED.setBrightness(BRIGHTNESS); 
  for(i = 0; i <= 255; i++) snake[i] = 0; 
  for(i = 0; i <= snakeSize; i++) snake[i] = lastDirection + i; 
  f = random(0, 255); 
  FastLED.show(); 
} 

int Snakedirection(int last, int dX, int dY) { 
  dX = map(dX, 0, 1000, -1, 1); 
  dY = map(dY, 0, 1000, -1, 1); 
  if(dX == 0 && dY == 0 && OlddX != dX) dX = OlddX; 
  if(dY == 0 && dX == 0 && OlddY != dY) dY = OlddY; 
  
  int newDirection = last; 
  if(dX != 0) { 
    if (row & 1) { 
      if(col == 0 && dX == 1) newDirection = last - 15; 
      else if(col == 15 && dX == -1) newDirection = last + 15; 
      else newDirection = last + dX; 
    } else { 
      if(col == 0 && dX == 1) newDirection = last + 15; 
      else if(col == 15 && dX == -1) newDirection = last - 15; 
      else newDirection = last - dX; 
    } 
  } 
  if(dY < 0) { 
    if(row == 15 && dY == -1) newDirection = col; 
    else if (row & 1) newDirection = last + (col * 2) + 1; 
    else newDirection = last + (16 - col - 1) + (16 - col); 
  } 
  if(dY > 0) { 
    if(row == 0 && dY == 1) newDirection = 255 - col; 
    else if (row & 1) newDirection = last - (last - 16 * row) - (16 - col); 
    else newDirection = last - (col * 2) - 1; 
  } 
  OlddX = dX; 
  OlddY = dY; 
  return newDirection; 
} 

int snakeMove(int snakeDirection) { 
  for(i = 0; i <= 255; i++) { 
    if(snake[i] == snakeDirection) death(); 
  } 
  FastLED.clear(); 
  for(i = snakeSize; i >= 1; i--) snake[i] = snake[i-1]; 
  snake[0] = snakeDirection; 
  for(i = 0; i <= 255; i++) { 
    if(snake[i]) leds[snake[i]].setRGB(red, green, blue); 
  } 
  FastLED.show(); 
  
  row = (int)(snakeDirection / 16); 
  if (row & 1) col = (row + 1) * 16 - snakeDirection - 1; 
  else col = snakeDirection - row * 16; 
  return snakeDirection; 
} 

void food(int eaten) { 
  if(eaten == f) { 
    snakeSize++; 
    f = random(0, 255); 
    red = fred; green = fgreen; blue = fblue; 
    fred = random(0, 255); 
    fgreen = random(0, 255); 
    fblue = random(0, 255); 
    snakeSpeed = snakeSpeed / 1.1; 
  } else { 
    leds[f].setRGB(fred, fgreen, fblue); 
    FastLED.show(); 
  } 
} 

void death() { 
  snakeSize = 2; 
  snakeSpeed = 500; 
  red = 255; green = 0; blue = 0; 
} 

void color(boolean sw) { 
  if(!sw) { 
    red = random(0, 255); 
    green = random(0, 255); 
    blue = random(0, 255); 
  } 
} 

void loop() { 
  color(digitalRead(swPin)); 
  newDirection = Snakedirection(lastDirection, analogRead(pinX), analogRead(pinY)); 
  lastDirection = snakeMove(newDirection); 
  food(newDirection); 
  delay(snakeSpeed); 
}

Processus de fabrication

  1. Manette de jeu USB Arduino DIY – Construisez votre propre gamepad haute performance
  2. Construire une console Pong 24×16 LED avec Arduino Nano et MAX7219
  3. Jeu Tetris sur Matrice LED 16×8 DIY avec Arduino Nano
  4. Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
  5. Affichage LED matrice interactif porte avec capteur PIR - Salutations fêtes Arduino
  6. Construire un robot quadrupède Arduino intelligent : guide étape par étape
  7. Pixel Chaser : Jeu LED interactif à une touche avec Arduino Nano
  8. Horloge à bascule Arduino avec matrice LED 8×8 – Projet DIY d'horloge temps réel
  9. Mélangeur de couleurs RVB Arduino – Projet DIY débutant