バッチファイル(オセロ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 ==============================