Batch file 批处理类流氓错误

Batch file 批处理类流氓错误,batch-file,roguelike,Batch File,Roguelike,我正试图做一批流氓,但我遇到了三个主要问题。首先,我的信息系统不工作。第二个问题是,如果我试图移动到某个我不能移动的地方,选择语句会一直在底部写W、S、a和D。第三,也是最重要的一点是,屏幕上有一个非常恼人的闪烁。我尽量减少加载所需的时间,但没有效果。这是我的密码: @echo off setlocal enableextensions mode con: cols=54 lines=30 set num=1 set nextVar=1 set oldVar=103 set message=a

我正试图做一批流氓,但我遇到了三个主要问题。首先,我的信息系统不工作。第二个问题是,如果我试图移动到某个我不能移动的地方,选择语句会一直在底部写W、S、a和D。第三,也是最重要的一点是,屏幕上有一个非常恼人的闪烁。我尽量减少加载所需的时间,但没有效果。这是我的密码:

@echo off 
setlocal enableextensions
mode con: cols=54 lines=30
set num=1
set nextVar=1
set oldVar=103
set message=a
cls 
echo Loading...
:startup
if not %num%==1001 (
set b%num%=.
set /a num = %num% + 1
goto startup
)
cls
set b103=@
goto update

:update 
choice /c wsad /n /m ""
if %errorlevel%==1 set /a nextVar = %oldVar% - 50 
if %errorlevel%==2 set /a nextVar = %oldVar% + 50 
if %errorlevel%==3 set /a nextVar = %oldVar% - 1 
if %errorlevel%==4 set /a nextVar = %oldVar% + 1  
if defined b%nextVar% (
set b%nextVar%=@
set b%oldVar%=.
set oldVar=%nextVar%
set message="a"
goto display
)
set message="You can not move there."
goto update

:display
set ln1=%b1%%b2%%b3%...
set ln2=%b51%%b52%%b53%... 
set ln3=%b101%%b102%... 
...
...
...
set ln8=%b351%%b352%... 
set ln18=%b851%%b852%%b853% 
set ln19=%b901%%b902%%b903%%b904%... 
set ln20=%b951%%b952%%b953%%b954%%b955%%b956%...%b1000%
cls
if not "%message%"=="a" (
echo %message%
goto next
)
echo.
:next
echo.
echo %ln1%
echo %ln2%
echo %ln3%
echo %ln4%
echo %ln5%
echo %ln6%
echo %ln7%
echo %ln8%
echo %ln9%
echo %ln10%
echo %ln11%
echo %ln12%
echo %ln13%
echo %ln14%
echo %ln15%
echo %ln16%
echo %ln17%
echo %ln18%
echo %ln19%
echo %ln20%
echo.
goto update 
我不得不。。。有些部分可以节省空间。如果有人能在屏幕闪烁中解决这些问题,那将非常有帮助。此外,如果有人对网络黑客一代的地下城有什么想法,也会很感激的。谢谢。

所以问题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
@echo关闭
(如果“%~1”==”开始“/高%01&退出/B1)
延迟扩展
模式con:cols=80行=25行
设置“标记=0”
设置“开关=0”
:下一个
如果%mark%geq 920设置“mark=0”&如果%switch%eq为0(设置“switch=1”),否则设置“switch=0”
设置top=。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
设置bot=。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
如果%switch%eq 0机顶盒=!顶部:~0%,马克%!^ |!顶部:~%mark%!
如果%switch%eq 1设置bot=!机器人:~0%,马克%!^ |!机器人:~%mark%!
转到显示
:显示
回显%标记%
设置/p“=%顶部:~0920%”