Powershell(オセロ002_バッチファイルベースで作成_テスト)
■一端できたのでテストしてみる。
Powershellのオセロのプログラムは、2つのプレイヤー(PlayerAとB)が交互に石を置いていくところまでできた。問題なく裏返す処理はできているようなので、以前のバッチファイルで作成した一連のゲームをやってみる。
石を置く順序は下のような形で、60手ですべてのマスが埋まる。
35,36,64,34,24,23,22,12,25,14,15,16,26,32,33,43,42,27,17,18,28,38,46,56,47,58,31,41,53,52,51,74,84,65,66,75,48,37,13,21,11,57,62,63,68,85,86,72,82,61,71,81,67,78,77,83,73,87,88,76
1手目から見てみたけど、裏返す挙動がおかしいところはなかった。これで正常系の動作は確認できたことにする。
あとは、入力する際に、何も入力されない、スペースのみの入力、文字列が入る、石があるところに石を置く、裏返すことができないところに石を置く、盤の外に石をおくといった異常系について試してみた。
何も入力されない(Enterキーのみ)やスペースを入れた場合、下のようにエラー(MethodInvocationException)が出た。ただ、Powershellでは、エラーが出てもプログラム自体が止まることはなく動き続けている。エラーが出た後に正しい値を入力したら、正常に動作を続けられたよう。
他の異常系(文字列が入る、石があるところに石を置く、盤の外に石をおくといった)は、入力する際の条件分岐の中ではじくようにした。裏返すことができないところに石を置く場合、実際に判定する処理を通さないといけないだろうから、入力する際にではなくそこで判定。
if ($player -eq "A") {
echo ("Input position (like 35 (line 3, row 5)) or pass")
$position = Read-Host "Player A"
#$position = get-random -minimum 11 -maximum 88
if($position -eq "pass") {
$player="B"
$endflag=$endflag+1
break
}
$line=$position.substring(0,1)
$row=$position.substring(1,1)
if (($line -ge 1) -And ($line -le 8) -And ($row -ge 1) -And ($row -le 8)) {
if ($Othello[$line][$row] -eq "_") {
break
}
}
} elseif ($player -eq "B") {
適合な値を入力して試してみたけど、エラーや想定しない動きなどはないので、異常系についてもこれでよしとする(スペース入力などでエラーが出ているのはみっともない感じだけど)。
次回、結果の出力やコメントを追加する。