所以问题1和2是相关的。
首先,我的消息系统无法正常工作。其次有一个小故障,如果我试图移动到我不能选择的地方,那么选择语句会一直在底部写 W、S、A 和 D。
更改goto
更新部分的错误语句。您想转到显示部分,以便重新绘制屏幕(删除旧的使用选择提示)并显示错误消息。
set message="You can not move there."
goto display
由于批处理的性质,问题 3 有点困难。
第三也是最重要的是屏幕闪烁非常烦人。
闪烁主要是由于一个命令引起的。cls
命令。在绘制新输出导致闪烁之前,它首先导致屏幕变黑,而不是仅仅重绘屏幕。
步骤 1:删除cls
命令。这意味着您每次必须输出 30 行才能填满屏幕。
进一步减少闪烁将需要对脚本进行更大的检修。不用回显每一行,而是使用命令窗口的自然能力来换行以绘制整个屏幕。这将减少一对夫妇的回声呼叫量。您的画布设置为 54 x 30,因此等于 1620 个字符一次填满整个屏幕。
步骤 2:使用单个或尽可能少的调用输出整个屏幕,以防止绘制/滚动延迟并使用控制台窗口的自然换行能力。
这是我整理的一个示例来说明第二步。如果您有任何问题,请告诉我。
@echo off
( if "%~1"=="" start "" /HIGH %0 1 & exit /b 1 )
setlocal enabledelayedexpansion
mode con: cols=80 lines=25
set "mark=0"
set "switch=0"
:next
if %mark% geq 920 set "mark=0" & if %switch% equ 0 ( set "switch=1" ) else set "switch=0"
set top=........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
set bot=........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
if %switch% equ 0 set top=!top:~0,%mark%!^|!top:~%mark%!
if %switch% equ 1 set bot=!bot:~0,%mark%!^|!bot:~%mark%!
goto display
:display
echo %mark%
set /p "=%top:~0,920%" <nul
set /p "=%bot:~0,920%" <nul
ping 192.0.2.2 -n 1 -w 200 >nul
set /a mark+=1
goto next
第 3 步:另一个有帮助的步骤是提高进程的优先级。我还在上面第二行的示例脚本中添加了这个。