Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R]Fermeture d'un batch avec pause en fin
Auteur Message
Répondre en citant
Message [R]Fermeture d'un batch avec pause en fin 
Bonjour,
J'ai créé un jeu en batch mais il ne fonctionne pas en mode 1v1v1 et se ferme tout seul. Je vous donne donc la partie où le jeu se ferme. Le fichieer va comparer trois nombres et va dire lequel est le plus grand ou si il y a eu égalité.
Code:

set /p joueur1j3=
set /p joueur2j3=
set /p joueur3j3=

set scorejoueur1j3=80
set scorejoueur2j3=70
set scorejoueur3j3=90
if %scorejoueur1j3% GTR %scorejoueur2j3% set /p score12j3=%scorejoueur1j3%
if %scorejoueur1j3% LSS %scorejoueur2j3% set /p score12j3=%scorejoueur2j3%
if %scorejoueur1j3% EQU %scorejoueur2j3% set /p score12j3=%scorejoueur1j3%
if %scorejoueur2j3% GTR %scorejoueur3j3% set /p score23j3=%scorejoueur2j3%
if %scorejoueur2j3% LSS %scorejoueur3j3% set /p score23j3=%scorejoueur3j3%
if %scorejoueur2j3% EQU %scorejoueur3j3% set /p score23j3=%scorejoueur2j3%
if %scorejoueur3j3% GTR %scorejoueur1j3% set /p score31j3=%scorejoueur3j3%
if %scorejoueur3j3% LSS %scorejoueur1j3% set /p score31j3=%scorejoueur1j3%
if %scorejoueur3j3% EQU %scorejoueur1j3% set /p score31j3=%scorejoueur1j3%

if %score12j3% GTR %score23j3% set /p scoreX=%score12j3%
if %score12j3% LSS %score23j3% set /p scoreX=%score23j3%
if %score12j3% EQU %score23j3% set /p scoreX=%score12j3%
if %scoreX% GTR %score31j3% set /p score1231j3=%scoreX%
if %scoreX% LSS %score31j3% set /p score1231j3=%score31j3%
if %scoreX% EQU %score31j3% set /p score1231j3=%scoreX%
if %score1231j3% EQU %scorejoueur1j3% set /p %REP%=%joueur1j3%      a gagn‚ !
if %score1231j3% EQU %scorejoueur2j3% set /p %REP%=%joueur2j3%      a gagn‚ !
if %score1231j3% EQU %scorejoueur3j3% set /p %REP%=%joueur3j3%      a gagn‚ !
if %score1231j3% EQU %scorejoueur1j3% set /p %EGAL%=%score1231j3%
if %EGAL% EQU %scorejoueur2j3% set /p %REP%=     il y a eu ‚galit‚ !
if %EGAL% EQU %scorejoueur3j3% set /p %REP%=     il y a eu ‚galit‚ !
echo %REP%
pause

Cordialement,
Etienne



Dernière édition par etiennec78 le Mer 27 Juin 2018 - 16:39; édité 3 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R]Fermeture d'un batch avec pause en fin 
Bonjour,
J'ai essayé d'enregistrer une vidéo avec OBS studio pour voir si il y avait une erreur avant de se fermer. IL y en a donc une qui est: set était inattendu.

J'ai recherché sur internet mais je n'ai pas trouvé de solutions pour ce problème.
Si quelqu'un a une idée je suis preneur! Very Happy

Cordialement,
Etienne



Répondre en citant
Message [R]Fermeture d'un batch avec pause en fin 
A un moment dans ton code il y a ça :

Code:
if %score1231j3% EQU %scorejoueur1j3% set /p %EGAL%=%score1231j3%
if %EGAL% EQU %scorejoueur2j3% set /p %REP%= il y a eu ‚galit‚ !


Si le score n'est pas égal alors la variable EGAL n'est pas défini donc à la condition suivante il y a une erreur de syntaxe, c'est comme si on mettait : if EQU %scorejoueur2j3% set ...
Donc il suffit de mettre un set EGAL=-1 et le problème est résolu

Et faut aussi enlever tout les " /p" des set

ce qui donne :
Code:
@echo off

set joueur1j3=1
set joueur2j3=2
set joueur3j3=3


set scorejoueur1j3=70
set scorejoueur2j3=80
set scorejoueur3j3=90


if %scorejoueur1j3% GTR %scorejoueur2j3% set score12j3=%scorejoueur1j3%
if %scorejoueur1j3% LSS %scorejoueur2j3% set score12j3=%scorejoueur2j3%
if %scorejoueur1j3% EQU %scorejoueur2j3% set score12j3=%scorejoueur1j3%

if %scorejoueur2j3% GTR %scorejoueur3j3% set score23j3=%scorejoueur2j3%
if %scorejoueur2j3% LSS %scorejoueur3j3% set score23j3=%scorejoueur3j3%
if %scorejoueur2j3% EQU %scorejoueur3j3% set score23j3=%scorejoueur2j3%

if %scorejoueur3j3% GTR %scorejoueur1j3% set score31j3=%scorejoueur3j3%
if %scorejoueur3j3% LSS %scorejoueur1j3% set score31j3=%scorejoueur1j3%
if %scorejoueur3j3% EQU %scorejoueur1j3% set score31j3=%scorejoueur1j3%


if %score12j3% GTR %score23j3% set scoreX=%score12j3%
if %score12j3% LSS %score23j3% set scoreX=%score23j3%
if %score12j3% EQU %score23j3% set scoreX=%score12j3%

if %scoreX% GTR %score31j3% set score1231j3=%scoreX%
if %scoreX% LSS %score31j3% set score1231j3=%score31j3%
if %scoreX% EQU %score31j3% set score1231j3=%scoreX%


if %score1231j3% EQU %scorejoueur1j3% set REP=%joueur1j3% a gagn‚ !
if %score1231j3% EQU %scorejoueur2j3% set REP=%joueur2j3% a gagn‚ !
if %score1231j3% EQU %scorejoueur3j3% set REP=%joueur3j3% a gagn‚ !
set EGAL=-1
if %score1231j3% EQU %scorejoueur1j3% set EGAL=%score1231j3%
if %EGAL% EQU %scorejoueur2j3% set REP= il y a eu ‚galit‚ !
if %EGAL% EQU %scorejoueur3j3% set REP= il y a eu ‚galit‚ !

echo %REP%
pause


Si tu veux ajouter un 4ème joueur ça va se complexifier encore +
Je te propose un code qui s'adapte pour n'importe quel nombre de joueur :
Code:
@echo off
setlocal enabledelayedexpansion


set String=call :String
call :Game.Init


%Game%.AddPlayer { ^
  "Name:Mathis" ^
  "Score:8" ^
}

%Game%.AddPlayer { ^
  "Name:John" ^
  "Score:25" ^
}

%Game%.AddPlayer { ^
  "Name:Louis" ^
  "Score:8" ^
}


for /l %%i in (0,1,!Game.Player.Length!) do echo;!Game.Player.%%i.Name! a !Game.Player.%%i.Score! de score ^^!
echo;

%Game%.getLeaderboard
for /l %%i in (0,1,!Game.Player.Length!) do echo;!Game.Player.%%i.Name! est !Game.Player.%%i.Position!eme
echo;
for /l %%i in (1,1,!Game.LeaderBoard.Length!) do (
  set stringtmp=
  set tmpnb=0
  set tmpscore=0
  for %%a in (!Game.LeaderBoard.%%i:~1!) do (
    set stringtmp=!stringtmp!, !Game.Player.%%a.Name!
    set /a tmpnb+=1
    set tmpscore=!Game.Player.%%a.Score!
  )
  if %%i equ 1 (
    rem Les gagnants:
   if !tmpnb! gtr 1 (
     echo;!stringtmp:~2! sont premiers ex aequo avec !tmpscore! de score ^^!
   ) else (
     echo;!stringtmp:~2! est premier avec !tmpscore! de score ^^!
   )
  ) else (
    if %%i neq !Game.LeaderBoard.Length! (
      rem Au milieu:
     if !tmpnb! gtr 1 (
       echo;!stringtmp:~2! sont %%ieme ex aequo avec !tmpscore! de score
     ) else (
       echo;!stringtmp:~2! est %%ieme avec !tmpscore! de score
     )
    ) else (
      rem Les perdants:
     if !tmpnb! gtr 1 (
       echo;!stringtmp:~2! sont derniers ex aequo avec !tmpscore! de score
     ) else (
       echo;!stringtmp:~2! est dernier avec !tmpscore! de score
     )
    )
  )
)

pause>nul&exit

:Game.Init
  set Game=call :Game
  set Game.Player.Length=0
  set Game.Player.TLength=0
Exit /b
:Game.AddPlayer <Obj>
  set Key=Game.Player.!Game.Player.TLength!
  for %%k in (%*) do for /f "tokens=1,* delims=:" %%1 in ('echo;%%~k') do if not "%%~2"=="" set !Key!.%%~1=%%~2
  set Game.Player.Length=!Game.Player.TLength!
  set /a Game.Player.TLength+=1
Exit /b
:Game.getLeaderboard
  set MaxScore=0
  for /l %%i in (0,1,!Game.Player.Length!) do if !Game.Player.%%i.Score! gtr !MaxScore! set MaxScore=!Game.Player.%%i.Score!
  %String%.length !MaxScore! MaxScore.Length
  set LeadingZero=
  for /l %%i in (1,1,!MaxScore.Length!) do set LeadingZero=!LeadingZero!0
  set LeadingZero=1!LeadingZero!
  del /q "%temp%\TmpScore"
  for /l %%i in (0,1,!Game.Player.Length!) do (
    set /a Game.Player.%%i.TmpScore=!LeadingZero!+!Game.Player.%%i.Score
   echo;!Game.Player.%%i.TmpScore!;%%i
  )>> "%temp%\TmpScore"
  sort /r < "%temp%\TmpScore" > "%temp%\TmScore"
  set tmppos=1
  set tpa=
  for /f "tokens=1,* delims=;" %%1 in ('type "%temp%\TmScore"') do (
   for %%a in (!tpa!) do if not "!Game.Player.%%a.Score!"=="!Game.Player.%%2.Score!" (
     set /a tmppos+=1
   )
   set Game.Player.%%2.Position=!tmppos!
   for %%a in (!tmppos!) do set Game.LeaderBoard.%%a=!Game.LeaderBoard.%%a! %%2
   set tpa=%%2
  )
  set Game.LeaderBoard.Length=!tmppos!
Exit /b
:String.length <String> <Output:VariableName>
  set "s=%~1#"
  set "len=0"
  for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if "!s:~%%P,1!" NEQ "" (
      set /a "len+=%%P"
      set "s=!s:~%%P!"
    )
  )
  set "%~2=!len!"
Exit /b


Pour rajouter un joueur, il suffit de rajouter ceci au début (après call :Game.Init) :
Code:
%Game%.AddPlayer { ^
  "Name:Nom du joueur" ^
  "Score:25" ^
}



Voici un petit aperçu avec 8 joueurs Mr. Green



p.s : Sinon tu t'es trompé de catégorie il fallait que tu postes ton problème ici : http://batch.xoo.it/f11-Aide-Programation.htm
p.s 2 : Pensez à [CODE]




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R]Fermeture d'un batch avec pause en fin 
Merci beaucoup, c'est exactement ce qu'il me fallait. Je suis désolé mais je ne pense pas utiliser ton deuxième code car il est trop complexe pour moi et que j'essaye de faire un jeu que je puisse facilement comprendre et qui vienne le plus possible de moi. J'essayerais d'ajouter des joueurs en plus pour un autre mode de jeu avec ton premier code.

Cordialement,
Etienne



Répondre en citant
Message [R]Fermeture d'un batch avec pause en fin 
etiennec78 a écrit:
Merci beaucoup, c'est exactement ce qu'il me fallait.

Okay


etiennec78 a écrit:
Je suis désolé mais je ne pense pas utiliser ton deuxième code car il est trop complexe pour moi et que j'essaye de faire un jeu que je puisse facilement comprendre et qui vienne le plus possible de moi. J'essayerais d'ajouter des joueurs en plus pour un autre mode de jeu avec ton premier code.

C'est pas grave, je propose ce code dans le cas où tu souhaites ajouter d'autres joueurs et pour éviter de faire des trucs trop complexe comme ton code (à mon sens xDD) (surtout si tu souhaites ajouter par exemple 10 joueurs)
Tu peux toujours analyser et regarder comme il fonctionne Mr. Green



Pense à éditer ton premier message et à mettre [R] devant le titre Okay
Et à mettre ton code entre les balises





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Message [R]Fermeture d'un batch avec pause en fin 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch