C++初歩6 タイルマップ作成ツール
C++初歩6 タイルマップ作成ツール
前章で作成したDoodle Jump風ゲームのプログラムを元に、次の章の迷路脱出ゲームで使うマップファイルを作成するツールを作成します。
本章と次章では、タイルと呼ばれる小さな正方形の画像が沢山入ったファイル(タイルセット)を使います。タイルマップは、タイルセットに入っているタイルの番号から構成されるもので、タイルを組み合わせて背景などを作る時に使われます。
今回は、前章で作成したDoodle Jump風ゲームのプログラムを、タイルマップ作成ツールに仕立て直すに当たり、不要なクラスを削除し、エラーの無い状態にします。
タイルと呼ばれる小さな正方形の画像が沢山入ったファイル(タイルセット)を読み込んで表示する所を作成します。
今回使うタイルセットには、大量のタイルが入っているため、最初の方のタイルしか表示できない状態です。
上下の方向キーやHome, End, PageUp, PageDownキーでタイルセットをスクロールしたり、表示位置を切替えたりします。
また、マウスホイールの回転でもスクロールするようにします。
これで、全てのタイルを確認できるようになります。
タイルマップを作成するエリアを、タイルセットを表示しているタイルリストエリアの右側に作ります。
最初は、格子状の四角い枠だけが表示されている状態にします。
マウスのドラッグ&ドロップ操作で、左側に表示したタイルリストの中から選んだタイルを、右側に表示したタイルマップ作成エリアに表示するようにします。
タイルセットの中のタイルに割り当てたタイル番号(先頭のタイルに0番からの通し番号を割り振ったもの)から、タイル画像を表示するために必要なグラフィックハンドルを求める処理は、次章のタイルセットを使った迷路脱出ゲームでも必要になります。タイルセットを読み込んで、タイル番号からグラフィックハンドルを求める処理を、デザインパターンのSingletonを使って実装します。こうすることで、タイルセットを使うプログラムでは、ここで作ったクラスを、そのまま再利用できるようになります。
タイルマップを作成する時のマウス操作をレベルアップさせるにあたり、マウス操作に対応するプログラムを状態遷移する形式のプログラムの形に直します。状態遷移するプログラムをオブジェクト指向のプログラムで実装する場合は、Stateパターンと呼ばれる書き方が適しているので、まずは現状の処理をStateパターンを使った書き方に直します。
現状のプログラムが、どの様なクラスの関係になっているのかを、クラス図を使って説明します。
プログラムは、Stateパターンで実装した所を少し修正して、ドラッグ中にマウスカーソル位置にタイルを表示し、どのタイルをタイルマップに貼り付けようとしているかが分るようにします。
新たな状態を追加して、タイルマップ作成エリアでマウスドラッグすると、複数タイルを選択できるようにします。
タイルマップのタイルが複数選択された状態で、タイルリストのタイルが選択された場合は、複数のタイルに同じタイル画像が貼り付けられるようにします。また、Deleteキーが押された場合は、削除されるようにします。
Ctrl+Sキーを押すと、たいるタイルマップ作成エリアに作成した情報をファイルに出力するようにします。また、Ctrl+Lを押すと、ファイルに作成した情報を読み込んで、タイルマップ作成エリアに表示するようにします。
C言語でのファイル入出力は、fopenとfcloseで、ファイルの準備と後始末を行っていましたが、C++言語では、ofstreamやifstreamという標準で用意しているクラスがあり、このクラスのコンストラクタとデストラクタでオープン/クローズをしているため、自分でオープン/クローズをする必要がなくなります。