Pierre, feuille, ciseaux, Help ! [Résolu]

sicfried 2 Messages postés vendredi 7 mars 2014Date d'inscription 7 mars 2014 Dernière intervention - 7 mars 2014 à 12:41 - Dernière réponse : sicfried 2 Messages postés vendredi 7 mars 2014Date d'inscription 7 mars 2014 Dernière intervention
- 7 mars 2014 à 16:42
Bonjour,

Je dois rédiger une macro qui réalise le jeu « Pierre - Feuille - Ciseaux » en faisant jouer l'utilisateur contre programme.
Le programme doit d'abord jouer en tirant aléatoirement un nombre entre 0 et 2.
0 symbolisera la pierre, 1 la feuille et 2 les ciseaux.
Puis, l'utilisateur choisie un chiffre entre 0 et 2 également.
Enfin, je dois indiquez s'il a gagné, ou s'il y a égalité.

Les règles : la pierre bat les ciseaux, les ciseaux battent la feuille et la feuille bat la pierre. Il y a égalité quand les deux joueurs tirent le même objet.

Voilà la macro que j'ai réaliser :
Sub pfc()

Const pierre As Integer = 0
Const feuille As Integer = 1
Const ciseaux As Integer = 2
Dim a As Integer
Dim b As Integer

Msgbox("0 symbolisera la pierre, 1 la feuille et 2 les ciseaux")
a = Int(Rnd() * 3)
b = InputBox("Choisissez")

Do While (b > 2)
b = InputBox("Choix invalide, Choisissez un chiffre entre 0 et 2")
Loop

Select Case score
Case a = b
MsgBox ("Egalité")
Case a = 0 And b = 1
MsgBox ("Gagné")
Case a = 0 And b = 2
MsgBox ("Perdu")
Case a = 1 And b = 0
MsgBox ("Perdu")
Case a = 1 And b = 2
MsgBox ("Gagné")
Case a = 2 And b = 0
MsgBox ("Gagné")
Case a = 2 And b = 1
MsgBox ("Perdu")
End Select

End Sub

Le problème est que le programme ignore les résultats perdant et je ne comprend pas pourquoi ?

Merci d'avance
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
jordane45 22919 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 7 mars 2014 à 12:55
1
Merci
Bonjour,

1 - J'ai édité ton message pour y mettre la coloration syntaxique sur ton code : Voir ICI :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

2 - Change ton Select case en mettant TRUE à la place de SCORE

Select Case True
 Case a = b
    MsgBox ("Egalité")
 Case a = 0 And b = 1
    MsgBox ("Gagné")
 Case a = 0 And b = 2
    MsgBox ("Perdu")
 Case a = 1 And b = 0
    MsgBox ("Perdu")
 Case a = 1 And b = 2
    MsgBox ("Gagné")
 Case a = 2 And b = 0
    MsgBox ("Gagné")
 Case a = 2 And b = 1
    MsgBox ("Perdu")
End Select

End Sub

Merci jordane45 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

NHenry 14278 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 7 mars 2014 à 13:04
Perso, quand je vois un Case comme ça, je pense qu'un structure IF ... ELSEIF .... ELSE ... END IF serait plus adaptée.
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 7 mars 2014 à 13:14
Tout-à-fait d'accord avec toi, NHenry. Et nous l'avons vu dans une autre discussion, aujourd'hui-même.
jordane45 22919 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 octobre 2018 Dernière intervention - 7 mars 2014 à 13:54
Franchement;.. entre un SELECT CASE TRUE et des IF imbriqués... je ne suis pas sûr que la différence au niveau de la durée de traitement (quelque soit le nombre de conditions) soit réellement perceptible... sachant qu'il me semble que le Select case est de toutes façons plus rapide...
Et..sachant que de toutes façons (comme avec les IF) dès que la condition est vérifiée le programme quitte le branchement...

Je trouve également que la lecture d'un select case est largement plus simple qu'avec des If imbriqués...

Donc.contrairement à vous...je pense que sicfried à fait le bon choix...
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 7 mars 2014 à 14:24
"Je trouve également que la lecture d'un select case est largement plus simple qu'avec des If imbriqués.."
Sur ce point précis : sans aucun doute.
Pour ce qui est par contre de la durée d'exécution ; oui, lorsqu'il s'agit de select case concernant des appréciations "directes" d'une seule valeur, non, dans le cas présent, où deux valeurs sont à apprécier.
Je répète maintenant : la différence de durée de traitement sera dans le cas présent imperceptible, compte tenu du faible nombre d'appréciations à faire. Elle serait très perceptible (environ 25 % de différence) avec un grand nombre d'appréciations à faire.
Nous en avons eu un très bel exemple (où, précisément, devaient être appréciées plusieurs valeurs) aujourd'hui-même :
"avec des If-ElseIf-End If : en moins de 3 secondes
avec des Select Case True : en 4,26 secondes
"
Voilà.
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 7 mars 2014 à 14:49
je n'ai pas le temps de faire des essais, mais voilà à quoi ressemblerait le code à écrire en respectant (en admettant que la logique soit la bonne) la logique du code présenté par sicfried :
toto = "perdu"
Select Case a
Case b
toto = "égalité"
Case 0
If b = 1 Then toto = "gagné"
Case 1
If b = 2 Then toto = "gagné"
Case 2
If b <> 1 Then toto = "gagné"
End Select
MsgBox toto
Une autre fois : en respectant la logique du code montré, sans préjudice de sa justesse.
Commenter la réponse de jordane45
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 7/03/2014 à 13:13
1
Merci
Bonjour,
cela me parait être un cas de figure ou l'on aurait intérêt, en matière de rapidité (nous l'avons vu encore aujourd'hui dans une autre discussion), à traiter en select case imbriqués ou en mixant des select case et des if/elseif
Mais bon ... compte tenu du nombre très faible de vérifications d'occurrences à faire dans ce cas de figure ===>> la différence de durée d'exécution sera imperceptible.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend

Merci ucfoutu 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ucfoutu
sicfried 2 Messages postés vendredi 7 mars 2014Date d'inscription 7 mars 2014 Dernière intervention - 7 mars 2014 à 16:42
0
Merci
Merci pour ces réponses simple et rapide.
Commenter la réponse de sicfried

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.