バッチファイル(オセロ003_初期表示)

■先に考えた内容に沿って、開始時の表示を組んでみる。

開始時は中心部分に白、黒の石が2つずつ置かれ、その他はスペースとなる。
縦、横それぞれ1マス目から8マス目までの計64マスあるため、下のように
2次元配列を使用して、setでその要素として白、黒、スペースを入れていく
([4][5]は、先が上からの位置、後が左からの位置)。
set array[4][5]=●

64マスに対して1つずつsetを使うのでは長ったらしくなるので、for文を使う。
ここで、/l:オプション記号、n, m:for文内の変数、(1,1,8):(開始の数、増分、終わりの数)
for /l %%n in (1,1,8) do (
for /l %%m in (1,1,8) do (
set array[%%n][%%m]=_
)
)
これに〇と●の初期の状態を入れて開始時の入力は完了。

表示はechoを使用すればよいので、まず、上のfor文と同じものを作ってechoで繰り返し表示させてみた(echo %array[%%n][%%m]%)。
うまくいかない。「ECHO は <OFF>です。」とでる。
for文中は%を使用できないらしい(%の終わりが正しく認識されないから?)。
調べてみると、遅延環境変数なるものを使って問題回避できるらしい。
また、echoを使うと改行されてしまうみたいなので、1行分を結合した後で表示させる。
結合は&や+を入れず単に並べるだけ。
なんとかそれらしい表示になった。

最終的なコードは下のもの。

@echo off
echo Start Othello
rem /l:optional symbol, %%n:variable within for code、(1,1,8):(start number, increase, end number)
rem initial setting on field, stone (white:〇, black:●), space:_
rem ==============================
for /l %%n in (1,1,8) do (
for /l %%m in (1,1,8) do (
set array[%%n][%%m]=_
)
)
set array[4][4]=〇
set array[4][5]=●
set array[5][4]=●
set array[5][5]=〇
rem ==============================

rem Display field
rem echo makes newline, one line is displayed after combining strings
rem ==============================
setlocal enabledelayedexpansion
for /l %%n in (1,1,8) do (
echo !array[%%n][1]!!array[%%n][2]!!array[%%n][3]!!array[%%n][4]!!array[%%n][5]!!array[%%n][6]!!array[%%n][7]!!array[%%n][8]!
)
rem ==============================