オセロゲームを作ろう(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関数でバックアップしたスクリーンバッファをリストアします。
手順は以下です。
- コンソールのクリア(Clear-Host)
- スクリーンバッファの描画座標の生成(Coordinatesオブジェクト)
- スクリーンバッファの描画(SetBufferContentsメソッド)
- カーソル位置を描画領域の最終行に移動(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次元目の最終配列要素(最終行)になります。
つづく。。。