Twang32 : Différence entre versions
(Page créée avec « ==présentation du projet== <html> <iframe width="560" height="315" src="https://www.youtube.com/embed/RXpfa-ZvUMA" frameborder="0" allow="accelerometer; autoplay; encrypt... ») |
|||
(12 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
==présentation du projet== | ==présentation du projet== | ||
+ | |||
+ | Surtout ici sur le site web de l'inventeur du jeu ! https://www.aipanic.com/projects/wobbler | ||
+ | |||
+ | |||
<html> | <html> | ||
<iframe width="560" height="315" src="https://www.youtube.com/embed/RXpfa-ZvUMA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> | <iframe width="560" height="315" src="https://www.youtube.com/embed/RXpfa-ZvUMA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> | ||
Ligne 5 : | Ligne 9 : | ||
http://www.buildlog.net/blog/2018/04/building-a-twang32/ | http://www.buildlog.net/blog/2018/04/building-a-twang32/ | ||
+ | |||
+ | ===Liste du matériel=== | ||
+ | * une butée de porte à ressort | ||
+ | * un esp32 | ||
+ | * Un mini haut parleur | ||
+ | * un mini amplificateur PAM8403 | ||
+ | * Un ruban de led à 144leds/m | ||
+ | * Une alimentation électrique 5V 10 A. | ||
+ | * Un condensateur 1000uF 10V | ||
+ | |||
+ | ===Montage=== | ||
+ | |||
+ | [[Fichier:Twang32 bb.png|600px]] | ||
+ | |||
+ | ===le jeu=== | ||
+ | ====Vue d'ensemble==== | ||
+ | |||
+ | Ce qui suit est un aperçu rapide du code pour vous aider à comprendre et à adapter le jeu à vos besoins. | ||
+ | |||
+ | Le jeu se joue sur une ligne de 1000 unités, la position des ennemis, du joueur, de la lave etc. va de 0 à 1000 et les LEDs qui les représentent sont dérivées en utilisant la fonction getLED(). Vous n'avez pas besoin de vous en préoccuper mais c'est bon à savoir pour des choses comme la largeur de l'attaque et la vitesse de déplacement maximale du joueur. Quel que soit le nombre de LEDs, tout se passe dans cette ligne de 1000 unités de large. | ||
+ | |||
+ | LED SETUP Définit la quantité de LEDs ainsi que les broches de données et d'horloge utilisées. J'ai testé plusieurs bandes APA102-C et l'ordre des couleurs change parfois de BGR à GBR, si le joueur n'est pas bleu, la sortie verte et les ennemis rouges, c'est cette partie qu'il faut changer. La luminosité doit être comprise entre 50 et 255, utilisez un chiffre plus bas si vous jouez la nuit ou si vous voulez utiliser une alimentation plus petite. DIRECTION peut être réglé sur 0 ou 1 pour inverser l'orientation du jeu. Dans setup() il y a une ligne FastLED.addLeds(), dans laquelle vous pouvez changer pour une autre marque de bande LED comme la WS2812 moins chère. | ||
+ | |||
+ | Le jeu dispose également de 3 LED régulières pour les indicateurs de vie (le joueur dispose de 3 vies qui se réinitialisent à chaque fois qu'il monte de niveau). Les broches de ces LEDs sont stockées dans lifeLEDs[] et sont mises à jour dans la fonction updateLives(). | ||
+ | |||
+ | JOYSTICK SETUP Tous les paramètres sont commentés dans le code, vous pouvez le faire fonctionner en mode avant/arrière et latéral en changeant JOYSTICK_ORIENTATION. Ajustez l'ATTACK_THRESHOLD si le "Twanging" est trop sensible et le JOYSTICK_DEADZONE si le joueur dérive lentement lorsqu'il n'y a pas d'input (parce qu'il est difficile de mettre le MPU6050 au niveau mort). | ||
+ | |||
+ | WOBBLE ATTACK Définit la largeur et la durée (ms) de l'attaque. | ||
+ | |||
+ | POOLS Il s'agit des pools d'objets pour les ennemis, les particules, la lave, les convoyeurs, etc. Vous pouvez modifier la quantité de chacun d'entre eux si vos niveaux en utilisent plus ou si vous voulez économiser de la mémoire, mais n'oubliez pas de mettre à jour les comptes respectifs pour éviter les erreurs. | ||
+ | |||
+ | USE_GRAVITY 0/1 pour définir si les particules créées par le joueur qui se fait tuer doivent tomber vers le point de départ, la variable BEND_POINT peut être définie pour marquer le point auquel la bande de LEDs passe de l'horizontale à la verticale. Le jeu a une largeur de 1000 unités (quel que soit le nombre de LED), donc 500 serait le point médian. Si cela vous semble confus, mettez USE_GRAVITY à 0. | ||
+ | |||
+ | ===Modifier / Créer des niveaux=== | ||
+ | |||
+ | Trouvez la fonction loadLevel(), vous y trouverez une instruction switch avec les 10 niveaux que j'ai créés. Ils appellent tous différentes fonctions et variables pour configurer le niveau. Chacune d'entre elles est décrite ci-dessous : | ||
+ | |||
+ | playerPosition ; Où le joueur commence sur la ligne de 0 à 1000. Je l'ai mis à 200 dans le premier niveau pour que le joueur puisse voir le mouvement même si la première action qu'il fait est de pousser le joystick vers la gauche. | ||
+ | |||
+ | ====spawnEnemy(position, direction, speed, wobble) ; (10 ennemis max)==== | ||
+ | |||
+ | * position : 0 à 1000 | ||
+ | * direction : 0/1, direction initiale du déplacement | ||
+ | * speed : >=0, vitesse de l'ennemi, n'oubliez pas que le jeu a une largeur de 1000 et tourne à 60fps. Je recommande une vitesse comprise entre 1 et 4 | ||
+ | * wobble : 0 = ennemi en mouvement régulier, 1 = ennemi en vague sinusoïdale, dans ce cas la vitesse définit la largeur de la vague. | ||
+ | |||
+ | ====spawnPool[poolNumber].Spawn(position, rate, speed, direction) ; (2 spawners max)==== | ||
+ | |||
+ | * Un spawn pool est un point qui génère des ennemis pour toujours | ||
+ | * position : 0 à 1000 | ||
+ | * rate : millisecondes entre les spawns, 1000 = 1 seconde | ||
+ | * speed : vitesse de l'ennemi qu'il génère | ||
+ | * direction : 0=vers le début, 1=loin du début | ||
+ | |||
+ | ====spawnLava(startPoint, endPoint, ontime, offtime, offset) ; (4 bassins de lave maximum)==== | ||
+ | |||
+ | * point de départ : 0 à 1000 | ||
+ | * endPoint : 0 à 1000, combiné avec startPoint, il définit l'emplacement et la taille de la lave | ||
+ | * ontime : Durée (ms) pendant laquelle la lave est allumée | ||
+ | * offtime : Durée pendant laquelle la lave est activée | ||
+ | * offset : Combien de temps (ms) après le début du niveau avant que la lave ne s'allume, utilisez ceci pour créer des motifs avec plusieurs laves. | ||
+ | * grow (croissance) : Ceci spécifie le taux de croissance. Utilisez 0 pour une croissance nulle. Une croissance raisonnable est de 0,1 à 0,5. | ||
+ | * flow (flux) : Ce paramètre indique le taux et la direction du flux. Les valeurs raisonnables sont comprises entre 0,2 et 0,8. | ||
+ | |||
+ | ====spawnConveyor(startPoint, endPoint, speed) ; (2 convoyeurs maximum)==== | ||
+ | * point de départ, point d'arrivée : Identiques à la lave | ||
+ | * speed : La direction et la vitesse de déplacement. Les déplacements négatifs se font vers la base et les déplacements positifs vers la sortie. Doit être inférieur à +/- la vitesse maximale du joueur. | ||
+ | |||
+ | ====spawnBoss() ; (un seul, ne pas modifier le niveau du boss)==== | ||
+ | |||
+ | * Il n'y a pas de paramètres pour un boss, ils apparaissent toujours au même endroit et ont 3 vies. Ajustez les valeurs de Boss.h pour modifier | ||
+ | |||
+ | Traduit du github du projet avec www.DeepL.com/Translator (version gratuite) | ||
==le github du projet== | ==le github du projet== | ||
https://github.com/bdring/TWANG32 | https://github.com/bdring/TWANG32 | ||
− | ==installer les drivers pour la carte | + | ===Un fork intéressant=== |
− | https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers | + | https://www.hackster.io/mircemk/twang-esp32-led-strip-1d-game-370563 |
+ | |||
+ | <html> | ||
+ | <iframe width="560" height="315" src="https://www.youtube.com/embed/_6ZrDjNiuQI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> | ||
+ | </html> | ||
+ | |||
+ | ==l'ESP32== | ||
+ | installer les drivers pour la carte : https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers | ||
+ | |||
+ | préparer le logiciel arduino : https://projetsdiy.fr/programmer-cartes-esp32-ide-arduino-macos-windows-arm-raspberry/ | ||
+ | |||
+ | [[Catégorie:Arduino]] | ||
+ | [[Catégorie:jeu]] | ||
+ | [[Catégorie:ESP32]] | ||
+ | [[Catégorie:led]][[Catégorie:ruban de led]][[Catégorie:WS1812B]] |
Version du 3 décembre 2023 à 12:13
Sommaire
- 1 présentation du projet
- 1.1 Liste du matériel
- 1.2 Montage
- 1.3 le jeu
- 1.4 Modifier / Créer des niveaux
- 1.4.1 spawnEnemy(position, direction, speed, wobble) ; (10 ennemis max)
- 1.4.2 spawnPool[poolNumber].Spawn(position, rate, speed, direction) ; (2 spawners max)
- 1.4.3 spawnLava(startPoint, endPoint, ontime, offtime, offset) ; (4 bassins de lave maximum)
- 1.4.4 spawnConveyor(startPoint, endPoint, speed) ; (2 convoyeurs maximum)
- 1.4.5 spawnBoss() ; (un seul, ne pas modifier le niveau du boss)
- 2 le github du projet
- 3 l'ESP32
présentation du projet
Surtout ici sur le site web de l'inventeur du jeu ! https://www.aipanic.com/projects/wobbler
http://www.buildlog.net/blog/2018/04/building-a-twang32/
Liste du matériel
- une butée de porte à ressort
- un esp32
- Un mini haut parleur
- un mini amplificateur PAM8403
- Un ruban de led à 144leds/m
- Une alimentation électrique 5V 10 A.
- Un condensateur 1000uF 10V
Montage
le jeu
Vue d'ensemble
Ce qui suit est un aperçu rapide du code pour vous aider à comprendre et à adapter le jeu à vos besoins.
Le jeu se joue sur une ligne de 1000 unités, la position des ennemis, du joueur, de la lave etc. va de 0 à 1000 et les LEDs qui les représentent sont dérivées en utilisant la fonction getLED(). Vous n'avez pas besoin de vous en préoccuper mais c'est bon à savoir pour des choses comme la largeur de l'attaque et la vitesse de déplacement maximale du joueur. Quel que soit le nombre de LEDs, tout se passe dans cette ligne de 1000 unités de large.
LED SETUP Définit la quantité de LEDs ainsi que les broches de données et d'horloge utilisées. J'ai testé plusieurs bandes APA102-C et l'ordre des couleurs change parfois de BGR à GBR, si le joueur n'est pas bleu, la sortie verte et les ennemis rouges, c'est cette partie qu'il faut changer. La luminosité doit être comprise entre 50 et 255, utilisez un chiffre plus bas si vous jouez la nuit ou si vous voulez utiliser une alimentation plus petite. DIRECTION peut être réglé sur 0 ou 1 pour inverser l'orientation du jeu. Dans setup() il y a une ligne FastLED.addLeds(), dans laquelle vous pouvez changer pour une autre marque de bande LED comme la WS2812 moins chère.
Le jeu dispose également de 3 LED régulières pour les indicateurs de vie (le joueur dispose de 3 vies qui se réinitialisent à chaque fois qu'il monte de niveau). Les broches de ces LEDs sont stockées dans lifeLEDs[] et sont mises à jour dans la fonction updateLives().
JOYSTICK SETUP Tous les paramètres sont commentés dans le code, vous pouvez le faire fonctionner en mode avant/arrière et latéral en changeant JOYSTICK_ORIENTATION. Ajustez l'ATTACK_THRESHOLD si le "Twanging" est trop sensible et le JOYSTICK_DEADZONE si le joueur dérive lentement lorsqu'il n'y a pas d'input (parce qu'il est difficile de mettre le MPU6050 au niveau mort).
WOBBLE ATTACK Définit la largeur et la durée (ms) de l'attaque.
POOLS Il s'agit des pools d'objets pour les ennemis, les particules, la lave, les convoyeurs, etc. Vous pouvez modifier la quantité de chacun d'entre eux si vos niveaux en utilisent plus ou si vous voulez économiser de la mémoire, mais n'oubliez pas de mettre à jour les comptes respectifs pour éviter les erreurs.
USE_GRAVITY 0/1 pour définir si les particules créées par le joueur qui se fait tuer doivent tomber vers le point de départ, la variable BEND_POINT peut être définie pour marquer le point auquel la bande de LEDs passe de l'horizontale à la verticale. Le jeu a une largeur de 1000 unités (quel que soit le nombre de LED), donc 500 serait le point médian. Si cela vous semble confus, mettez USE_GRAVITY à 0.
Modifier / Créer des niveaux
Trouvez la fonction loadLevel(), vous y trouverez une instruction switch avec les 10 niveaux que j'ai créés. Ils appellent tous différentes fonctions et variables pour configurer le niveau. Chacune d'entre elles est décrite ci-dessous :
playerPosition ; Où le joueur commence sur la ligne de 0 à 1000. Je l'ai mis à 200 dans le premier niveau pour que le joueur puisse voir le mouvement même si la première action qu'il fait est de pousser le joystick vers la gauche.
spawnEnemy(position, direction, speed, wobble) ; (10 ennemis max)
- position : 0 à 1000
- direction : 0/1, direction initiale du déplacement
- speed : >=0, vitesse de l'ennemi, n'oubliez pas que le jeu a une largeur de 1000 et tourne à 60fps. Je recommande une vitesse comprise entre 1 et 4
- wobble : 0 = ennemi en mouvement régulier, 1 = ennemi en vague sinusoïdale, dans ce cas la vitesse définit la largeur de la vague.
spawnPool[poolNumber].Spawn(position, rate, speed, direction) ; (2 spawners max)
- Un spawn pool est un point qui génère des ennemis pour toujours
- position : 0 à 1000
- rate : millisecondes entre les spawns, 1000 = 1 seconde
- speed : vitesse de l'ennemi qu'il génère
- direction : 0=vers le début, 1=loin du début
spawnLava(startPoint, endPoint, ontime, offtime, offset) ; (4 bassins de lave maximum)
- point de départ : 0 à 1000
- endPoint : 0 à 1000, combiné avec startPoint, il définit l'emplacement et la taille de la lave
- ontime : Durée (ms) pendant laquelle la lave est allumée
- offtime : Durée pendant laquelle la lave est activée
- offset : Combien de temps (ms) après le début du niveau avant que la lave ne s'allume, utilisez ceci pour créer des motifs avec plusieurs laves.
- grow (croissance) : Ceci spécifie le taux de croissance. Utilisez 0 pour une croissance nulle. Une croissance raisonnable est de 0,1 à 0,5.
- flow (flux) : Ce paramètre indique le taux et la direction du flux. Les valeurs raisonnables sont comprises entre 0,2 et 0,8.
spawnConveyor(startPoint, endPoint, speed) ; (2 convoyeurs maximum)
- point de départ, point d'arrivée : Identiques à la lave
- speed : La direction et la vitesse de déplacement. Les déplacements négatifs se font vers la base et les déplacements positifs vers la sortie. Doit être inférieur à +/- la vitesse maximale du joueur.
spawnBoss() ; (un seul, ne pas modifier le niveau du boss)
- Il n'y a pas de paramètres pour un boss, ils apparaissent toujours au même endroit et ont 3 vies. Ajustez les valeurs de Boss.h pour modifier
Traduit du github du projet avec www.DeepL.com/Translator (version gratuite)
le github du projet
https://github.com/bdring/TWANG32
Un fork intéressant
https://www.hackster.io/mircemk/twang-esp32-led-strip-1d-game-370563
l'ESP32
installer les drivers pour la carte : https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
préparer le logiciel arduino : https://projetsdiy.fr/programmer-cartes-esp32-ide-arduino-macos-windows-arm-raspberry/