Jeu Arduino "Mini Boss Battle" – Projet rétro inspiré
Composants et fournitures
| Arduino UNO | × | 1 |
| Module contrôleur LCD 2x16 compatible Arduino | × | 1 |
Applications et services en ligne
- Arduino IDE
À propos de ce projet
C'est un jeu simulant un combat de boss. Vous utilisez les boutons pour déterminer vos attaques et changer d'écran. Votre adversaire (un démon) attaque en utilisant un algorithme aléatoire.
J'ai décidé de faire cela car c'est une idée amusante et un retour aux vieux jeux vidéo rétro comme les Pokémon et Super Mario originaux.
Les choix d'attaques sont :
- La Lame d'Isin (2 Dégâts)
- Le Bâton de Kanas (1 Dégât, +1 Attaque)
- Le Sort de Tories (0 Dégât, +2 Attaque)
- La Potion de Meseus (0 Dégât, +2 Santé)
Bonne chance et amusez-vous !
Code
- Code
- Code (version commentée)
Code (Arduino)
Ceci est le code. Copiez-collez-le dans l'IDE Arduino.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int turn = 1;
int screen = 0;
int health = 10;
int ehealth = 10;
int attackdamage = 0;
int stats = 0;
int totaldamage = attackdamage + stats;
int eattackdamage = 0;
int estats = 0;
int etotaldamage = eattackdamage + estats;
int enemyattack = random(1, 5);
int attack = 0;
void setup() {
totaldamage = attackdamage + stats;
etotaldamage = eattackdamage + estats;
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
totaldamage = attackdamage + stats;
etotaldamage = eattackdamage + estats;
estats = 0;
stats = 0;
attackdamage = 0;
eattackdamage = 0;
int button = analogRead(A0);
if (health <= 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Lose");
}
if (ehealth <= 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Win!");
}
if (button >= 500 && button <= 750) {
screen = screen + 1;
delay(1000);
enemyattack = random(1, 5);
Serial.println('5');
}
if (screen > 4) {
screen = 0;
turn = turn + 1;
enemyattack = random(1, 5);
}
if (screen == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Turn");
lcd.setCursor(0, 1);
lcd.print(turn);
} else if (screen == 1) {
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
if (button >= 0 && button <= 50) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Blade Of Isin");
attackdamage = 2;
} else if (button >= 50 && button <= 150) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Staff Of Kanas");
attackdamage = 1;
stats = stats + 1;
delay(1000);
} else if (button >= 150 && button <= 300) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Spell Of Tories");
attackdamage = 0;
stats = stats + 2;
delay(1000);
} else if (button >= 300 && button <= 500) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Potion Of Meseus");
attackdamage = 0;
health = health + 2;
delay(1000);
}
} else if (screen == 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("The Demon Used");
lcd.setCursor(0, 1);
if (enemyattack == 1) {
lcd.print("The Bone Spear");
eattackdamage = 2;
delay(1000);
} else if (enemyattack == 2) {
lcd.print("The Cursed Blade");
eattackdamage = 1;
estats = estats + 1;
delay(1000);
} else if (enemyattack == 3) {
lcd.print("The Cursed Spell");
eattackdamage = 3;
estats = estats - 2;
delay(1000);
} else if (enemyattack == 4) {
lcd.print("The Skull Ritual");
eattackdamage = 0;
estats = estats + 2;
delay(1000);
}
ehealth = ehealth - totaldamage;
health = health - totaldamage;
} else if (screen == 3) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Player Health:");
lcd.setCursor(0, 1);
lcd.print(health);
} else if (screen == 4) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enemy Health:");
lcd.setCursor(0, 1);
lcd.print(ehealth);
}
Serial.println(health, ehealth);
}
Code commenté (Arduino)
Ceci est le code avec commentaires explicatifs.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int turn = 1; // initialise les variables
int screen = 0;
int health = 10;
int ehealth = 10;
int attackdamage = 0;
int stats = 0;
int totaldamage = attackdamage + stats;
int eattackdamage = 0;
int estats = 0;
int etotaldamage = eattackdamage + estats;
int enemyattack = random(1, 5);
int attack = 0;
void setup() {
totaldamage = attackdamage + stats; // redéfinit les formules de calcul des dégâts
etotaldamage = eattackdamage + estats;
lcd.begin(16, 2); // initialise l'écran LCD
}
void loop() {
totaldamage = attackdamage + stats; // recalcule les formules de dégâts
etotaldamage = eattackdamage + estats;
estats = 0; // réinitialise certaines variables
stats = 0;
attackdamage = 0;
eattackdamage = 0;
int button = analogRead(A0);
if (health <= 0) { // vérifie si vous perdez
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Lose");
}
if (ehealth <= 0) { // vérifie si vous gagnez
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Win!");
}
if (button >= 500 && button <= 750) { // configure le bouton pour passer d'écran en écran
screen = screen + 1;
delay(1000);
enemyattack = random(1, 5);
Serial.println('5');
}
if (screen > 4) { // réinitialise les écrans s'il dépasse l'écran 4
screen = 0;
turn = turn + 1;
enemyattack = random(1, 5);
}
if (screen == 0) { // affiche le tour
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Turn");
lcd.setCursor(0, 1);
lcd.print(turn);
} else if (screen == 1) { // écran d'attaque
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
if (button >= 0 && button <= 50) { // Détermine les attaques
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Blade Of Isin");
attackdamage = 2;
} else if (button >= 50 && button <= 150) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Staff Of Kanas");
attackdamage = 1;
stats = stats + 1;
delay(1000);
} else if (button >= 150 && button <= 300) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Spell Of Tories");
attackdamage = 0;
stats = stats + 2;
delay(1000);
} else if (button >= 300 && button <= 500) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("You Used The");
lcd.setCursor(0, 1);
lcd.print("Potion Of Meseus");
attackdamage = 0;
health = health + 2;
delay(1000);
}
} else if (screen == 2) { // attaques de l'ennemi
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("The Demon Used");
lcd.setCursor(0, 1);
if (enemyattack == 1) {
lcd.print("The Bone Spear");
eattackdamage = 2;
delay(1000);
} else if (enemyattack == 2) {
lcd.print("The Cursed Blade");
eattackdamage = 1;
estats = estats + 1;
delay(1000);
} else if (enemyattack == 3) {
lcd.print("The Cursed Spell");
eattackdamage = 3;
estats = estats - 2;
delay(1000);
} else if (enemyattack == 4) {
lcd.print("The Skull Ritual");
eattackdamage = 0;
estats = estats + 2;
delay(1000);
}
ehealth = ehealth - totaldamage; // calcul des dégâts
health = health - totaldamage;
} else if (screen == 3) { // affiche la santé du joueur
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Player Health:");
lcd.setCursor(0, 1);
lcd.print(health);
} else if (screen == 4) { // affiche la santé de l'ennemi
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enemy Health:");
lcd.setCursor(0, 1);
lcd.print(ehealth);
}
} // fin du code
Schémas
Placez le LCD dans les broches sur l'Arduino

Processus de fabrication
- EMAR Mini : Robot d'assistance d'urgence compact et open-source
- Guide essentiel des mini-grues : types, utilisations et conseils de sélection
- Maîtriser l'utilisation des mini-pelles : Guide complet
- Sécurité des mini-pelles : Directives d'experts pour une utilisation sécurisée
- Guide d'expert : Transport sécurisé des mini-pelles vers les chantiers
- Soudage par projection : maîtriser les techniques d'emboutissage
- Mini VMC expliquée : fraisage CNC compact pour projets à petite échelle
- Mini perceuse : outil électrique compact pour perçage et fixation précis
- Comprendre les mini tours CNC : fonction, caractéristiques et avantages