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

Résolu/Fermé
Quartz - 30 juin 2022 à 16:34
 Quartz - 30 juin 2022 à 18:05
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
30 juin 2022 à 16:40
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
Nous avons le même code, et le même problème...
1
J'ai trouvé! Voici la dernière version, fonctionelle:
:afficherPersonnage
set "lignes=%lignes%X"
echo. %lignes%
pause
0
Quartz > Quartz
30 juin 2022 à 17:29
Merci beaucoup pour vos réponses
0
Merci, je vais essayer
0
Merci, le programme fonctionne presque sauf que j'ai des tas de guillemets qui s'affichent à l'écran...
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 30 juin 2022 à 16:48
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
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
Je ne pense pas que le problème vienne du reste du code :/
0
Quartz > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
30 juin 2022 à 17:07
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
30 juin 2022 à 17:07
À j'ai trouvé l'erreur!!!
1
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Quartz
30 juin 2022 à 17:08
Tu as mal corrigé la deuxième ligne ;)
1
Quartz > Quartz
30 juin 2022 à 17:09
Je n'ai plus les doubles quotes mais le X n'est pas assez décalé...
1
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
30 juin 2022 à 17:20
@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
Sur votre code non plus, le X n'est pas décalé de 78 caractères vers la droites...
1
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Quartz
Modifié le 30 juin 2022 à 17:52
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
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
30 juin 2022 à 18:02
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
30 juin 2022 à 18:05
Merci beaucoup pour votre aide!
0