Batch file 批号Pad键入游戏错误v2

Batch file 批号Pad键入游戏错误v2,batch-file,numpad,Batch File,Numpad,我正在为我的办公室创建一个打字游戏,供任何想尝试并提高其numberpad打字技能的人使用。如果输入正确或不正确,并且在stackoverflow社区(伟大的Compo)的帮助下,我的代码会保持评分,我的代码已经得到了改进。现在我尝试为用户添加难度选项。但我似乎在将批引用返回到输入的难度并遵循正确的难度选项时遇到了问题。我知道我可以使用IF和ELSE,但我仍然习惯于批处理的工作方式 增加难度之前的代码版本1 @ECHO OFF SET/A "correct=incorrect=0" :STA

我正在为我的办公室创建一个打字游戏,供任何想尝试并提高其numberpad打字技能的人使用。如果输入正确或不正确,并且在stackoverflow社区(伟大的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 "%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
语句,并在
暂停
(这无疑是调试的临时)之后使用
goto:eof
行。这会导致例程返回到调用
后的语句

实际上,
goto:eof
并不是严格要求的,只是良好的实践,这样如果添加更多例程,就不会从一个例程到下一个例程

注意冒号很重要
call:somelabel
在此批处理文件中的label
somelabel
处执行例程
callsomelabel
(不带冒号)执行名为
somelabel
的外部可执行文件


:eof
中的
也很重要-它被
cmd
理解为“此文件结束”

我不确定您为什么决定将结构完全更改回一系列GOTO:

试试这个:

@ECHO关闭
回声困难?
回声。
回声1。容易的
回声2。硬的
回声。
选择/C 12
设置“级别=%ERRORLEVEL%”
设置/A“正确=不正确=0”
:开始
CLS
颜色07
如果“%LEVEL%”=“2”(设置“num=%RANDOM%%RANDOM%”),则设置“num=%RANDOM%”
回声。
回音分数-正确%正确%,不正确%不正确%
回声。
回显%num%
回声。
设置/P“INP=”
回声。
如果“%INP%”=num%(
颜色27
回音正确
设置/A“正确+=1”
超时1>NUL
)否则(
颜色47
回声不正确
设置/A“不正确+=1”
超时1>NUL
)
开始

我从未意识到if的字面意义。谢谢你提供的所有信息和帮助我试着在我的office windows xp上运行这个,我知道你会开玩笑,但不管我是第一次输入硬的还是简单的,它仍然有easy的典型数字。我似乎一直在尝试从幸运饼学中文。我试着只从论坛和文章中学习我认为我需要知道的东西,我肯定有很多要学的东西。我似乎不能把我的头缠绕在如果,否则,如果否则。我知道在编写这些代码时,摆脱goto会让我的生活更轻松。我非常感谢您的帮助,我试着运行代码,但有机会选择难度,它直接指向由%random%生成的数字