この間の無駄話で「現在開発中」
と書いたので、そろそろ始めないと不味いですよね?
という訳で、実際の開発速度に合わせて少しづつ描いてゆきましょう。
↑の無駄話で書いたように、プログラミングから大分ご無沙汰していたので「無理にでも書かなきゃ」「とはいえ、興味のないものは嫌だな」と思っていて、webをつらつらと見ていたら、
簡単なようで存外に奥が深そうな8パズル
に興味を覚えたので、
いつも通り、先ずはドンガラ
を先に開発し、解法や不可能配置の判定等実質的な機能付加は後でじっくりやりましょう、ということで始めました。
しかし、
↑のような1-8の数字だけが並んだようなパズルはいかにもやる気が起きません。
ということで、
(1)ウィンドウはダイアログベースの固定サイズ(サイズ変更を可能にしても、デメが多い割にメリットがほぼない為)
(2)数字ではなく、ユーザーが画像を選択し、それを3x3で切り分けで内部的に0-8の画像IDを振る。
(3)ゲームを開始する際に配置は0 - 8の配列のランダムな初期化で行う。
(4)操作はアクションゲームではなく、じっくり考えながら行うので、上下左右ボタンで空のピースを動かす。
(5)処理は、「画像選択(ボタン、ファイル投げ入れ起動、ドラッグアンドドロップのいずれも可)」→「開始」(但し、誤った画像選択もあり、この段階では「画像選択」を有効にする)→PCによる「終了判定」(不可配置、または完成)→「初期状態」の流れとする。
という
大雑把なイメージ
だけ決めて、先ずはドンガラを作り始めましたが、結構山あり谷ありでした。その理由は...
(1)ダイアログにボタンとピクチャーボックスを貼り付けるのは良いとして、どのように読み込んだ原画像をピクチャーボックスに合わせるのか?(サイズと縦横比)
(2)メンバーグラフィックオブジェクトの仕様問題・・・ピクチャーボックスはImageプロパティがあるので、それに仮想画面を貼り付けるが、これはImageクラスにすべきか、Bitmapクラスにすべきか?現画像は保持すべきか、分割画像はImageか、Bitmapか?(ここでトラブル発生!)
(3)分割画像をどう表示(注)するのか?8Puzzleの観掛けを出すために、分割画像をそれとわかるようにしたいが、どうすべきか?(ここでトラブル発生!)
注:一旦仮想画面に描画して、それをピクチャーボックスに貼り付けるが、描画は変更部分のみか、全体か?変更部分のみであれば「空ピース」画像をどうする(取得?作成?)するか?
(4)画像選択ボタン(ファイル選択ダイアログ)、ドラッグアンドドロップは正常に画像が表示されるが、起動時にファイルをドロップしても画像が表示されない?(ここでトラブル発生!)
まっ、追い追い書いてゆきましょう。
ps. 実際のプログラミングは、ドンガラを作成しながら、現在初期画像(IDが0 - 8の分割画像配置)の為に「乱数を使い、0から8までの数を一つづつ(重複せずに)並べる」メソッドをコンソールでチェックし、結構驚くべき結果が出て面喰っています。

