[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
A voir également:

7 réponses

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

Merci d'utiliser les balises de code pour poster.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Quartz
 
Je ne pense pas que le problème vienne du reste du code :/
0
Quartz > barnabe0057 Messages postés 14455 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
Quartz > Quartz
 
À j'ai trouvé l'erreur!!!
1
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > Quartz
 
Tu as mal corrigé la deuxième ligne ;)
1
Quartz > Quartz
 
Je n'ai plus les doubles quotes mais le X n'est pas assez décalé...
1
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
@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
Quartz
 
Sur votre code non plus, le X n'est pas décalé de 78 caractères vers la droites...
1
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > 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
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
Quartz > barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci beaucoup pour votre aide!
0