Lote / Windows: Números Aleatorios
-
05-07-2019 - |
Pregunta
Estoy desarrollando un juego de cartas para lotes. [dará un enlace cuando termine]
Básicamente, lo que quiero hacer es 'establecer' '% random%' en '% numbs%.
set %numbs%=%random%
Y luego quiero que el usuario escriba un valor de los%% números aleatorios que se muestran
echo %numbs%
Set nuchoo=
set /p nuchoo=Number:
Mi pregunta ahora es sobre cómo verificar si el valor ingresado por el usuario está en el valor% numbs%. Si es así,
GOTO :validnucho
si no,
GOTO :unvalidnucho
Cuando va a: validnucho, debería eliminar ese número de% numbs% var. Obviamente, si el% numbs% var contiene 2 veces el número, es importante que solo se elimine uno de los dos. El resto lo sé.
Solución
Esto debería ayudarte a comenzar
Guarde lo siguiente como Instr.cmd
@echo off
rem These two lines allow tracing to be turned on by entering
rem set TRACE=ECHO on the cmd line
if not defined TRACE set TRACE=rem
%TRACE% on
rem Allow use of delayed variable expansion using !
setlocal ENABLEDELAYEDEXPANSION
if /I [%1]==[Test] (
call :Test
goto :eof
)
:Instr
set mTestStr=%1
rem set /a does arithmatic
set /a TestIdx=0
set Found=N
set CopiedStr=
:startLoop
rem extract character at index TestIndx to test
set TestedChar=!mTestStr:~%TestIdx%,1!
rem echo TestedChar if trace is on
%TRACE% %TestedChar%
If [!TestedChar!]==[] (
goto :exitInstr
)
If [%TestedChar%]==[%2] (
rem Testedchar matchs search character,
rem so we have found the char we were looking for
if %Found%==Y (
set CopiedStr=%CopiedStr%%TestedChar%
)
set Found=Y
) else (
set CopiedStr=%CopiedStr%%TestedChar%
)
rem Increment Index
SET /a TestIdx=TestIdx+1
goto :startLoop
:exitInstr
rem endlocal but keep CopiedStr and Found
endlocal & set CopiedStr=%CopiedStr% & set Found=%Found%
goto :eof
:Test
call :Instr abcde c
call :Verify Y %Found% "call :Instr abcde c - Found"
call :Verify abde, %CopiedStr% "call :Instr abcde c - CopiedStr"
call :Instr abcde x
call :Verify N %Found% "call :Instr abcde x - Found"
call :Verify abcde, %CopiedStr% "call :Instr abcde x - CopiedStr"
call :Instr abcdec c
call :Verify Y %Found% "call :Instr abcdec c - Found"
call :Verify abdec, %CopiedStr% "call :Instr abcdec c - CopiedStr"
echo Tests Done
goto :eof
:Verify
set Expected=%1
set Expected=%Expected:"=%
set Actual=%2
set Actual=%Actual:"=%
set Msg=%3
set Msg=%msg:"=%
If not "%Expected%"=="%Actual%" (
echo Failed: Expected "%Expected%" but was "%Actual%" - %Msg%
) else (
echo OK Expected "%Expected%" - %Msg%
)
goto :eof
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow