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") {

適合な値を入力して試してみたけど、エラーや想定しない動きなどはないので、異常系についてもこれでよしとする(スペース入力などでエラーが出ているのはみっともない感じだけど)。

次回、結果の出力やコメントを追加する。