ビットマップファイルを読み込むには Windows API を使ってしまうのが簡単です。おそらくC言語のライブラリで組むより短期間で品質を高めることができるのではないでしょうか?…というかベターな方法です。
空白のマスに隣接するタイルをスライドさせるには、まずマウスのボタンが押された際の座標から、現在マウスのポインタがどのタイルの上にあるのかを計算します。次にそのタイルが空白に隣接しているかを判断し、隣接していた場合はタイルと空白のマスの情報を交換します。
ポイントがひとつあります。
4 x 4 の 16 タイルのうち、ひとつを空白にしてスライドできる状態にする必要があります。その空白をランダムに決定するために1から 16 までの乱数(ランダムな数値)が必要です。
乱数の生成に関してはメルセンヌツイスタという有名なアルゴリズムがあるのですが、たいしたゲームではないのでC言語の標準ライブラリを使うことにします。
今作っている 15 パズルはタイムアタックですのでタイム測定の処理が必要です。
開始時刻と終了時刻の取得も簡単です。
開始時刻と終了時刻を取得する目的はタイム計測のためです。ですので厳密には時刻でなくても問題ありません。今回は応用が利きやすい関数がありますのでそれを使うことにします。
早いものでもう第4夜です。メッセージの解説もしなければいけませんね…
さて、マウスボタンが押された際の座標ですが、実は第3夜のタイミングで取得できているのです。なんということでしょうか。これはのっぴきならないですね。して、その方法とは?