連載
» 2006年10月21日 00時00分 公開

連載:.NETグリッド・コントロール大研究:第2回 DataGridViewコントロールでマインスイーパ (1/4)

新しいグリッド・コントロールはデータ連結しなくても使えるため、さまざまに活用できる。その応用例としてゲームに挑戦。

[遠藤孝信,デジタルアドバンテージ]
連載:.NETグリッド・コントロール大研究
業務アプリInsider/Insider.NET

powered by Insider.NET

「連載:.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スイーパの画面(上:ゲーム中、左下:失敗時、右下:成功時)

 このGridスイーパでは、マウスのクリックや[スペース]キーにより、セルを開いていく。間違って爆弾のあるセル(爆弾セル)を開くと撤去失敗であり、爆弾セルを赤色で表示する(上記画面左下)。爆弾セル以外のすべてのセルを開ければ、爆弾セルが緑色で表示され、撤去成功となる(上記画面右下)。また、[F2]キーを押すことにより、いつでもゲームを再スタートすることができる。

 なおコードを極力短くするため、マインスイーパにはある以下のような機能は実装しない。

  • 旗が立てられない
  • 時間制ではない
  • 数字の色が全部同じ

 以下にGridスイーパの全コード(Visual Studio 2005のプロジェクト)をダウンロードできるようにした(ソース・コードについては次ページにも掲載している)。

 VB版Gridスイーパのダウンロード C#版Gridスイーパのダウンロード

 ではさっそくプログラミングしていこう。

       1|2|3|4 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。