批量数字键盘打字游戏错误 v2
batch numberpad typing game error v2
我正在为我的办公室制作一个打字游戏,供任何想尝试提高数字键盘打字技能的人使用。如果输入正确或不正确,我的代码会保持评分,并且在 Whosebug 社区(伟大的 Compo)的帮助下,我的代码得到了改进。现在我正在尝试为用户添加难度选项。但我似乎在将批处理参考返回到输入的难度并遵循正确的难度选项时遇到了问题。我知道我可以使用 IF 和 ELSE,但我仍然习惯了批处理的工作方式。
添加难度前的代码版本 1
@ECHO OFF
SET/A "correct=incorrect=0"
:START
CLS
COLOR 07
SET "num=%RANDOM%"
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
PING -n 2 0.0.0.0 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
PING -n 2 0.0.0.0 1>NUL
)
GOTO START
版本 1 的代码有难度选项
@ECHO OFF
SET/A "correct=incorrect=0"
:STARTDIFF
ECHO DIFFICULTY?
ECHO.
ECHO EASY
ECHO HARD
ECHO.
SET /P "DIFF= "
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF
: STARTEASY
CLS
COLOR 07
SET "num=%RANDOM%"
GOTO TEST
: STARTHARD
CLS
COLOR 07
SET "num=%RANDOM%%RANDOM%"
GOTO TEST
: TEST
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
PING -n 2 0.0.0.0 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
PING -n 2 0.0.0.0 1>NUL
)
ECHO %DIFF%>NUL
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF
::GOTO START
如何告诉代码从头开始参考设置的难度并继续使用该难度?
抱歉,我希望我使用新的正确术语来更好地解释我正在尝试做的事情。
尝试运行这段代码,稍微修改一下。
@echo off
SET/A "correct=incorrect=0"
:STARTDIFF
ECHO DIFFICULTY?
ECHO.
ECHO EASY
ECHO HARD
ECHO.
SET /P "DIFF= "
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF
:STARTEASY
SET X="EASY"
CLS
COLOR 07
SET "num=%RANDOM%"
GOTO TEST
:STARTHARD
SET X="HARD"
CLS
COLOR 07
SET "num=%RANDOM%%RANDOM%"
:TEST
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
PING -n 2 0.0.0.0 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
PING -n 2 0.0.0.0 1>NUL
)
IF %X%=="EASY" GOTO STARTEASY
IF %X%=="HARD" GOTO STARTHARD
pause
if
很字面意思,两个参数必须完全一样才声明相等
因此,例如
IF "%DIFF%" EQU EASY GOTO STARTEASY
应该是
IF "%DIFF%" EQU "EASY" GOTO STARTEASY
或更好,
IF /I "%DIFF%" EQU "EASY" GOTO STARTEASY
这使得比较不区分大小写。
但是请注意,由于您将带引号的字符串分配给变量 x
,因此比较是正确的。
也许你应该了解子程序。
:STARTEASY
CLS
COLOR 07
SET "num=%RANDOM%"
call :TEST
goto starteasy
然后删除例程:test
中的最后2条if
语句,并在pause
(毫无疑问是临时调试用的)后面加上goto :eof
行.这会导致例程 return 到 call
.
之后的语句
实际上,goto :eof
并不是严格要求的,只是一种很好的做法,这样如果您添加更多例程,就不会从一个例程流到下一个例程。
请注意冒号很重要。 call :somelabel
在此批处理文件中执行标签 somelabel
处的例程。 call somelabel
(没有冒号)执行名为 somelabel
的外部可执行文件。
:eof
中的:
也很重要——cmd
理解为"end-of-this-file"
我不确定你为什么决定将结构完全改回一系列 GOTO:
试试这个:
@ECHO OFF
ECHO DIFFICULTY?
ECHO.
ECHO 1. EASY
ECHO 2. HARD
ECHO.
CHOICE /C 12
SET "LEVEL=%ERRORLEVEL%"
SET/A "correct=incorrect=0"
:START
CLS
COLOR 07
IF "%LEVEL%"=="2" (Set "num=%RANDOM%%RANDOM%") ELSE SET "num=%RANDOM%"
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET/P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
TIMEOUT 1 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
TIMEOUT 1 1>NUL
)
GOTO START
我正在为我的办公室制作一个打字游戏,供任何想尝试提高数字键盘打字技能的人使用。如果输入正确或不正确,我的代码会保持评分,并且在 Whosebug 社区(伟大的 Compo)的帮助下,我的代码得到了改进。现在我正在尝试为用户添加难度选项。但我似乎在将批处理参考返回到输入的难度并遵循正确的难度选项时遇到了问题。我知道我可以使用 IF 和 ELSE,但我仍然习惯了批处理的工作方式。
添加难度前的代码版本 1
@ECHO OFF
SET/A "correct=incorrect=0"
:START
CLS
COLOR 07
SET "num=%RANDOM%"
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
PING -n 2 0.0.0.0 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
PING -n 2 0.0.0.0 1>NUL
)
GOTO START
版本 1 的代码有难度选项
@ECHO OFF
SET/A "correct=incorrect=0"
:STARTDIFF
ECHO DIFFICULTY?
ECHO.
ECHO EASY
ECHO HARD
ECHO.
SET /P "DIFF= "
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF
: STARTEASY
CLS
COLOR 07
SET "num=%RANDOM%"
GOTO TEST
: STARTHARD
CLS
COLOR 07
SET "num=%RANDOM%%RANDOM%"
GOTO TEST
: TEST
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
PING -n 2 0.0.0.0 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
PING -n 2 0.0.0.0 1>NUL
)
ECHO %DIFF%>NUL
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF
::GOTO START
如何告诉代码从头开始参考设置的难度并继续使用该难度?
抱歉,我希望我使用新的正确术语来更好地解释我正在尝试做的事情。
尝试运行这段代码,稍微修改一下。
@echo off
SET/A "correct=incorrect=0"
:STARTDIFF
ECHO DIFFICULTY?
ECHO.
ECHO EASY
ECHO HARD
ECHO.
SET /P "DIFF= "
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF
:STARTEASY
SET X="EASY"
CLS
COLOR 07
SET "num=%RANDOM%"
GOTO TEST
:STARTHARD
SET X="HARD"
CLS
COLOR 07
SET "num=%RANDOM%%RANDOM%"
:TEST
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
PING -n 2 0.0.0.0 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
PING -n 2 0.0.0.0 1>NUL
)
IF %X%=="EASY" GOTO STARTEASY
IF %X%=="HARD" GOTO STARTHARD
pause
if
很字面意思,两个参数必须完全一样才声明相等
因此,例如
IF "%DIFF%" EQU EASY GOTO STARTEASY
应该是
IF "%DIFF%" EQU "EASY" GOTO STARTEASY
或更好,
IF /I "%DIFF%" EQU "EASY" GOTO STARTEASY
这使得比较不区分大小写。
但是请注意,由于您将带引号的字符串分配给变量 x
,因此比较是正确的。
也许你应该了解子程序。
:STARTEASY
CLS
COLOR 07
SET "num=%RANDOM%"
call :TEST
goto starteasy
然后删除例程:test
中的最后2条if
语句,并在pause
(毫无疑问是临时调试用的)后面加上goto :eof
行.这会导致例程 return 到 call
.
实际上,goto :eof
并不是严格要求的,只是一种很好的做法,这样如果您添加更多例程,就不会从一个例程流到下一个例程。
请注意冒号很重要。 call :somelabel
在此批处理文件中执行标签 somelabel
处的例程。 call somelabel
(没有冒号)执行名为 somelabel
的外部可执行文件。
:eof
中的:
也很重要——cmd
理解为"end-of-this-file"
我不确定你为什么决定将结构完全改回一系列 GOTO:
试试这个:
@ECHO OFF
ECHO DIFFICULTY?
ECHO.
ECHO 1. EASY
ECHO 2. HARD
ECHO.
CHOICE /C 12
SET "LEVEL=%ERRORLEVEL%"
SET/A "correct=incorrect=0"
:START
CLS
COLOR 07
IF "%LEVEL%"=="2" (Set "num=%RANDOM%%RANDOM%") ELSE SET "num=%RANDOM%"
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET/P "INP= "
ECHO.
IF "%INP%"=="%num%" (
COLOR 27
ECHO CORRECT
SET/A "correct+=1"
TIMEOUT 1 1>NUL
) ELSE (
COLOR 47
ECHO INCORRECT
SET/A "incorrect+=1"
TIMEOUT 1 1>NUL
)
GOTO START