[BATCH] Problème pour aditionner des chaînes de caractères

Résolu
Quartz -  
 Quartz -
Bonjour, je veux crée un jeu en batch, où le personnage (une croix) peut se déplacer. Pour cela, en fonction des coordonnées, l'ordinateur crée plus ou moins de lignes avant la croix, et plus ou moins d'espaces avant croix. Malheureusement, je n'arrive pas à définir un nombre d'espace avant la croix. Voici le bout de code important:

:y
set /a nb=0
:loopy
if %y% == %nb% (goto x)
echo.
set /a nb=nb+1
goto loopy
:x
echo off
set /a nb=0
set /a lignes=" "
:loopx
if %x% == %nb% (goto afficherPersonnage)
set /a lignes=%lignes%" "
set /a nb=nb+1
goto loopx
:afficherPersonnage
echo. %lignes%
echo. X
pause


L'erreur que je reçoit?
Il manque un opérande

Bonne journée

7 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    J'ai l'impression que ton problème vient de la variable 'lignes'.

    En effet tu utilises set /a avec cette variable qui contient des chaînes de caractères alors que le commutateur /a sert à effectuer des opérations arithmétiques.

    Essaie d'utiliser set à la place de set /a
    1
  2. Quartz
     
    Nous avons le même code, et le même problème...
    1
    1. Quartz
       
      J'ai trouvé! Voici la dernière version, fonctionelle:
      :afficherPersonnage
      set "lignes=%lignes%X"
      echo. %lignes%
      pause
      0
      1. Quartz > Quartz
         
        Merci beaucoup pour vos réponses
        0
  3. Quartz
     
    Merci, le programme fonctionne presque sauf que j'ai des tas de guillemets qui s'affichent à l'écran...
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Poste ton code en entier, je peux sûrement corriger ça.

      Merci d'utiliser les balises de code pour poster.
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Quartz
     
    cls
    @echo off
    echo _ _ _ _ _ _ _ _ _
    echo _ _ _ _,/ _ _ _ _ ^| ___ __ \ _ _ _ ,
    echo _ _ _ _,/ _ _ _ _ /` \ \ \ \ \ \
    echo / _ _ _ _ _/` \ \ \ \ \ \ \ \
    echo \ \ \ \'__'\ \ \ -------,
    echo \ \ \ __ \ \ ------`
    echo \ \ \ \' '\ \ \ \
    echo \ \ \ \ \ \ \ \ _ _ _ _ /~\ /~\ /~\
    echo \ \ \__\ \__\ \ _ _ _ _, \~/ \~/ \~/
    echo \--\
    echo.
    echo.
    echo.
    echo Appuiez sur une touche pour commencer
    pause >nul
    :Menu
    cls
    echo.
    echo Démarrer (touche d)
    echo.
    echo Crédits (touche c)
    echo.
    echo Quitter (touche q)
    echo.
    echo.
    echo Appuiez sur la touche correspondante à votre action [d; c; q]
    choice /C dcq /N /M ">"
    if %errorlevel% == 1 (goto Start)
    if %errorlevel% == 2 (goto Credits)
    if %errorlevel% == 3 (goto Quit)
    :Quit
    cls
    echo Merci d'avoir joué!!
    echo.
    timeout 5 >nul
    exit /b
    :Credits
    cls

    echo Crédits:
    echo.
    echo Directeur en chef: Quartz
    echo Créateurs Graphismes: Quartz
    echo Programmations: Quartz
    echo.
    echo.
    echo Cinq premières personnes extérieur
    echo à l'entreprise à avoir testé le
    echo jeu The:
    echo.
    echo 1-
    echo 2-
    echo 3-
    echo 4-
    echo 5-
    echo.
    echo Merci à tous pour vos conseils, vos
    echo idées, vos merci ou même pour le
    echo faites d'avoir joué, chose qui me
    echo rend joyeux: avoir fait une jeu
    echo que des personnes ont aimé!
    echo.
    echo.
    echo Appuie sur une touche...
    pause >nul
    goto Menu
    :Start
    cls
    echo Est-ce la première fois que vous jouez?
    echo o/n
    choice /C on /N /M ">"
    if %errorlevel% == 1 goto Instructions
    if %errorlevel% == 2 goto Demmarer
    :Instructions
    cls
    echo Vous incarnez un personnage, qui ressemble à une croix et qui peut se déplacer dans le monde. Il peut apprendre
    echo des sorts et au fur et à mesure du temps, il deviendra de plus en plus fort.
    echo.
    echo Vous faites ce que vous voulez sauf faire n'importe quoi vous ne voudriez pas perdre
    echo tous vos fichiers, si? XD
    echo.
    echo Se jeu n'est pas compliqué, ne vous inquiétez pas.
    echo.
    echo Appuiez sur les touches zsqd pour vous déplacer (z haut; s bas; q gauche; d droite)
    echo.
    echo.
    pause
    :Demmarer
    set /a x = 78
    set /a y = 20
    cls
    echo Prêts? Appuiez sur une touche pour commencer!
    pause >nul
    echo off
    :Loop
    :y
    set /a nb=0
    :loopy
    if %y% == %nb% (goto x)
    echo.
    set /a nb=nb+1
    goto loopy
    :x
    echo off
    set /a nb=0
    set lignes=" "
    :loopx
    if %x% == %nb% (goto afficherPersonnage)
    set lignes=%lignes%" "
    set /a nb=nb+1
    goto loopx
    :afficherPersonnage
    echo. %lignes%
    echo. X
    pause


    C'est mieux comme ça
    0
    1. Quartz
       
      Je ne pense pas que le problème vienne du reste du code :/
      0
    2. Quartz > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Non, je ne crois pas...
      Voici la dernière partie de mon code:
      :Demmarer
      set /a x = 78
      set /a y = 20
      cls
      echo Prêts? Appuiez sur une touche pour commencer!
      pause >nul
      echo off
      :Loop
      :y
      set /a nb=0
      :loopy
      if %y% == %nb% (goto x)
      echo.
      set /a nb=nb+1
      goto loopy
      :x
      echo off
      set /a nb=0
      set "lignes= "
      :loopx
      if %x% == %nb% (goto afficherPersonnage)
      set lignes="%lignes% "
      set /a nb=nb+1
      goto loopx
      :afficherPersonnage
      echo. %lignes%
      echo. X
      pause
      1
    3. Quartz > Quartz
       
      À j'ai trouvé l'erreur!!!
      1
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > Quartz
       
      Tu as mal corrigé la deuxième ligne ;)
      1
    5. Quartz > Quartz
       
      Je n'ai plus les doubles quotes mais le X n'est pas assez décalé...
      1
  6. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    @echo off
    chcp 65001 >nul
    echo _ _ _ _ _ _ _ _ _
    echo _ _ _ _,/ _ _ _ _ ^| ___ __ \ _ _ _ ,
    echo _ _ _ _,/ _ _ _ _ /` \ \ \ \ \ \
    echo / _ _ _ _ _/` \ \ \ \ \ \ \ \
    echo \ \ \ \'__'\ \ \ -------,
    echo \ \ \ __ \ \ ------`
    echo \ \ \ \' '\ \ \ \
    echo \ \ \ \ \ \ \ \ _ _ _ _ /~\ /~\ /~\
    echo \ \ \__\ \__\ \ _ _ _ _, \~/ \~/ \~/
    echo \--\
    echo.
    echo.
    echo.
    echo Appuyez sur une touche pour commencer
    pause >nul
    :Menu
    cls
    echo.
    echo Démarrer (touche d)
    echo.
    echo Crédits (touche c)
    echo.
    echo Quitter (touche q)
    echo.
    echo.
    echo Appuyez sur la touche correspondante à votre action [d; c; q]
    choice /C dcq /N /M ">"
    if %errorlevel% == 1 (goto Start)
    if %errorlevel% == 2 (goto Credits)
    if %errorlevel% == 3 (goto Quit)
    :Quit
    cls
    echo Merci d'avoir joué!!
    echo.
    timeout 5 >nul
    exit /b
    :Credits
    cls

    echo Crédits:
    echo.
    echo Directeur en chef: Clément
    echo Créateurs Garphismes: Clément
    echo Programmations: Clément
    echo.
    echo.
    echo Cinq premières personnes extérieures
    echo à l'entreprise à avoir testé le
    echo jeu The:
    echo.
    echo 1-
    echo 2-
    echo 3-
    echo 4-
    echo 5-
    echo.
    echo Merci à tous pour vos conseils, vos
    echo idées, vos merci ou même pour le
    echo fait d'avoir joué, chose qui me
    echo rend joyeux: avoir fait un jeu
    echo que des personnes ont aimé!
    echo.
    echo.
    echo Appuie sur une touche...
    pause >nul
    goto Menu
    :Start
    cls
    echo Est-ce la première fois que vous jouez?
    echo o/n
    choice /C on /N /M ">"
    if %errorlevel% == 1 goto Instructions
    if %errorlevel% == 2 goto Demmarer
    :Instructions
    cls
    echo Vous incarnez un personnage, qui ressemble à une croix et qui peut se déplacer dans le monde. Il peut apprendre
    echo des sorts et au fur et à mesure du temps, il deviendra de plus en plus fort.
    echo.
    echo Vous faites ce que vous voulez sauf faire n'importe quoi vous ne voudriez pas perdre
    echo tous vos fichiers, si? XD
    echo.
    echo Se jeu n'est pas compliqué, ne vous inquiétez pas.
    echo.
    echo Appuiez sur les touches zsqd pour vous déplacer (z haut; s bas; q gauche; d droite)
    echo.
    echo.
    pause
    :Demmarer
    set /a x = 78
    set /a y = 20
    cls
    echo Prêts? Appuyez sur une touche pour commencer!
    pause >nul
    echo off
    :Loop
    :y
    set /a nb=0
    :loopy
    if %y% == %nb% (goto x)
    echo.
    set /a nb=nb+1
    goto loopy
    :x
    echo off
    set /a nb=0
    set "lignes= "
    :loopx
    if %x% == %nb% (goto afficherPersonnage)
    set "lignes=%lignes% "
    set /a nb=nb+1
    goto loopx
    :afficherPersonnage
    echo. %lignes%
    echo. X
    pause

    0
    1. Quartz
       
      Sur votre code non plus, le X n'est pas décalé de 78 caractères vers la droites...
      1
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > Quartz
         
        oui effectivement

        Voilà comment faire en simplifiant ton code :
        setlocal enabledelayedexpansion

        :Loop
        for /L %%A in (1,1,%y%) do echo.

        set "lignes="
        for /L %%A in (1,1,%x%) do set "lignes=!lignes! "

        :afficherPersonnage
        echo !lignes! X
        pause
        0
  7. Quartz
     
    Re-Bonjour,
    J'ai continué mon code, le but étant que mon personnage se déplace. Mon code fonctionne à moitié, il ne peut se déplacer que verticalement...
    Voici le reste du code
    :afficherPersonnage
    set "lignes=%lignes%X"
    echo. %lignes%
    :ChoisirDirection
    choice /c zsqd /N /M ""
    if %errorlevel%==1 (set /a y=%y%-1)
    if %errorlevel%==2 (set /a y=%y%+1)
    if %errorlevel%==3 (set /a x=%x%-1)
    if %errorlevel%==3 (set /a x=%x%+1)
    cls
    goto Loop


    Je sais, ce n'est pas le sujet, mais je pense qu'il vaut mieux continuer ici, vu que vous connaissez déjà le fonctionnement de mon programme...
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      En simplifiant un peu le code ça donne ça :

      :Demmarer
      set /a x=78
      set /a y=20
      cls
      echo Prêts? Appuyez sur une touche pour commencer!
      pause >nul

      setlocal enabledelayedexpansion

      :Loop
      cls
      for /L %%A in (1,1,%y%) do echo.

      set "lignes="
      for /L %%A in (1,1,%x%) do set "lignes=!lignes! "

      :afficherPersonnage
      echo !lignes! X

      :ChoisirDirection
      choice /c zsqd /N /M ""
      if %errorlevel% EQU 1 (set /a y-=1)
      if %errorlevel% EQU 2 (set /a y+=1)
      if %errorlevel% EQU 3 (set /a x-=1)
      if %errorlevel% EQU 4 (set /a x+=1)

      goto Loop
      0
      1. Quartz > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci beaucoup pour votre aide!
        0