Code Monkey home page Code Monkey logo

unbeatable-rock-paper-scissors's Introduction

Unbeatable Rock Paper Scissors

Auteur

Visuel

Rendu de l'algorithme

Description

Programme personnel développé en Python afin de découvrir la bibliothèque Mediapipe.

L'idée est de créer un joueur "imbattable" au célèvre jeu "Pierre, Feuille, Ciseaux !". Le projet est initialement parti d'une petite plaisanterie, où j'ai fait croire à la création d'une intelligence artificielle très évoluée qui serait imbattable. Le programme cherche en réalité à identifier la forme de la main le plus vite possible pour trouver le coup battant celui du joueur. La rapidité du programme et de la bibliothèque Mediapipe permettent en effet de traiter en temps réel le mouvement des mains.

Informations supplémentaires

La plupart des joueurs ayant tendance à former un poing derrière leur tête et à ne le déployer qu'au cours du mouvement, le programme utilise une file (deque) afin de comparer 3 mouvements. Lorsque les trois mouvements sont identiques, le programme décide en fonction de la position des doigts le mouvement effectué par l'utilisateur, puis trouve une parade. Il attendra toutefois d'en avoir 5 identiques avant de terminer le round, permettant d'éviter des erreurs en sa faveur. Ainsi, il est possible de gagner contre l'ordinateur dans de rares situations !

Lorsqu'un round est terminé, vous pouvez appuer sur la barre d'espace pour en commencer un nouveau.

Il est possible que l'ordinateur soit "bloqué" et joue sans montrer votre mouvement. Cela signifie qu'il n'est pas sûr de ce que vous avez fait. Par précaution et pour ne pas donner de points immérité, le round sera considéré comme nul et vous pourrez relancer un round avec ESPACE.

Position des doigts

Le moment le plus important est celui-ci :

            fingers_open = [res[4][1] < res[3][1], #true if thumb is open
                            res[8][2] < res[6][2], #true if index is open
                            res[12][2] < res[10][2], #true if middle finger is open
                            res[16][2] < res[14][2], #true if ring finger is open
                            res[20][2] < res[18][2] #true if little finger is open
                            ]

Ce code réside sur le schéma suivant :

Description d'une main

Analysons-le ensemble :

  • tout d'abord, le pouce est un cas particulier, qui se ferme horizontalement. C'est la raison pour laquelle on cherche à comparer la composante horizontale du bout du pouce par rapport au milieu du doigt.
  • Pour les autres doigts, on cherche à vérifier que le milieu du doigt est au-dessus de son extrémité.

Déterminer le signe

Pour déterminer le signe, je procède de la sorte :

  • Par défaut, on suppose que la pierre va être jouée
  • Si l'annulaire ou l'auriculaire sont levés, le joueur a fait feuille
  • S'ils sont fermés et que l'index et le majeur sont ouverts, le joueur a fait ciseaux

Comment jouer ?

Récupération des sources

  • Depuis l'invité de commandes (HTTP):
$ git clone https://github.com/jeunotca/unbeatable-rock-paper-scissors.git
$ cd unbeatable-rock-paper-scissors

Dépendances

Ce programme a été réalisé à l'aide de :

Vous pouvez installer les dépendances avec :

pip install -r requirements.txt

Exécution

python main.py

Au cours du jeu, appuyez sur ESPACE pour lancer le round suivant. Appuyez sur R pour réinitialiser le score, et sur Esc pour quitter.

unbeatable-rock-paper-scissors's People

Contributors

alexandrejeunotcaire avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.