したがって、問題 1 と 2 は関連しています。
まず、メッセージ システムが機能していません。次に、移動できない場所に移動しようとすると、選択ステートメントが W、S、A、および D を一番下に書き続けるという不具合があります。
更新セクションのエラーgoto
ステートメントを変更します。画面が再描画され (古い使用済みの選択プロンプトが削除され)、エラー メッセージが表示されるように、表示セクションに移動します。
set message="You can not move there."
goto display
問題 3 は、バッチの性質上、少し難しくなります。
第三に、最も重要なことは、画面の点滅が非常に煩わしいことです。
点滅は、主に 1 つのコマンドが原因で発生します。cls
コマンド。画面を再描画するだけでなく、最初に画面が黒くなり、新しい出力が描画されてちらつきが発生します。
ステップ 1:コマンドを削除しcls
ます。これは、画面を埋めるために毎回 30 行を出力する必要があることを意味します。
ちらつきをさらに減らすには、スクリプトを大幅に変更する必要があります。各行をエコーする代わりに、コマンド ウィンドウの自然な機能を使用して、行を折り返して画面全体を描画します。これにより、カップルへのエコー コールの量が減少します。キャンバスは 54 x 30 に設定されているため、一度に画面全体を埋めるには 1620 文字に相当します。
ステップ 2:描画/スクロールの遅延を防ぎ、コンソール ウィンドウの自然な行折り返し機能を使用するために、1 回またはできるだけ少ない呼び出しで画面全体を出力します。
この 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:役立つ追加のステップは、プロセスの優先度レベルを上げることです。これを上記のサンプル スクリプトの 2 行目に追加しました。