第2回 DataGridViewコントロールでマインスイーパ:連載:.NETグリッド・コントロール大研究(1/4 ページ)
新しいグリッド・コントロールはデータ連結しなくても使えるため、さまざまに活用できる。その応用例としてゲームに挑戦。
powered by Insider.NET
前回ではDataGridViewコントロール(以下、DGVコントロール)のオブジェクト構造について解説し、行や列の生成と、それらをDGVコントロールに追加するための基本的なプログラミングについて解説した。そしてDGVコントロールを表示する簡単なサンプル・プログラムを作成した。
DGVコントロールには大きく以下の2つのモードがある。
- 連結モード(バインド・モード)
- 非連結モード(非バインド・モード)
前回のサンプル・プログラムは、後者の非連結モードを利用した例である。今回はまずはこの2つのモードについて簡単に説明し、その後で非連結モードの応用例として別のサンプル・プログラムを作っていく。
連結モードと非連結モード
「連結モード」は、.NET Framework 1.xのころのDataGridコントロールと同様に、データベースから取得したレコードで満たされたデータセットをDGVコントロールに「データ連結(Data Binding)」し、データセットの内容をグリッド表示するモードだ。
DGVコントロールの連結モード
データセットと連結することにより、データセットの内容をDGVコントロールのグリッドに自動的に反映できる。また逆に、グリッド上での編集結果をデータセットに反映できる。なおこの図では省略しているが、.NET Framework 2.0では通常はDGVコントロールとデータセットとの間にBindingSourceコントロールを使用する。
連結モードでは、DGVコントロールのDataSourceプロパティに、データソースとなるデータセット(あるいはコレクション、配列など)を指定するだけで、その内容が表形式で表示される。つまり、データソースのレコードやデータに従って、DGVコントロール内に行オブジェクトが自動的に作成されるわけだ(デフォルトでは列オブジェクトも自動作成される)。
またDGVコントロールは、データソースを指定しなくても利用できるようになっている。これが「非連結モード」だ。こちらのモードでは列オブジェクトと行オブジェクトをコードにより作成し、自由にデータを表示できる。前回のサンプル・プログラムではこれを行った。
■データバインド列と非バインド列
データ連結の観点からは、DGVコントロールの列にも2つの種類がある。
連結モードでは、グリッドの各列は、データソース内の列(データソースがコレクションや配列の場合には、その要素の特定のプロパティ)に対応付けられている。そのような列は「データバインド列」と呼ばれる。
一方、データソース内の列に対応付けられていない列は「非バインド列」と呼ばれる。当然ながら、非連結モードではすべての列が非バインド列になる。
ただし、連結モードでもすべての列がデータバインド列である必要はなく、非バインド列をDGVコントロールに追加することもできる。通常、この場合には非バインド列のセルには、データバインド列のセルから求められた値を表示する。例えば「合計値列」として使用する非バインド列のセルでは、セルが表示されるタイミングで、その行のほかのセルの値の合計値を求めて表示する。
DGVコントロールを使ったマインスイーパ「Gridスイーパ」
今回は非連結モードの応用例として、DGVコントロールを使ったマインスイーパである「Gridスイーパ」を作ってみようと思う。マインスイーパをご存じない方はいないと思うが、Windowsの[スタート]メニューの[すべてのプログラム]−[ゲーム]−[マインスイーパ]で起動する爆弾撤去ゲームだ。
本物のマインスイーパでは、そのゲーム・フィールドをすべてビットマップで表示しているが、Gridスイーパではフィールド表示にグリッドを利用する。以下がGridスイーパの実行画面だ。
このGridスイーパでは、マウスのクリックや[スペース]キーにより、セルを開いていく。間違って爆弾のあるセル(爆弾セル)を開くと撤去失敗であり、爆弾セルを赤色で表示する(上記画面左下)。爆弾セル以外のすべてのセルを開ければ、爆弾セルが緑色で表示され、撤去成功となる(上記画面右下)。また、[F2]キーを押すことにより、いつでもゲームを再スタートすることができる。
なおコードを極力短くするため、マインスイーパにはある以下のような機能は実装しない。
- 旗が立てられない
- 時間制ではない
- 数字の色が全部同じ
以下にGridスイーパの全コード(Visual Studio 2005のプロジェクト)をダウンロードできるようにした(ソース・コードについては次ページにも掲載している)。
VB版Gridスイーパのダウンロード C#版Gridスイーパのダウンロード
ではさっそくプログラミングしていこう。
Copyright© Digital Advantage Corp. All Rights Reserved.