Braving the fiery pathway, players embark on a thrilling adventure in the chicken road game!

Braving the fiery pathway, players embark on a thrilling adventure in the chicken road game!

The world of online gaming has seen various innovative concepts emerge, and among them, the chicken road game stands out for its unique blend of strategy, excitement, and a humorous premise. In this game, players take on the role of a chicken navigating a perilous path filled with roaring furnaces and fiery threats. The objective is simple: make it past as many ovens as possible without getting burned. With each oven crossed, the stakes increase, adding to the tension and thrill of the game.

This adventurous gameplay is not just about luck; it requires skillful timing and strategic planning. Players must carefully calculate their jumps, deciding when to leap and when to pause to avoid becoming dinner. The experience is akin to playing a modern-day, virtual version of ‘The Floor is Lava,’ with the added element of increasing stakes that keep players returning for more. The charm of this game lies in its simplicity and the sheer unpredictability of each jump, making it a captivating choice for both casual and seasoned gamers.

As we delve deeper into the mechanics, strategies, and variations of the chicken road game, we’ll uncover why it has captivated players worldwide. This article will explore the game’s essential features, strategies for success, and the various elements that make it a must-try for gaming enthusiasts. Gather your courage, and let’s embark on this journey together!

Understanding the Basics of the Chicken Road Game

The chicken road game operates on a straightforward premise, where players control a chicken on a road lined with ovens. The game begins with the player at the start of this perilous path, needing to jump over each oven to avoid getting cooked. Each successful jump increases the potential points and rewards, making the game progressively more intense. The first few ovens in the game serve as an introduction to the mechanics, allowing players to establish their rhythm.

As players advance, they will encounter increasingly challenging obstacles. To better understand the progression of the game, the following table illustrates the different levels of difficulty and the corresponding rewards:

Level
Ovens to Cross
Potential Reward
1 1 10 Points
2 3 30 Points
3 5 50 Points
4 7 70 Points
5 10 100 Points

In this table, you can see how the game evolves as levels progress. Players quickly realize that with each level up, not only do the number of ovens increase, but the stakes get higher too. It’s crucial to stay focused and plan each jump accordingly, as rushing can lead to mistakes. Understanding the dynamics of the game is essential, and proper pacing can lead to significant successes.

Strategies for Success in the Game

Success in the chicken road game requires more than just luck; it involves strategic thinking and quick reflexes. Players must develop their techniques, focusing on timing and predicting the speed of the ovens. One vital aspect is the mental preparation to handle the pressure that comes with higher levels. Players should get accustomed to the rhythm of the game and adapt their gameplay style based on their experiences. Recognizing patterns in the game can provide significant advantages.

Another key strategy involves using practice modes if available. Many platforms offer a trial version or beginner levels where players can refine their skills without stress. Engaging in these practice sessions can enhance one’s jump timing and decision-making skills. Here are some essential tips that every player should consider:

  • Analyze the Game Mechanics: Understanding how the game works can lead to better decision-making.
  • Practice Regularly: Continuous practice is the best way to improve your timing and confidence.
  • Stay Calm: Keeping a cool head helps in making sound decisions under pressure.
  • Observe Other Players: Learning from the strategies of experienced players can offer new insights.

The Evolution of the Game Mechanics

The chicken road game has evolved significantly, incorporating various features designed to enhance player experience. Early iterations were quite basic, focusing solely on jumping over ovens. However, developers have since introduced special features such as power-ups that provide temporary advantages, adding layers of strategy beyond mere jumping. These enhancements have made the game more engaging and competitive.

Players can now collect items along the way that grant them benefits such as speed boosts or shields that protect them for a short duration. Such power-ups influence gameplay, making it essential for players to strategize their collection wisely. Additionally, the scoring system has also become more complex, encouraging players to push their boundaries to achieve high scores.

Power-Up Type
Description
Duration
Speed Boost Increases speed for quick escaping. 5 seconds
Shield Grants temporary invulnerability. 3 seconds
Multi-Jump Allows additional jumps in succession. 3 seconds
Score Multiplier Increases the points earned for a period. 10 seconds

The introduction of such elements encourages gamers to not only focus on survival but also on maximizing their scores. As players integrate these features into their strategies, they can cultivate a more profound understanding of game mechanics, leading to better performance and enhanced enjoyment.

The Social Aspect of the Chicken Road Game

The allure of the chicken road game extends beyond mere gameplay; it fosters a community among players. Online platforms often feature leaderboards, allowing players to compete against each other and showcase their achievements. This competitive spirit drives engagement, making the game more enjoyable as players strive to climb the ranks. Players often share tips, strategies, and experiences, creating a supportive community.

Furthermore, multiplayer modes enable friends to join forces or compete against each other, amplifying the fun. The social interactions that arise from gameplay can lead to the formation of long-lasting friendships, transcending the digital realm. To enhance this side of the game, many developers regularly host tournaments that offer exclusive rewards. Engaging in such events gives players a chance to demonstrate their skills on a larger stage.

Benefits of Community Interaction

Being part of a gaming community has numerous advantages, including:

  1. Support and Guidance: New players can seek advice from seasoned gamers.
  2. Shared Experiences: Players can connect over common challenges and triumphs.
  3. Increased Motivation: Competing against friends can boost players’ determination to improve.
  4. Networking Opportunities: Players can find teammates for multiplayer modes.

Through their shared experiences, players find motivation and encouragement in their gaming pursuits. The chicken road game serves as a backdrop for community building, where shared skills and successes flourish.

The Graphics and Aesthetics of the Game

The aesthetic appeal of the chicken road game cannot be overlooked. Bright, colorful graphics immerse players in a playful environment that enhances their experience. The visual style often incorporates whimsical designs, making the game approachable and fun for all age groups. The humorous representation of a chicken attempting to evade fiery death adds a layer of charm that resonates with players.

The sound design complements the graphics effectively, with each jump producing satisfying audio cues that keep players engaged. Additionally, the game often features upbeat music that creates an energetic ambiance, amplifying the excitement during gameplay. These audio-visual elements collectively enhance the gaming experience, making players feel more immersed in the action.

User Interface Design

An intuitive user interface is critical for any game, and the chicken road game is no exception. The layout allows players to easily navigate options and access necessary features. Streamlined menus and clear instructions ensure players can jump right into the action without confusion.

With engaging graphics and an efficient interface, players can focus on the thrill of the game rather than being bogged down by technical difficulties. This attention to detail demonstrates the developers’ commitment to user satisfaction.

The Future of the Chicken Road Game

As gaming technology continues to evolve, the potential for the chicken road game is massive. Developers are constantly looking for ways to innovate and introduce new features that can captivate audiences. Future versions may include advanced technologies, such as augmented reality, which would elevate the gameplay experience to a whole new level, allowing players to physically interact with game elements in their real environment.

Furthermore, adding more customization options could enhance the player’s connection to their character. Players may wish to personalize their chicken characters with unique outfits or abilities, enabling a deeper emotional investment in the game. The opportunities for expansion and improvement are vast, promising exciting developments for fans of the chicken road game as the industry continues to grow.

In summary, the chicken road game is a multi-faceted experience that combines skill, strategy, and community interaction. It captures the essence of fun in gaming while offering a platform for competitive play and social interaction. As players navigate this thrilling journey, they discover not just a game, but a vibrant community where courage and creativity thrive.


DISTRIBUTEUR DE PIÈCES POUR BANC ROBOTIQUE INDUSTRIEL :

Sommaire :

•Ancien projet et objectifs
•Cahier des charges
•Fonctionnalités/Réalisation
-Distributeur de pièces
-Bras robotisé
•Matériel
•Programme des différents systèmes
-Arduino
-NodeRed
-Staubli
-Cognex
•Problèmes rencontrés
•Conclusion / Objectifs accomplis

1) Présentation de l’ancien projet :

Notre projet est basé sur l’amélioration d’un projet d’étudiants en DUT GEII de l’année précédente (Figure 1). Il consiste à créer une chaine automatisée afin de faire une démonstration lors des journées portes ouvertes de l’IUT. Le principe est simple, un automate dépose une pièce cylindrique d’une couleur quelconque sur un tapis roulant de manière aléatoire, une caméra envoie l’information de la couleur et de la position de la pièce au bras robotisé qui se chargera de déplacer la pièce pour la remettre dans le distributeur. Nous avons choisis d’améliorer ce projets, car le précédent distributeur automatisé utilisait des moteurs pas à pas, pilotés à l’aides de modules spécifique et d’une Arduino Mega (ce qui est très couteux).

Figure 1: Ancien projet

2) Cahier des Charges

Une fois que les besoins étaient définis nous avons pu établir un cahier des charges (Figure 2). Les deux fonctions principale sont:
-distribuer les pièces de manière aléatoire.
-stocker et trier ces pièces dans des compartiments.

Figure 2: Cahier des charges

3) Définition des fonctionnalités

A l’aide du cahier des charges nous avons pu définir des diagrammes FAST, afin de décrire toutes les fonctionnalités de notre projet (Figure 3.1 et 3.2).
Notre projet contient deux systèmes:

Partie distributeur de pièces (Figure 3.1):

Partie robot et caméra industrielle: (Figure 3.2):

4) Matériel

De ces différentes fonctionnalités, nous avons fait une liste de matériel, pour la création du distributeur de pièces (Figure 4):
Nous avons choisi d’utiliser un Arduino Yun car la programmation de petit systèmes embarqué comme celui-ci est très simple, de plus le Yun possède une interface Linux ce qui nous permettrait éventuellement de le relier à un serveur Node Red. Nous utilisons ces Servomoteurs, car ils ont un couple largement suffisant pour déplacer les pièces. Ils sont aussi très facilement pilotables avec la carte Arduino, car ils ne nécessitent pas de module spécifique. En revanche les capteurs de présence pièce initialement prévu n’ont pas été gardé car jugé trop encombrant pour ce qu’ils apportaient au projet.

Figure 4: Liste de matériel

5) Partie programmation

A) Programme Arduino

Le programme Arduino permet de distribuer une pièce de manière aléatoire à chaque fois que le délai d’attente a été passé. Nous utilisons la fonction rand() pour cela. Le programme a été conçue de manière modulaire, pour rajouter simplement des capteurs ou une nouvelle couleur de pièce c’est pour cela que tout est conçu sur des définitions de tableaux. Le pilotage des Servomoteurs se fait à l’aide d’une fonction ce qui permet de ne pas changer tout le programme en cas de changement du système de pilotage des actionneurs (Figure 5.1 et 5.2). On a aussi programmé un bouton poussoir, pour mettre en marche ce système. Pour éviter les problèmes de rebonds avec ce bouton, nous l’avons mis en parallèle avec une capacité (Figure 5.3).

Synoptique Arduino (Figure 5.1):

Programme Arduino (Figure 5.2):

#include <Servo.h>
#define pin_onoff 2

int temp_rotation = 420;
int pin_capteur[] = {7, 8, 7};
int valeur_pwm[][3] = {{700, 1480, 2300}, {700, 1485, 2300}, {700, 1475, 2300}};
int pin_moteur[] = {9, 10}; //11 et pin pwm obligatoire
int nbmoteur = (sizeof(pin_moteur)) / 2;
int temp_distribution = 1000;
unsigned long temp;
int distro;
bool onoff = 1;
Servo monservo;

void setup()
{
  Serial.begin(9600);
  for (int i = 0; i < nbmoteur ; i++ )
  {
    pinMode(pin_capteur[i], INPUT);
    pinMode(pin_moteur[i], OUTPUT);
  }

  //définition boutons IHM
  pinMode(pin_onoff, INPUT_PULLUP);
  pinMode(13,OUTPUT);
  attachInterrupt(digitalPinToInterrupt(pin_onoff), etat, FALLING);
  temp = millis(); //enregistre le temps écouler
  Serial.print("Durer de l'initialisation :");
  Serial.println(temp);
  Serial.print("NBMOTEUR :");
  Serial.println(nbmoteur);
}

void loop()
{
  
  if (onoff == 1) {
    if ((temp + temp_distribution) <= millis())
    {
      distro = random(0, nbmoteur);
      /*while (digitalRead(pin_capteur[distro]) == 0)
        {
        distro = random(0, nbmoteur);
        }*/
      lancement_piece(distro);
      temp = millis();
    }
  }
}



//fonction gérant le sens de rotation du servo moteur
void lancement_piece(int numero_moteur)
{
  moteur(numero_moteur, valeur_pwm[numero_moteur][0]);
  unsigned long temp = millis();
  while ((temp + temp_rotation) >= millis()) {}
  /*moteur(numero_moteur, valeur_pwm[numero_moteur][2]);
  temp = millis();
  while ((temp + temp_rotation) >= millis()) {}*/
  monservo.detach();
  //moteur(numero_moteur, valeur_pwm[numero_moteur][1]);
}

//fonction gérant le sens de rotation du servo moteur
void moteur(int numero_moteur, int valPWM)
{
  Serial.print("N° moteur:");
  Serial.print(numero_moteur);
  Serial.print("    Valeur PWM:");
  Serial.print(valPWM);
  Serial.print("    N° Pin Moteur");
  Serial.println(pin_moteur[numero_moteur]);
  monservo.attach(pin_moteur[numero_moteur]);
  monservo.writeMicroseconds(valPWM);

}
void etat() {
  temp = millis();
  if (100 + temp >= millis()) {
    onoff = !onoff;
    digitalWrite(13,onoff);
    //Serial.print("Etat On/Off : ");
    //Serial.println(onoff);
  }
}

Schéma électrique de l’Arduino:

Figure 5.3: schéma électrique de l’Arduino

Le programme est téléchargeable ici

B) Nodered

Synopsis global du transfert des données entre les différents systèmes (Figure 5.4):

Le serveur Node Red formate les données selon le destinataire et ajoute une interface web permettant ainsi des contrôles manuels.
Nous avons aussi défini aux travers de ce serveur 4 ports: Staubli receive « 1060 »; Staubli sent « 1061 »; cognex receive « 1062 »; cognex sent « 1063 » , ils permettent de faire la liaison entre la caméra et le robot (Figure 5.5).

Figure 5.5: Serveur + interface Node Red

Le fichier à importer pour recréer le serveur NodeRed est disponible ici.

C)Le Robot Staubli

Le robot (Figure 5.6), envoie des demandes de photo à la caméra jusqu’à la présence de pièces. Il attend les coordonnées ainsi que la couleur de la pièce, que la caméra va lui rendre. Une fois les données retournées, le robot ira saisir la pièce aux coordonnées indiquées et la posera au bon endroit (selon la couleur de cette pièce) (Figure 5.7 et 5.8).

Figure 5.6: Photo du robot

Synoptique du programme (Figure 5.7):

cls()
  prisetemp=prise
  deposetemp=depose
  deposetemp2=depose2

  // port receive 1060
  //port send 1061
  //S="1;300;500"


  while true
    S="0;0000;0000"  
    mult=0
    mult2=0
    couleur=0
    xpos=0
    ypos=0
    putln("Debut ")
    //  cameraSend=toString("snap",i)
    //  S=cameraReceive


    do
      clearBuffer(cameraReceive)
      clearBuffer(cameraSend)
      movej(j2,pince,rapide)
      cameraSend=toString("send",i) 
      S=cameraReceive 
      couleur=asc(S,0)-48

      put(couleur)
      putln("fin")
      delay(0.5)
    until(couleur>0)





    //teste le signe des coordonnées

    if asc(S,2)==45
      mult=-1
    endIf

    if asc(S,2)==48
      mult=1
    endIf

    if asc(S,7)==45
      mult2=-1
    endIf

    if asc(S,7)==48
      mult2=1
    endIf

    couleur=asc(S,0)-48

    xpos=mult*(asc(S,3)-48)*100+(asc(S,4)-48)*10+(asc(S,5)-48)
    put(xpos)
    put(" ")

    ypos=mult2*(asc(S,8)-48)*100+(asc(S,9)-48)*10+(asc(S,10)-48)
    put(ypos)

//gère le point de prise en fonction des coordonnées données par la cognex

    prisetemp.trsf.x=prise.trsf.x+xpos
    prisetemp.trsf.y=prise.trsf.y+ypos

    priseapp=appro(prisetemp,{0,0,-30,0,0,0})
    deposeapp=appro(deposetemp,{0,0,-30,0,0,0})
    deposeapp2=appro(deposetemp2,{0,0,-30,0,0,0})

    movej(j2,pince,lent)
    movej(priseapp,pince,rapide)
    movel(prisetemp,pince,lent)
    close(pince)
    movel(priseapp,pince,lent)

    //gère le point de dépose en fonction de la couleur
    if couleur==1

      movej(deposeapp,pince,rapide)
      movel(deposetemp,pince,lent)
      open(pince)
      movel(deposeapp,pince,lent)

    endIf

    if couleur==2

      movej(deposeapp2,pince,rapide)
      movel(deposetemp2,pince,lent)
      open(pince)
      movel(deposeapp2,pince,lent)
    endIf

    movej(j2,pince,rapide)
    putln(" fin")

  endWhile
  waitEndMove()

//Figure 5.8: Programme du robot

Le fichier du projet Staubli est disponible ici.

D) La caméra COGNEX

La caméra attend la demande d’une photo du Robot, s’il n’y a pas de pièces, alors la caméra reprend une photo jusqu’à la présence d’une pièce. Nous avons utilisé une syntaxe spécifique qui est commune au robot et à la caméra, pour la transmission de message (Figure 5.8).

Syntaxe 0;0000;0000
Explication Couleur de la pièces
(0 si absent;
1 si blanc; 2 si vert)
Coordonnées x (Premier caractère = ‘-‘ si Coordonnées négative ou ‘0’ si coordonnée positive)Coordonnées y (Premier caractère = ‘-‘ si Coordonnées négative ou ‘0’ si coordonnée positive))
Figure 5.8: Syntaxe des messages

Programme de la caméra cognex (Figure 5.9) :

La détection des pièces se fait à l’aide de la fonction « TrainPatMaxPattern »
Pour différentier deux couleurs (le vert et le blanc dans notre cas), on joue sur la luminosité.
Cela nous permet de différentier parfaitement la couleur verte de la blanche. Cependant, il arrive souvent qu’une pièce blanche soit détectée à la fois comme verte et blanche. C’est pour cela que quand une pièce est détectée comme verte et blanche, on priorise le blanc.
On a aussi créé un point de référence à l’aide de la fonction « Point », qui est le même pour le TX 60.
Enfin, toutes les coordonnées sont converties en millimètre pour pouvoir être exploitées par le robot.

Figure 5.9: Programme de la cognex

Le fichier du projet NodeRed est disponible ici.

6)Problèmes rencontrés

Les problèmes majeurs que nous avons rencontré sont :

– Chaque servomoteur a une valeur PWM différentes pour les mêmes mouvement (On as dû affiner ces valeurs par expérimentation).

– Les servomoteurs ont un courant de consommation crête bien plus élevé que ce que la datasheet donnait (1,1 A contre 1,6 A dans la réalité) ce qui créait des chutes de tension et redémarrait l’Arduino, on a donc dû surdimensionner l’alimentation.

– Les axes x et y de la caméra ne sont pas aligné avec les axes du bras robotisé ce qui empêche la bonne prise de pièces. Ce problème vient du robot Staubli, qui a son axe Y non perpendiculaire à la table.
Pour résoudre ce problème, il faut modifier le programme du Robot et mettre ceci dans les coordonnées du point de prise :

X’=X.cos(T) – Y sin(T)
Y’=X sin(T) + Y cos(T)

Ici X et Y sont les coordonnées envoyées par la caméra et T est l’angle d’écart qu’il y a entre le repère de la caméra et le repère du robot.

– La caméra positionnée au-dessus du robot est une caméra noire et blanc ce qui empêche la différenciation de plus de deux couleurs.

7) Conclusion

Ce projet fut très intéressant, il nous a permis d’appliquer les connaissances de In-sight et Staubli vu en cours directement sur un projet concret. En revanche la partie NodeRed fut une complète découverte !!

Cependant certain point reste à améliorer :
– Le système Arduino devrait être pilotable à travers l’interface web du serveur NodeRed.
– Intégrer la partie Arduino dans la maquette des DUT GMP, vu que cette maquette ne fut terminée qu’après nos séances de projets (Figure 7).
– Utiliser un condensateur pour éviter les chutes de tension plutôt que de surdimensionner l’alimentation.
– Utiliser une caméra couleur pour différencier plus de deux Couleurs.
– Calibrer les axes de la caméra et du robot TX 60.

Figure 7: Maquette des DUT GMP

Projet réalisé par :
– Erwan LAROPPE
-Louis MATHIS

Pour les curieux l’archive complète de notre projet est disponible ICI :
https://drive.google.com/drive/folders/1frOojPXsxAnuPceLYTKd4kq09x3KXn2p?usp=sharing