R言語

R言語 マインスイーパー

  1. HOME >
  2. R言語 >

R言語 マインスイーパー

スポンサーリンク

こんにちは、usagi-sanです。

今回は、統計解析やデータ解析用のスクリプト言語であるR言語を用いてマインスイーパーを作成しました。

R言語は手続き型の言語であるため、クラスを定義することはほとんどありませんが、今回ゲームを作成するということでクラスを定義し、オブジェクト指向でスクリプトを書いてみました。

マインスイーパーは、次の画像のようにR言語のwindow上で遊ぶことができます。

マインスイーパ実行画面

マインスイーパーのプログラミングコードはこの記事の一番下でダウンロードできます

クラスの定義の仕方の勉強したい方や興味のある方は、是非是非ダウンロードしてください。

クラス mineSweeper

マインスイーパーのアルゴリズムや描画するメソッドなどから成るクラスmineSweeperを紹介します。

クラスmineSweeperは次のフィールドとメソッドから構成されています。

フィールド

  • n_row = "numeric"
  • n_col = "numeric"
  • n_bomb = "numeric"
  • df = "data.frame"
  • exploredTile = "data.frame"
  • flaggedTile = "data.frame"
  • gameEnd = "logical"
  • mode = "character"
  • remainingCells = "numeric"

メソッド

  • Initialize = function()
  • Start = function()
  • Explore = function(x,y)
  • GameStartPlot = function()
  • GamePlot = function()
  • MousePointer = function(x,y)
  • ConvertMode = function(x, y)
  • RemainingCells = function()

このクラスのインスタンスを生成し、メソッドをmain()で実行することで、マインスイーパーを実行することができます。

これらのフィールドメソッドの意味や役割は次で紹介していきます。

フィールド

n_row

マインスイーパーの行の数を指定する。ゲーム開始時に指定した行数がn_rowに代入されます。

n_col

マインスイーパーの列の数を指定する。ゲーム開始時に指定した列数がn_colに代入されます。

n_bomb

マインスイーパーの地雷の数を指定する。ゲーム開始時に指定した地雷の数がn_bombに代入されます。

df

マインスイーパーの盤面の地雷の位置や、接している地雷の数などの情報を格納するためのデータフレーム。接している地雷の数が1,2,3,4,...の場合dfには、対応する地雷の数が代入されます。また地雷は-1として表現されます。

exploredTile

探索済みの盤面を代入します。TRUEはすでに探索済みのセルであり、FALSEの場合は探索していないセルを表現します。TRUEの盤面のみがGUI上で描画されます。

flaggedTile

旗付きのセルを格納するデータフレーム。TRUEの場合、旗が付いていて、FALSEの場合、旗がついていないことを表現します。後述するmodeがflagのときにクリックしたセルに対応するflaggedTileがTRUEとなります。

gameEnd

ゲームが続いているか、終了しているかを表すlogical型の変数。

mode

探索するか、旗を付けるかを表すcharacter型の変数。modeがexploreの場合、選択したセルを探索します(セルを開ける)。flagの場合、選択したセルに旗を付けます。

remainingCells

未探索のセルの数を表すnumeric型の変数。

メソッド

Initialize

Initializeは、フィールドの変数を初期化するためのメソッドです。

インスタンスの生成後に、このメソッドを実行することで、フィールドの変数を初期化できます。

gameEnd、mode、remainigCells、df、eploredTile、flaggedTileなどの変数を初期化しています。

Start

Initializeで初期化したdfに盤面の情報を与えるメソッドです。

dfに地雷の数n_bombの数だけ、-1を代入し地雷の情報を与えます。

そのあとはdfの-1の位置を頼りに、-1に接している数をdfの各要素に代入していきます。

 Explore

マウスでクリックした座標をもとに、dfを探索していくメソッドです。

マインスイーパーの探索法と同様に、指定された座標x,yから再帰的に探索していきます。

1,2, . . . , 8まで探索し、探索後の座標はexploredTileの対応する座標にTRUEを代入し、return()を返し、探索を終了します。

GameStartPlot

マインスイーパーを開始したときのゲーム画面をplotで描画します。

マインスイーパーの盤面の格子や枠、exploreボタンやflagボタンの描画などをゲーム開始時に行います。

ゲームを開始した後はGameStartPlotではなく、次で紹介するGamePlotでゲームを描画していきます。

GamePlot

GamePlotは、マインスイーパーを実行中に、セルの選択やexploreやflagボタンを押した後に実行されるメソッドです。

盤面の情報が更新された後に、このメソッドを用いてGUI上の描画も更新していきます。

また画像ファイルを読み込み、ゲーム終了時のGame ClearやGame overなどの描画を行ったり、地雷の画像や旗の画像などを描画したりしています。