Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur programme python jeu de dé

14 novembre 2017 à 18:28:03

Bonjour alors voila je dois créer un jeu de dé pour deux joueurs les règles sont les suivantes:

le premier joueur à arriver à 100 a gagné.

Le joueur décide de lancer le dé, s’arrêter après le premier lancer ou s'arrête si il tombe sur un 1.

On additionne les points à chaque lancé. Mais si il tombe sur un 1 les points ne sont pas comptabilisés et c’est au tour du joueur suivant.


Le problème est que dès que le joueur a lancer le dé cela passe au joueur 2 sans que le joueur 1 est décider de relancer ou passer son tour.

Voila le programme:

  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2017 à 19:45:58

Salut,

Avant de continuer, vous devriez mettre votre code, dans les balises, prévus à cet effet.

Puisque vous avez mis une image, il nous est impossible de recopier votre code. (Sauf à la main, dans ce cas, nous pourrions ne pas reproduire votre erreur)

Pour finir, il n'est pas nécessaire de recopier la même fonction, seulement pour modifier une variable(score1, score2) et une string (texte). C'est l'utilité même d'une fonction.

score1 = [0]
score2 = [0]

def choix_joueur(nom, score):
    choix = input('Tour au Joueur %s: '%(nom))

    choix = choix.upper() ## Mettre en majuscule

    if choix in ['L', 'R']:
        while score != 100:
            ...

    elif choix == 'P':
        ...
    elif choix == 'Q':
        ....

while True:
    choix_joueur('1', score1)
    choix_joueur('2', score2)



Ensuite, votre première erreur est: Vos variables score1 et score2 sont des listes. Pourtant, vous demandez à votre boucle, si votre liste est égal ou pas à 100...

while score1 != 100 or score2 != 100:
    ...

Comment python peut-il savoir ce que vous demandez? Es-ce la somme totale des scores? Es-ce la somme total du nombre de score?

score = [0]

## Somme total des scores
while sum(score) != 100:
    ...

## Somme totale du nombre de score.
while len(score) != 100:
    ...


De plus, lorsque vous faites:

sum(score2)

Cela sert à rien, vous faite rien avec cette ligne.

Si vous voulez l'afficher ou la sauvegarder, il faut mettre une variable..

sum_score = sum(score2)
print(sum_score)

Je vous laisse méditer là-dessus :) Entre-temps, j'Espère que vous metterez votre code dans les balises, prévus. L'image: </>

Bonne chance

A+

  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2017 à 18:42:29

import random
score1=[0]
score2=[0]

def choix_joueur1():
    choix=input('Votre choix pour ce tour Joueur 1 (L/R/P ou Q pour quitter)?')
    if choix=='L' or choix=='l' or choix=='R' or choix=='r' :
        while score1!=100 or score2!=100:
            d= random.randint(1,6)
            print('le dé a sortit ce numéro :',d)
            print('Votre score actuel est de')
            if d!=1:
                score1.append(d)
                somme=sum(score1)
                print(somme)
                return choix_joueur1
            else:
                print(score1)
                score1.pop()

    elif choix=='P' or choix=='p':
        return choix_joueur2
    elif choix=='Q' or choix=='q':
        exit(0)

def choix_joueur2():
    choix=input('Votre choix pour ce tour Joueur 2 (L/R/P ou Q pour quitter)?')
    if choix=='L' or choix=='l' or choix=='R' or choix=='r' :
        while score1!=100 or score2!=100:
            d= random.randint(1,6)
            print('le dé a sortit ce numéro :',d)
            print('Votre score actuel est de',score2)
            if d!=1:
                score2.append(d)
                sum(score2)
                print(score2)
                return choix_joueur2
            else:
                print(score2)
                return choix_joueur1
    elif choix=='P' or choix=='p':
        return choix_joueur1
    elif choix=='Q' or choix=='q':
        exit(0)

while True:
    choix_joueur1()
    choix_joueur2()

Bonsoir,

Merci de votre aide je vous remet le programme dans les balises. 

En ce qui concernent la fonction du joueur 2 elle n'est pas finis, je complete deja la partie joueur 1 pour qu'elle fonction et ainsi pouvoir faire pour le joueur 2. 

Pour la somme, ca consiste a prendre les numéro qui sont sortit par le dé et les additionnés, après un lancer du joueur on demande au même joueur si il veut 'relancer le dé' ou passer son tour. Si il passe son tour on additionne tous les nombre qui sont sortit. Mais si il fait un 1 durant son tour tout les points qu'il as eu s'efface.

Et je ne trouve toujours pas comment apres un lancer de dé on redemander au même joueur si il veut passer son tour ou relancer. Car la le programme passe directement au joueur 2 sans rien demander.

Merci de ton aide.

  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2017 à 0:25:34

Que fais cette ligne exactement ? Ou en tout cas, qu'est ce que tu penses que ça fait ?

    elif choix=='P' or choix=='p':
        return choix_joueur2

Pour l'instant, ça me parait logique que ça alterne entre joueur 1 et joueur 2, vu que c'est ce qu'il y a dans ton while True. Pour redemander au même joueur, tu peux mettre une autre boucle while (tant que le joueur 1 veut relancer)

  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2017 à 18:08:42

Cette ligne permet de passer son Tour.

je sais bien qu’il faut faire un while avec tant que le joueur 1 fait son choix mais j’en ne trouve pas comment faire

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2017 à 10:14:04

KILIANBRETON a écrit:

Cette ligne permet de passer son Tour.

je sais bien qu’il faut faire un while avec tant que le joueur 1 fait son choix mais j’en ne trouve pas comment faire

J'ai bien dit "exactement".

Ce que cette ligne fait, c'est que ça retourne choix_joueur2 si choix=='P' ou choix=='p'. Mais ça ne va pas l'appeler. Tu confonds retour et appel de fonction.

Je te conseille de lire (ou relire) le chapitre sur les fonctions du cours pour comprendre ce que fait le mot-clef return

Pour le while, tu peux faire quelque chose du genre

restart = True
while restart:
  restart = False
  # ton code de décision..
  # à un moment :
  if le joueur veut redémarrer:
    restart = True
  # le reste du code




-
Edité par potterman28wxcv 17 novembre 2017 à 10:14:39

  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2021 à 23:36:03 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


22 mai 2021 à 0:23:18

@IbrahimaDiallo259 Bonsoir, merci de ne pas déterrer d'ancien sujet.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter