オセロゲームを作ろう(5):スクリーンバッファ操作(3)

スクリーンバッファの操作

前回に引き続き、前々回紹介した、スクリーンバッファ操作のサンプルについて解説します。

スクリーンバッファのリストア


# スクリーンバッファのリストア
function Restore-ScrBuf()
{
Clear-Host
$origin = New-Object System.Management.Automation.Host.Coordinates(0, 0)
$rui.SetBufferContents($origin, $script:screen)
$pos = New-Object System.Management.Automation.Host.Coordinates(0, $script:screen.GetUpperBound(0))
$rui.CursorPosition = $pos
}

Restore-ScrBuf関数は、Backup-ScrBuf関数でバックアップしたスクリーンバッファをリストアします。
手順は以下です。

  1. コンソールのクリア(Clear-Host)
  2. スクリーンバッファの描画座標の生成(Coordinatesオブジェクト)
  3. スクリーンバッファの描画(SetBufferContentsメソッド)
  4. カーソル位置を描画領域の最終行に移動(CursorPositionプロパティ)

まず、Clear-Host関数でコンソールをクリアします。
描画座標はコンソール左上ですので、X=0,Y=0のCoordinatesオブジェクトを生成します。
次に、SetBufferContentsメソッドでスクリーンバッファを描画します。

SetBufferContentsメソッド
System.Void SetBufferContents(Coordinates origin, BufferCell[,] contents)
System.Void SetBufferContents(Rectangle r, BufferCell fill)

SetBufferContentsメソッドは2種類ありますが、今回利用するのは前者で、
引数は、描画座標(Coordinatesオブジェクト)とスクリーンバッファ(BufferCellオブジェクトの2次元配列)です。


最後に、カーソル位置を描画領域の最終行に移動します。
最終行は、リストアするスクリーンバッファの1次元目の最終配列要素(最終行)になります。


つづく。。。