IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Code python blackjack


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut Code python blackjack
    Bonsoir, pour un projet d'étude (TIPE) je code un jeu de blackjack en python.

    Mon programme est fonctionnel et presque complet, cependant je rencontre quelques problèmes :

    Avant toute chose si vous ouvrez le programme pensez à "fermer" la fonction affichage elle est très longue et répétitive

    1) je ne sais pas comment coder le cas ou le joueur a une paire et crée 2 mains en séparant sa paire

    2) j'ai tenté de faire un affichage mais c'est long et pas optimal de multiplier les "print" et cela me fait énormément de cas à cause de la carte 10

    3) j'ai alors essayé avec d'autres moyens (PIL, matplotlib) sans réel succès et également avec pygame dont je maitrise les bases

    Mon problème est le suivant : le nom de ma carte dépend de la carte dans la main du joueur donc le nom du chemin pour afficher la carte également

    4) j'ai simplement réussi à trouver un jeu de cartes en gif de mauvaise qualité, si quelqu'un a ou sait où trouver mieux je suis preneur !

    Si vous avez des conseils pour améliorer ou optimiser le code n'hésitez pas !

    Merci d'avance de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 352
    Points : 36 879
    Points
    36 879
    Par défaut
    Salut

    Citation Envoyé par ArthyX Voir le message
    Mon problème est le suivant : le nom de ma carte dépend de la carte dans la main du joueur donc le nom du chemin pour afficher la carte également
    J'ai jeté un œil au code et vous n'essayez rien de ce côté: impossible de savoir quelle difficulté vous rencontrez.

    Maintenant que vous avez l'impression d'avoir passé du temps à comprendre comment réaliser ce jeu, pourquoi ne pas chercher des tutos. ou étudier des codes qui sont déjà sur Internet? On ne fera pas mieux (et si vous l'avez déjà fait, pas facile de savoir ce que vous cherchez de plus.)

    - W

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par ArthyX Voir le message
    1) je ne sais pas comment coder le cas ou le joueur a une paire et crée 2 mains en séparant sa paire
    Parce que tu as codé ça de façon "brut de fonderie". Aucune organisation, rien. Presque tu aurais mis un "if" pour chaque possibilité de jeu que cela ne m'étonnerait pas. Ah ben c'est le cas. En effet à l'affichage tu as un "if" pour chaque cas (une carte, deux cartes, trois cartes, ... neuf cartes) non mais franchement !!! Et si j'ai 10 cartes (4 as, 4 deux, 2 trois)??? Quand tu en es arrivé à écrire if x[0][0] == '10' and x[1][0] != '10' and x[2][0] !='10' and x[3][0] !='10' and x[4][0] != '10' tu ne t'es pas demandé "non mais je vais où là" ???

    Un code c'est d'abord une organisation, de la mise en communauté. Afficher neuf cartes c'est neuf fois "afficher une carte" donc tu crées une fonction pour afficher une carte et tu l'appelles neuf fois
    De là, si tu organises ton code pour pouvoir gérer "une manche", tu n'auras pas de mal, quand le joueur a une paire et qu'il splitte, de lui faire jouer deux fois "une manche"...

    PS: x[0][0] == '10' and all(x[0] != '10' for x in x[1:]) si tu dois un jour récrire un truc de ce genre...

    Citation Envoyé par ArthyX Voir le message
    2) j'ai tenté de faire un affichage mais c'est long et pas optimal de multiplier les "print" et cela me fait énormément de cas à cause de la carte 10
    Ben voilà. T'as déjà compris qu'un des soucis en prog c'est arriver à identifier les actions "élémentaires" pour pouvoir les factoriser.

    Citation Envoyé par ArthyX Voir le message
    Mon problème est le suivant : le nom de ma carte dépend de la carte dans la main du joueur donc le nom du chemin pour afficher la carte également
    Ah? Donc un valet dans la main du joueur n'a pas le même nom qu'un valet dans la main du croupier??? Non je pige pas cette phrase.

    Citation Envoyé par ArthyX Voir le message
    4) j'ai simplement réussi à trouver un jeu de cartes en gif de mauvaise qualité, si quelqu'un a ou sait où trouver mieux je suis preneur !
    Moi j'ai trouvé ça pas mal fait mais en fait c'est très secondaire. Tu afficherais "as, deux, trois, ..., dame, roi" cela ne changerait rien. En programmation professionnelle, l'affichage n'est qu'une donnée secondaire et est traité à part. Le but du programme est de coder des actions, pas de la fioriture. Essaye de séparer "traitement" de "affichage" et tu obtiendras un code plus souple.

    Citation Envoyé par ArthyX Voir le message
    Si vous avez des conseils pour améliorer ou optimiser le code n'hésitez pas !
    Ben voilà. Tout refaire. Ta seule fonction "pas mal" est celle qui calcule le total en prenant en compte les as. J'ai trouvé ça bien pensé. Reste à appliquer cette "ouverture d'esprit" pour tout le code. Pense aux légos: rien que des carrés, des lignes et des plaques, mais avec ça on fait des voitures, des avions, etc...

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut



    J'ai jeté un œil au code et vous n'essayez rien de ce côté: impossible de savoir quelle difficulté vous rencontrez.

    Maintenant que vous avez l'impression d'avoir passé du temps à comprendre comment réaliser ce jeu, pourquoi ne pas chercher des tutos. ou étudier des codes qui sont déjà sur Internet? On ne fera pas mieux (et si vous l'avez déjà fait, pas facile de savoir ce que vous cherchez de plus.)

    - W
    Exactement, j'ai cherché sur internet mais j'ai peu de temps à cause de mes études et mon programme en soit fonctionne, je vais surement abandonner l'idée de faire une vraie interface car l'intérêt reste très limité.

    Merci de votre réponse

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 206
    Points : 4 680
    Points
    4 680
    Par défaut
    bonjour

    oops l'affiche des cartes avec le 10 me pique les yeux

    - Pourquoi ne pas formater toutes les valeurs sur 2 caractères, ensuite, tu peux utiliser le même modèle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       f"|  {valeur:<2} |"  # ou utiliser format, c'est la même chose
    # ou utiliser des méthodes dans str comme str(valeur).center(2, " ")
    -----------
    "if len(cartes)", tu devrais aussi pouvoir le sauter facilement, genre (pas testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def create_card_display(val, couleur):
       """ retourne tableau de x lignes """
       return (ligne1, ligne2, f"|  {val:<2} |", ligne4, ligne5)
     
    affichage = []
    for carte in cartes_du_joueur:
        affichage.append( create_card_display(carte.valeur, carte.color) )
     
    for ligne in range(5):
        for carte in affichage:
            print(carte[ligne], end="\t")
        print("")
    --------------

    Si tu désires des cartes en graphique, il est facile de trouver des ressources libres d'utilisation sur le web, par exemple ici en vectoriel
    https://github.com/adamlacoste/vector-playing-cards


    -------------

    Note sur tes input()

    Pas simple pour le joueur! Indiquer les valeurs possibles genre "Continuer [Oui/non] ?"
    Et si possible, valider aussi si le premier caractère est suffisant (ici: o/n)

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour vos conseils.

    Effectivement, j'avais bien conscience que mon affichage était loin d'être optimal ni même efficace dans l'approche.

    Désormais je pense retourner à mon programme de base qui affichait directement les mains en affichant la liste, sans m'embêter à les mettre sous forme de carte et me créer une vraie interface graphique.

    J'avais pensé à simplement coder pour une carte, mon soucis était que je n'arrivais pas à afficher les cartes cote à cote et non à la suite.

    C'est mon premier code de cet ampleur et il est vrai que d'un regard extérieur il parait sordide, je vais tenter de le rendre plus simple en séparant les actions répétitives pour avoir quelque chose de clair.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    oops l'affiche des cartes avec le 10 me pique les yeux

    - Pourquoi ne pas formater toutes les valeurs sur 2 caractères, ensuite, tu peux utiliser le même modèle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       f"|  {valeur:<2} |"  # ou utiliser format, c'est la même chose
    # ou utiliser des méthodes dans str comme str(valeur).center(2, " ")
    -----------
    "if len(cartes)", tu devrais aussi pouvoir le sauter facilement, genre (pas testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def create_card_display(val, couleur):
       """ retourne tableau de x lignes """
       return (ligne1, ligne2, f"|  {val:<2} |", ligne4, ligne5)
     
    affichage = []
    for carte in cartes_du_joueur:
        affichage.append( create_card_display(carte.valeur, carte.color) )
     
    for ligne in range(5):
        for carte in affichage:
            print(carte[ligne], end="\t")
        print("")
    --------------

    Si tu désires des cartes en graphique, il est facile de trouver des ressources libres d'utilisation sur le web, par exemple ici en vectoriel
    https://github.com/adamlacoste/vector-playing-cards


    -------------

    Note sur tes input()

    Pas simple pour le joueur! Indiquer les valeurs possibles genre "Continuer [Oui/non] ?"
    Et si possible, valider aussi si le premier caractère est suffisant (ici: o/n)

    Merci beaucoup ça va grandement m'aider à simplifier mon code !

    Dans le cas ou je voudrai afficher les cartes, quel module vous semble le plus adapté ?

    Je suis prêt à passer du temps pour apprendre à utiliser de nouveaux modules mais je n'ai aucune idée de celui qu'il me faut.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ArthyX Voir le message
    je vais tenter de le rendre plus simple en séparant les actions répétitives pour avoir quelque chose de clair.
    J'ai un petit peu commencé un truc pour voir...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def blackjack(*, nb_paquet=4):
    	special="ARDVX"
    	reste="98765432"
    	valeurs=tuple((k, 10) for k in special) + tuple((k, int(k)) for k in reste)
    	cartes=tuple((c, "TKCP") for c in special+reste)
    	paquet=tuple((c[0], v) for c in cartes for v in c[1])
    	sabot=paquet * nb_paquet

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    J'ai un petit peu commencé un truc pour voir...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def blackjack(*, nb_paquet=4):
    	base="ARDVX98765432"
    	valeurs=tuple((k, int(k) if k not in "ARDVX" else 10) for k in base)
    	cartes=tuple((c, "TKCP") for c in base)
    	paquet=tuple((c[0], v) for c in cartes for v in c[1])
    	sabot=paquet * nb_paquet
    Merci, je suis encore loin de ce niveau de programmation mais ça me donne une idée de à quel point mon code est long et pas optimisé.

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ArthyX Voir le message
    Merci, je suis encore loin de ce niveau de programmation
    Rajoute des print() à chaque étape pour voir ce que ça fait.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Rajoute des print() à chaque étape pour voir ce que ça fait.
    Effectivement ça fonctionne bien.

    J'ai plus l'habitude ma manipuler des listes que des tuples mais je vais me renseigner sur le sujet et revoir mon code.

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ArthyX Voir le message
    J'ai plus l'habitude ma manipuler des listes que des tuples mais je vais me renseigner sur le sujet
    Le tuple c'est la base: une suite d'éléments. La liste c'est juste un tuple modifiable. Je n'ai jamais compris pourquoi le tuto de Swinnen montre le tuple bien après les listes, surtout qu'il dit bien que les tuples sont préférables quand il n'y a pas besoin de modifier le contenu.
    Ensuite tu veux une liste te suffit de remplacer tuple(...) par list(...). C'est par exemple ce que j'ai fait pour "sabot" car sinon on ne peut pas le mélanger.

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 206
    Points : 4 680
    Points
    4 680
    Par défaut
    Citation Envoyé par ArthyX Voir le message
    il parait sordide
    Surtout pas
    C'est juste un code de débutant, même après des années de code, nous faisons des erreurs, il est facile de trouver un bon algorithme et toujours difficile de trouver le meilleur.
    Comme dit plus haut, ici c'est ta gestion du "10" qui me semble plus qu'évitable même pour un débutant.

    Citation Envoyé par ArthyX Voir le message
    séparant les actions répétitives pour avoir quelque chose de clair.
    C'est la base du codage ! si on voie des répétitions, c'est que notre code n'est pas bon. Même pour un débutant, c'est simple de s'en apercevoir. Mais y remédier peut-être compliqué.

    Citation Envoyé par ArthyX Voir le message
    mon soucis était que je n'arrivais pas à afficher les cartes cote à cote et non à la suite.
    Problème qui me semble plus que normal pour un semi-débutant

    quel module vous semble le plus adapté ?
    Aucun Ou tous
    Suivant le cahier des charges du projet et suivant ce que désire le codeur

    Existe des environnements/frameworks simples, mais qui dit simple dit aussi généralement plus limité. Et moins est simple un framework, et plus tu vas passer du temps rien que pour le découvrir.
    Par exemple Qt est un excellent framework, mais tu vas certainement passer beaucoup plus de temps à le découvrir que coder ton jeu.
    Vu ton jeu, il me semble que même le plus simple peut faire l'affaire (donc si c'est ton principal critère est ton temps ...)


    J'ai plus l'habitude de manipuler des listes que des tuples
    Moi qui ne suis pas un codeur python, simplement je ne fais pas la différence entre les tuples, listes et dictionnaires, les 3 sont des tableaux et la différence est mince.
    La différence est si petite qu'il est souvent possible de les interchanger en fonction de notre besoin (qui peut évoluer suivant l'avancement de notre code)
    - par défaut, je pense aux tuples (moins de place en mémoire)
    - si j'ai besoin d'ajouter/supprimer des éléments, je vais alors utiliser une liste
    - si j'ai besoin d'un index, alors je passe au dictionnaire (plus rapide uniquement dans ce cas)

    Généralement cela ne change rien dans la structure du programme, c'est plus une façon "interne" de ranger nos données

    Pour ton script, utiliser des tuples ou listes ne va rien changer en performances ni en empreinte mémoire, ici, c'est juste une histoire de bonne pratique*: utiliser dès le départ le conteneur le plus "simple" pour notre besoin.
    Tu as bien utilisé des entiers et non des réels comme valeur de carte, c'est exactement la même logique !

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Le tuple c'est la base: une suite d'éléments. La liste c'est juste un tuple modifiable. Je n'ai jamais compris pourquoi le tuto de Swinnen montre le tuple bien après les listes, surtout qu'il dit bien que les tuples sont préférables quand il n'y a pas besoin de modifier le contenu.
    Ensuite tu veux une liste te suffit de remplacer tuple(...) par list(...). C'est par exemple ce que j'ai fait pour "sabot" car sinon on ne peut pas le mélanger.
    D'accord, merci.

    Il est vrai que dans les études "classiques" on nous a pour le moment seulement appris à faire des listes j'ai donc par habitude utilisé presque que des listes alors que des tuples font parfaitement l'affaire

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Surtout pas
    C'est juste un code de débutant, même après des années de code, nous faisons des erreurs, il est facile de trouver un bon algorithme et toujours difficile de trouver le meilleur.
    Comme dit plus haut, ici c'est ta gestion du "10" qui me semble plus qu'évitable même pour un débutant.


    C'est la base du codage ! si on voie des répétitions, c'est que notre code n'est pas bon. Même pour un débutant, c'est simple de s'en apercevoir. Mais y remédier peut-être compliqué.


    Problème qui me semble plus que normal pour un semi-débutant


    Aucun Ou tous
    Suivant le cahier des charges du projet et suivant ce que désire le codeur

    Existe des environnements/frameworks simples, mais qui dit simple dit aussi généralement plus limité. Et moins est simple un framework, et plus tu vas passer du temps rien que pour le découvrir.
    Par exemple Qt est un excellent framework, mais tu vas certainement passer beaucoup plus de temps à le découvrir que coder ton jeu.
    Vu ton jeu, il me semble que même le plus simple peut faire l'affaire (donc si c'est ton principal critère est ton temps ...)



    Moi qui ne suis pas un codeur python, simplement je ne fais pas la différence entre les tuples, listes et dictionnaires, les 3 sont des tableaux et la différence est mince.
    La différence est si petite qu'il est souvent possible de les interchanger en fonction de notre besoin (qui peut évoluer suivant l'avancement de notre code)
    - par défaut, je pense aux tuples (moins de place en mémoire)
    - si j'ai besoin d'ajouter/supprimer, je vais alors utiliser une liste
    - si j'ai besoin d'un index, alors je passe au dictionnaire (plus rapide uniquement dans ce cas)

    Généralement cela ne change rien dans la structure du programme, c'est plus une façon "interne" de ranger nos données

    Semi-débutant c'est le cas de le dire, en prépa on nous apprend juste les bases de python et on avance lentement.

    En parallèle on code en Ocaml qui est tout nouveau pour moi mais c'est vrai que dans nos cours d'info sur Ocaml justement et de manière théorique on commence à voir les différents types d'éléments et leur propriétés mais bon sur python j'ai l'impression que tout est un tableau avec les avantages d'une liste chainée également.

    Merci pour vos conseils.

    Je vais certainement abandonner l'idée d'interface graphique par manque de temps et les codes que je trouve sure internet sont bien trop complexes pour moi et par principe je préfère coder mon propre jeu.
    Je ne sais plus qui a donné cette idée mais je pense que je vais juste rajouter un espace devant mes caractères pour n'avoir qu'un cas dans mon affichage.

    Pour mon TIPE justement j'ai une autre version de mon code que je fais tourner un certain nombre de fois de manière automatique avec pour le moment un seul paramètre variable (la valeur de la main à partir de laquelle le joueur tire automatiquement).
    Auriez vous d'autres idées de stratégies à adopter ou des stats à calculer ?
    Je pensais à faire des stats sur le tirage de chaque carte mais sur plusieurs milliards de tirages ça n'a pas vraiment de sens.

  16. #16
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 206
    Points : 4 680
    Points
    4 680
    Par défaut
    Pour moi, qui ne connais pas le jeu, la seule stat qui me parlerait, serait d'avoir le % de fois où je gagne en fonction de l'écart avec 21

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Je gagne, si je reste à :
       2 points de 21 : 80%
       3 points de 21 : 60%
    ...
    Et stats de dépassement de 21
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Je perds, si je retente à :
       2 points de 21 : 90%
       3 points de 21 : 70%
    ...
    Une fois que je connais ces stats, enfin je peux jouer… reste à connaitre les stats sur les gains :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       joué 9 mains : +1%
        joué 8 mains : -1%
        joué 45 mains : -100% # LOL
    Ok, maintenant, je sais qu'il ne faut pas jouer sur la longueur, je serai toujours perdant. (mais bon pas besoin de calculer des stats sur un million de mains pour le savoir )

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Pour moi, qui ne connais pas le jeu, la seule stat qui me parlerait, serait d'avoir le % de fois où je gagne en fonction de l'écart avec 21

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Je gagne, si je reste à :
       2 points de 21 : 80%
       3 points de 21 : 60%
    ...
    Et stats de dépassement de 21
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Je perds, si je retente à :
       2 points de 21 : 90%
       3 points de 21 : 70%
    ...
    Une fois que je connais ces stats, enfin je peux jouer… reste à connaitre les stats sur les gains :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       joué 8 mains : +10%
       joué 45 mains : -100% # LOL
    Ok, maintenant, je sais qu'il ne faut pas jouer sur la longueur, je serai toujours perdant.
    D'accord merci, je vais voir pour faire ça.

    Concernant un gain en argent, ça me parait compliqué, il y a deux possibilités simples :
    - parier toujours la même somme (mais dans le coup c'est juste proportionnel au nb de victoires)
    - définir un montant de pari aléatoire
    (- toujours all in mais ça finit vite)

    Sachant que dans mon programme pour le moment je relance le jeu en entier à chaque fois donc mes stats ne sont pas optimales

  18. #18
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 206
    Points : 4 680
    Points
    4 680
    Par défaut
    idées de stratégies à adopter
    je ne connais pas ce jeu, mais le poker et il me semble simple de calculer les "outs"

    Si je suis à 2 points de 21, seules X cartes dans les 56(- ma main) sont susceptibles de me faire bien avancer, toutes les autres, je perds.
    Donc calculer le % ou je risque de perdre est très simple ? outs = cartes (-celles de ma main et celles de l'adversaire) dont la valeur est <= à mon écart avec 21


    Peut-être qu'il y a un bonus si on a 21 ? histoire de compliquer un peu les choses, sinon c'est trop facile de faire le calcul
    mais c'est simple d'avoir les 2 %:
    - outs pour bien avancer sans dépasser
    - outs pour avoir 21


    Je suppose que ton "croupier" fait déjà ce calcul , je n'ai pas regardé ton code en profondeur

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    je ne connais pas ce jeu, mais le poker et il me semble simple de calculer les "outs"

    Si je suis à 2 points de 21, seules X cartes dans les 56(- ma main) sont susceptibles de me faire bien avancer, toutes les autres, je perds.
    Donc calculer le % ou je risque de perdre est très simple ? outs = cartes (-celles de ma main et celles de l'adversaire) dont la valeur est <= à mon écart avec 21


    Peut-être qu'il y a un bonus si on a 21 ? histoire de compliquer un peu les choses, sinon c'est trop facile de faire le calcul
    mais c'est simple d'avoir les 2 %:
    - outs pour bien avancer sans dépasser
    - outs pour avoir 21


    Je suppose que ton "croupier" fait déjà ce calcul , je n'ai pas regardé ton code en profondeur
    Effectivement, je pensais à coder ça pour plus tard mais maintenant que mon code fonctionne et que j'ai revu l'affichage je peux m'en charger.

    En plus ça rajoutera du combinatoire donc des maths à mon sujet.

    Pour mon croupier j'ai opté pour une stratégie simple qui est celle utilisée dans les casinos il me semble qui est que le croupier tire s'il a moins de 17 strictement.

    Merci beaucoup

  20. #20
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ArthyX Voir le message
    Pour mon croupier j'ai opté pour une stratégie simple qui est celle utilisée dans les casinos il me semble qui est que le croupier tire s'il a moins de 17 strictement.
    Ce n'est pas une stratégie, ça fait partie de la règle. Même si le joueur a 18 et que le croupier a 17, il n'a plus le droit de tirer. Et inversement si le joueur a 15 et que le croupier a 16 et qu'il a donc déjà gagné, il est quand-même obligé de tirer au risque de dépasser 21.

Discussions similaires

  1. [Bouml]modifier le générateur de code python
    Par cedrix57 dans le forum BOUML
    Réponses: 4
    Dernier message: 16/03/2009, 22h12
  2. Réponses: 3
    Dernier message: 08/03/2009, 10h50
  3. conversion d'indentation dans un code python
    Par KINENVEU dans le forum Général Python
    Réponses: 2
    Dernier message: 26/02/2009, 04h04
  4. Réponses: 1
    Dernier message: 24/05/2008, 17h04
  5. [SWIG] dialogue entre code C et code python
    Par dmichel dans le forum Interfaçage autre langage
    Réponses: 12
    Dernier message: 19/12/2007, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo