besoin de conseil

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
vimper
Batcheur occasionnel
Messages : 7
Enregistré le : 01 juin 2019 14:34

besoin de conseil

Message par vimper »

j'ai fais un jeu feuille pierre ciseau qui marche sauf qu'a un moment je veux dire le choix de l'utilisateur (la pas de souci) et le choix de l'ordi( il ecrit ce que donne l'ordi mais ça marque 0 ,1 ou 2 ce qui est normal car j'utilise Random) j'ai donc voulu changer le chiffre par feuille pierre ou ciseau mais j'arrive pas à le faire .je dois mal le declarer, j'ai mis sur le code mon souci. voici mon code.

Code : Tout sélectionner

:Restart

@echo off
title Jeux: Feuille-Pierre-Ciseau
color 5f
mode con cols=50 lines=15
echo   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo   º       Feuille-Pierre-Ciseau        º»
echo   ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼº
echo    ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


set /a choix=%Random%%%3 
if /i %choix%==2 set /a choixb=ciseau           ::<----------- souci ici il prend pas en compte choixb
if /i %choix%==1 set /a choixb=pierre           ::<----------- souci ici il prend pas en compte choixb
if /i %choix%==0 set /a choixb=feuille          ::<----------- souci ici il prend pas en compte choixb
echo>nul %choix%

: Question
echo.
echo choisissez entre feuille, pierre ou ciseau?
echo -------------------------------------------
set /p item= 

if /i %choix%==2 (if %item% == pierre goto :gagne)
if /i %choix%==2 (if %item% == feuille goto :perdu)
if /i %choix%==2 (if %item% == ciseau goto :egalite)

if /i %choix%==1 (if %item% == feuille goto :gagne)
if /i %choix%==1 (if %item% == ciseau goto :perdu)
if /i %choix%==1 (if %item% == pierre goto :egalite)

if /i %choix%==0 (if %item% == ciseau goto :gagne)
if /i %choix%==0 (if %item% == pierre goto :perdu)
if /i %choix%==0 (if %item% == feuille goto :egalite)

if not %item%==ciseau goto :erreur 
if not %item%==pierre goto :erreur
if not %item%==feuille goto :erreur  

echo.
:egalite

echo.
echo vous avez choisi: %item% ; l'ordi a choisi: %choixb%      ::<----------- pourtant j'ai mis choixb ici
echo.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo !!!!!!!!!!!!!!!! egalite parfaite !!!!!!!!!!!!!!!!
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo.    
set /p continuer=Voulez vous rejouer(y,n)?

if %continuer%==y call :Restart
if %continuer%==n goto :Pub

if not %continuer%==y  goto :recommence
if not %continuer%==n  goto :recommence

goto :eof

:perdu

echo.
echo vous avez choisi: %item% ; l'ordi a choisi: %choixb%      ::<----------- pourtant j'ai mis choixb ici
echo.
echo --------------------------------------------------
echo ---------------- vous avez perdu -----------------
echo --------------------------------------------------
echo.
set /p continuer=Voulez vous rejouer(y,n)?

if %continuer%==y call :Restart
if %continuer%==n goto :Pub

if not %continuer%==y  goto :recommence
if not %continuer%==n  goto :recommence

goto :eof

:gagne

echo.
echo vous avez choisi: %item% ; l'ordi a choisi:%choixb%      ::<----------- pourtant j'ai mis choixb ici
echo.
echo +++++++++++++++++++++++++++++++++++++++++++++++++
echo ++++++++++++++++ vous avez gagne ++++++++++++++++
echo +++++++++++++++++++++++++++++++++++++++++++++++++
echo.
set /p continuer=Voulez vous rejouer(y,n)?

if %continuer%==y call :Restart
if %continuer%==n goto :Pub

if not %continuer%==y  goto :recommence
if not %continuer%==n  goto :recommence

goto :eof

:recommence
echo mauvaise saisie ecrire: y(pour oui), n(pour non)
echo.
set /p continuer=Voulez vous rejouer(y,n)?

if %continuer%==y call :Restart
if %continuer%==n goto :Pub

if not %continuer%==y  goto :recommence
if not %continuer%==n  goto :recommence
goto :eof
:erreur
echo mauvaise saisie recommencez
pause
goto :question
 
:Pub
echo.
echo    *****************************************
echo    *  je vous remercie d'avoir jouer       *
echo    *     mon pseudo est Vimper             *
echo    *  j'ai programmer ce petit jeu         * 
echo    *  j'espere que vous avez pris plaisir  *
echo    *****************************************
echo.
pause

si possible je voudrais comprendre pourquoi ça ne marche pas ou alors je déclare mal mon if.
le progrès est une chose magnifique quand c'est bien utilisé.mais quand ça vas trop vite on se perd et les vieilles choses du passé refont surface et sont utilisé comme des idées novatrices!!!!
barnabe0057
SuperBatcher
Messages : 104
Enregistré le : 24 janv. 2017 13:41

Re: besoin de conseil

Message par barnabe0057 »

Bonjour,

Plusieurs petites erreurs dans tes 3 premiers IF :

- pourquoi utiliser le commutateur /i alors que tu testes des chiffres ?
- pourquoi utiliser SET /A alors que tu ne fais pas de calcul ? SET suffit à déclarer une variable
- ce n'est pas une erreur mais quand tu compares des valeurs prend l'habitude d'utiliser EQU, NEQ, LSS, GTR plutôt que == qui sert à comparer des caractères

Voilà ton script revu et corrigé :

Code : Tout sélectionner

@echo off
title Jeux: Feuille-Pierre-Ciseau
color 5f
mode con cols=55 lines=15
chcp 850 >nul

:Restart
cls
echo   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo   º       Feuille-Pierre-Ciseau        º»
echo   ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼº
echo    ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ

set /a choix=%Random% %% 3 
if %choix% EQU 2 set "choixb=ciseau"
if %choix% EQU 1 set "choixb=pierre"
if %choix% EQU 0 set "choixb=feuille"
echo %choix% >nul

:Question
set "item="
echo.
echo choisissez entre feuille, pierre ou ciseau?
echo -------------------------------------------
set /p item= 

if %choix% EQU 2 (if "%item%" == "pierre" goto :gagne)
if %choix% EQU 2 (if "%item%" == "feuille" goto :perdu)
if %choix% EQU 2 (if "%item%" == "ciseau" goto :egalite)

if %choix% EQU 1 (if "%item%" == "feuille" goto :gagne)
if %choix% EQU 1 (if "%item%" == "ciseau" goto :perdu)
if %choix% EQU 1 (if "%item%" == "pierre" goto :egalite)

if %choix% EQU 0 (if "%item%" == "ciseau" goto :gagne)
if %choix% EQU 0 (if "%item%" == "pierre" goto :perdu)
if %choix% EQU 0 (if "%item%" == "feuille" goto :egalite)

echo mauvaise saisie, recommencez !

goto :question  

:egalite
cls
echo.
echo vous avez choisi: %item% ; l'ordi a choisi: %choixb%
echo.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo !!!!!!!!!!!!!!!! egalite parfaite !!!!!!!!!!!!!!!!
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo.    
set /p continuer="Voulez-vous rejouer (y,n) ? "

if /i "%continuer%"=="y" goto :Restart
if /i "%continuer%"=="n" goto :Pub

goto :recommence

:perdu
cls
echo.
echo vous avez choisi: %item% ; l'ordi a choisi: %choixb%
echo.
echo --------------------------------------------------
echo ---------------- vous avez perdu -----------------
echo --------------------------------------------------
echo.
set /p continuer="Voulez-vous rejouer (y,n) ? "

if /i "%continuer%"=="y" goto :Restart
if /i "%continuer%"=="n" goto :Pub

goto :recommence

:gagne
cls
echo.
echo vous avez choisi: %item% ; l'ordi a choisi: %choixb%
echo.
echo +++++++++++++++++++++++++++++++++++++++++++++++++
echo ++++++++++++++++ vous avez gagne ++++++++++++++++
echo +++++++++++++++++++++++++++++++++++++++++++++++++
echo.
set /p continuer="Voulez-vous rejouer (y,n) ? "

if /i "%continuer%"=="y" goto :Restart
if /i "%continuer%"=="n" goto :Pub

goto :recommence

:recommence
echo mauvaise saisie ecrire: y(pour oui), n(pour non)
echo.
set /p continuer="Voulez-vous rejouer (y,n) ? "

if /i "%continuer%"=="y" goto :Restart
if /i "%continuer%"=="n" goto :Pub

goto :recommence
 
:Pub
cls
chcp 1252 >nul
echo.
echo    *****************************************
echo    *  je vous remercie d'avoir joué        *
echo    *     mon pseudo est Vimper             *
echo    *  j'ai programmé ce petit jeu          * 
echo    *  j'espère que vous avez pris plaisir  *
echo    *****************************************
echo.
vimper
Batcheur occasionnel
Messages : 7
Enregistré le : 01 juin 2019 14:34

[résolu] besoin de conseil

Message par vimper »

merci barnabe0057, je pense avoir compris pour les if/i de plus plus besoin de la commande ":erreur" et les" if not".
j'ai 2 petites questions que j'ai mis dans le programme ça évite de long texte et je cible mieux les questions(a mon avis et un petit clin d'oeil pour barnabe0057).

Code : Tout sélectionner


@echo off
title Jeux: Feuille-Pierre-Ciseau
color 5f
mode con cols=52 lines=15
chcp 850 >nul                                            ::<--------------------a quoi ça sert il y en as un autre plus bas aussi
echo   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo   º       Feuille-Pierre-Ciseau        º»
echo   ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼº
echo    ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


set /a choix=%Random%%%3 
if %choix% equ 2 set "choixb=ciseau"
if %choix% equ 1 set "choixb=pierre"
if %choix% equ 0 set "choixb=feuille"
echo %choix% >nul 

: Question
set "item="                                                ::<---------------------------as tu déclaré ça entre guillemet pour comparer dans les if?
echo.
echo choisissez entre feuille, pierre ou ciseau?
echo -------------------------------------------
set /p item=

if  %choix% equ 2 (if "%item%" == "pierre" goto :gagne)
if  %choix% equ 2 (if "%item%" == "feuille" goto :perdu)
if  %choix% equ 2 (if "%item%" == "ciseau" goto :egalite)

if  %choix% equ 1 (if "%item%" == "feuille" goto :gagne)
if  %choix% equ 1 (if "%item%" == "ciseau" goto :perdu)
if  %choix% equ 1 (if "%item%" == "pierre" goto :egalite)

if  %choix% equ 0 (if "%item%" == "ciseau" goto :gagne)
if  %choix% equ 0 (if "%item%" == "pierre" goto :perdu)
if  %choix% equ 0 (if "%item%" == "feuille" goto :egalite)
echo.
echo mauvaise saisie, recommencez!
goto :question

echo.
:egalite
cls
echo.
echo vous avez choisi: %item% ; l'ordi a choisi: %choixb%
echo.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo !!!!!!!!!!!!!!!! egalite parfaite !!!!!!!!!!!!!!!!!!
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo.    
set /p continuer=Voulez vous rejouer(y,n)?

if /i %continuer%==y call :Restart
if /i %continuer%==n goto :Pub

goto :recommence

:perdu
cls
echo.
echo vous avez choisi: %item% ; l'ordi a choisi: %choixb%
echo.
echo ----------------------------------------------------
echo ---------------- vous avez perdu -------------------
echo ----------------------------------------------------
echo.
set /p continuer=Voulez vous rejouer(y,n)?

if /i %continuer%==y call :Restart
if /i %continuer%==n goto :Pub

goto :recommence


:gagne
cls
echo.
echo vous avez choisi: %item% ; l'ordi a choisi:%choixb%
echo.
echo +++++++++++++++++++++++++++++++++++++++++++++++++++
echo ++++++++++++++++ vous avez gagne ++++++++++++++++++
echo +++++++++++++++++++++++++++++++++++++++++++++++++++
echo.
set /p continuer=Voulez vous rejouer(y,n)?

if /i %continuer%==y call :Restart
if /i %continuer%==n goto :Pub

goto :recommence


:recommence
echo.
echo mauvaise saisie ecrire: y(pour oui), n(pour non)
echo.
set /p continuer=Voulez vous rejouer(y,n)?

if /i %continuer%==y call :Restart
if /i %continuer%==n goto :Pub

goto :recommence

 
:Pub
cls
chcp 1252 >nul                                                       ::<--------------------------- a quoi ça sert?
echo.
echo.
echo.
echo      *****************************************
echo      *  je vous remercie d'avoir jouer       *
echo      *     mon pseudo est Vimper             *
echo      *  j'ai programmer ce petit jeu         * 
echo      *  j'espere que vous avez pris plaisir  *
echo      *Merci aussi à barnabe0057 de batcher.fr*   ::<--------------------------gros clin d'oeil à barnabe0057 en espérant que tu soit d'accord
echo      *****************************************
echo.
pause
merci a toi barnabe0057
le progrès est une chose magnifique quand c'est bien utilisé.mais quand ça vas trop vite on se perd et les vieilles choses du passé refont surface et sont utilisé comme des idées novatrices!!!!
barnabe0057
SuperBatcher
Messages : 104
Enregistré le : 24 janv. 2017 13:41

Re: besoin de conseil

Message par barnabe0057 »

Merci pour le gros clin d'oeil, ce n'était pas utile mais ça fait plaisir !

Concernant la commande CHCP, elle sert à modifier le codepage, elle est généralement utilisée pour gérer l'affichage des caractères accentués.
Le codepage par défaut est 850, cela te permet de faire ton beau cadre en caractères ASCII, mais si je change le codepage en 1252 ou 28591 ou 65001 cela permet d'afficher correctement les accents et autres caractères exotiques.

Plus d'informations ici : https://docs.microsoft.com/en-us/window ... dentifiers
vimper
Batcheur occasionnel
Messages : 7
Enregistré le : 01 juin 2019 14:34

[résolu] besoin de conseil

Message par vimper »

merci barnane0057 pour tout
le progrès est une chose magnifique quand c'est bien utilisé.mais quand ça vas trop vite on se perd et les vieilles choses du passé refont surface et sont utilisé comme des idées novatrices!!!!
Répondre