<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>いちばんやさしいゲームの作り方 &#187; 練習</title>
	<atom:link href="http://www.game-create.com/archives/tag/%e7%b7%b4%e7%bf%92/feed" rel="self" type="application/rss+xml" />
	<link>http://www.game-create.com</link>
	<description>文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 01:28:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>現実的にあり得るシチュエーションを訓練できるタイピングゲーム</title>
		<link>http://www.game-create.com/archives/3247</link>
		<comments>http://www.game-create.com/archives/3247#comments</comments>
		<pubDate>Fri, 30 Apr 2010 16:24:28 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[コンピュータ]]></category>
		<category><![CDATA[Cubase]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[アイデア]]></category>
		<category><![CDATA[ショートカットキー]]></category>
		<category><![CDATA[タッチタイピング]]></category>
		<category><![CDATA[月月火水木金金]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=3247</guid>
		<description><![CDATA[…が欲しい。

実際に仕事中にどんなキーを打ち込んでいるのかというと、とてもではないのですがタイピングゲームでは練習できないパターンばかりです。修飾キーとの組み合わせに始まり、キーストローク、文脈無視の打鍵（ Flash [...]]]></description>
			<content:encoded><![CDATA[<p>…が欲しい。</p>
<p><span id="more-3247"></span></p>
<p>実際に仕事中にどんなキーを打ち込んでいるのかというと、とてもではないのですがタイピングゲームでは練習できないパターンばかりです。修飾キーとの組み合わせに始まり、キーストローク、文脈無視の打鍵（ Flash や Cubase でツールを切り替えるためのキーとか）。こういうのをサポートするゲームがひとつくらいあればいいのにと思いました。</p>
<p>自分はワープロ検定を取得するための授業が高校にありまして、タッチタイピングはそれからになるのですが、実際に仕事をするようになってから脳みその違う部分を使っているような感覚になったものです（ QWERTY 配列が頭に入っているはずなのに入っていないというか…）。普通の文章だけテキパキ入力できても、あまり仕事の役に立っている感じがしませんでした。</p>
<p>Tab で補完とか Ctrl+h でバックスペースとか、覚えておくといろんなソフトで使えるキー操作もありますし、実際のパソコン操作に即したタイピングゲームとか面白そうです。ショートカットキーを使った後に普通の文章を打ち込むための頭の切り替え、その逆、それらを交互に、とかを訓練できたりなどなど。</p>
<p>ただ、一見すると「これがタイピングゲームか？」と疑いたくなるような本格的な画面にするなど、インパクトでもってひきつけないと、とっつきづらい印象ばかり与えてしまいそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/3247/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>問題を解くとき意図が気になっちゃうか否か</title>
		<link>http://www.game-create.com/archives/2372</link>
		<comments>http://www.game-create.com/archives/2372#comments</comments>
		<pubDate>Sat, 24 Oct 2009 15:57:55 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[勉強]]></category>
		<category><![CDATA[練習]]></category>
		<category><![CDATA[音楽]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=2372</guid>
		<description><![CDATA[自分は気になってしまう方で、練習問題とかなかなかできない人です。

意図がわからなければ問題ないのですが、わかってしまうと悩みます。意図が読めてしまうとそれはヒントになるので、純粋に訓練になるのかとても疑問に感じるのです [...]]]></description>
			<content:encoded><![CDATA[<p>自分は気になってしまう方で、練習問題とかなかなかできない人です。</p>
<p><span id="more-2372"></span></p>
<p>意図がわからなければ問題ないのですが、わかってしまうと悩みます。意図が読めてしまうとそれはヒントになるので、純粋に訓練になるのかとても疑問に感じるのです。</p>
<p>今、ゲーム音楽を作るために循環コードやセカンダリードミナントの付け方を勉強していますが、「循環コードとはこういうものです」の解説の後に、「では、練習問題をやってみましょう」となると、頭は「どこに循環コードが入るんだろう」になります。いや、そういうのを鍛える訓練なので問題ないのですが、最終的に欲しいのは「こういった場面で循環コードを使う」と判断できる力なので、できれば「残念だったな、この曲には入らなくて正解だ」という問題も１～２問は欲しいなぁと思うのです。残念ながら現状はそうなっていません。</p>
<p>練習問題のあり方にも悩みます。訓練は必要なんですが、現実的に直面する問題で練習問題にあるような意図が見えることがあるのか否か…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/2372/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 19 夜） &#8211; マウス入力からタイル交換のコーディング</title>
		<link>http://www.game-create.com/archives/144</link>
		<comments>http://www.game-create.com/archives/144#comments</comments>
		<pubDate>Tue, 13 Nov 2007 11:09:06 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=144</guid>
		<description><![CDATA[タイルをクリックして空きタイルと交換する部分のコーディングが完了しました。

template.cpp
/**
 * @file
 * @brief Windows アプリケーションの雛形
 *
 * Windo [...]]]></description>
			<content:encoded><![CDATA[<p>タイルをクリックして空きタイルと交換する部分のコーディングが完了しました。</p>
<p><span id="more-144"></span></p>
<h5>template.cpp</h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-mlcomment">/**
 * @file
 * @brief Windows アプリケーションの雛形
 *
 * Windows アプリケーションを作成する際の雛形ファイル。
 * コンパイルオプション /EHsc が必要。
 * ライブラリ kernel32.lib user32.lib gdi32.lib winmm.lib が必要。
 *
 * @author Byerkut
 * @date 2007-09-22
 * @version </span><span class="hl-inlinedoc">$Id: $
 </span><span class="hl-mlcomment">*/

</span><span class="hl-comment">// 国際化する
</span><span class="hl-prepro">#ifndef </span><span class="hl-identifier">_UNICODE</span><span class="hl-prepro">
#define </span><span class="hl-identifier">_UNICODE</span><span class="hl-prepro">
#endif
#ifndef </span><span class="hl-identifier">UNICODE</span><span class="hl-prepro">
#define </span><span class="hl-identifier">UNICODE</span><span class="hl-prepro">
#endif

</span><span class="hl-comment">// 依存ライブラリをリンカに教える
</span><span class="hl-prepro">#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">kernel32.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">
#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">user32.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">
#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">gdi32.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">
#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">winmm.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">

</span><span class="hl-comment">// Win32API の開発環境をインポート
</span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">windows.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">
#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">mmsystem.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-mlcomment">/*======================================================================
 * プロトタイプ宣言
 *======================================================================*/

</span><span class="hl-comment">/// ウィンドウプロシージャ（コールバック関数）
</span><span class="hl-identifier">LRESULT CALLBACK WindowProcedure</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWnd</span><span class="hl-code">,
                                 </span><span class="hl-identifier">UINT msg</span><span class="hl-code">,
                                 </span><span class="hl-identifier">WPARAM wp</span><span class="hl-code">,
                                 </span><span class="hl-identifier">LPARAM lp</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-mlcomment">/*======================================================================
 * 定数
 *======================================================================*/

</span><span class="hl-comment">/// クライアントサイズの幅
</span><span class="hl-types">static const unsigned int </span><span class="hl-identifier">iClientWidth</span><span class="hl-default"> = </span><span class="hl-number">640</span><span class="hl-default">;

</span><span class="hl-comment">/// クライアントサイズの高さ
</span><span class="hl-types">static const unsigned int </span><span class="hl-identifier">iClientHeight</span><span class="hl-default"> = </span><span class="hl-number">480</span><span class="hl-default">;

</span><span class="hl-mlcomment">/*======================================================================
 * グローバル変数
 *======================================================================*/

</span><span class="hl-comment">/// ウィンドウクラス名
</span><span class="hl-types">static </span><span class="hl-identifier">LPCTSTR szClassName</span><span class="hl-default"> = </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">template</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">/// タイトルバーの文字列
</span><span class="hl-types">static </span><span class="hl-identifier">LPCTSTR szTitleBar</span><span class="hl-default"> = </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">１５ぱずりゃー</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">/// インスタンスのハンドル
</span><span class="hl-types">static </span><span class="hl-identifier">HINSTANCE hInstance</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-comment">/// メインフォームのハンドル
</span><span class="hl-types">static </span><span class="hl-identifier">HWND hWindow</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-comment">/// バックバッファ
</span><span class="hl-types">static </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-comment">/// バックバッファビットマップ
</span><span class="hl-types">static </span><span class="hl-identifier">HBITMAP hBitmap</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-mlcomment">/*======================================================================
 * 関数
 *======================================================================*/

/**
 * アプリケーションのエントリーポイント
 *
 * @param[in] hInstance 現在のインスタンスハンドル
 * @param[in] hPreviousInstance 過去のインスタンスハンドル
 * @param[in] lpsCommandLine コマンドライン引数
 * @param[in] nCommandShow ウィンドウ状態
 *
 * @return アプリケーションの終了コード
 */
</span><span class="hl-types">int </span><span class="hl-identifier">WINAPI WinMain</span><span class="hl-brackets">(</span><span class="hl-identifier">HINSTANCE hInstance</span><span class="hl-code">,
                   </span><span class="hl-identifier">HINSTANCE hPreviousInstance</span><span class="hl-code">,
                   </span><span class="hl-identifier">LPSTR lpsCommandLine</span><span class="hl-code">,
                   </span><span class="hl-types">int </span><span class="hl-identifier">nCommandShow</span><span class="hl-brackets">)
{
  </span><span class="hl-identifier">HANDLE hMutex</span><span class="hl-code">;
  </span><span class="hl-identifier">MSG msg</span><span class="hl-code">;

  </span><span class="hl-comment">// インスタンスハンドルを保存する</span><span class="hl-code">
  ::</span><span class="hl-identifier">hInstance</span><span class="hl-code"> = </span><span class="hl-identifier">hInstance</span><span class="hl-code">;

  </span><span class="hl-comment">// ミューテックスによる多重起動の検出
  </span><span class="hl-identifier">hMutex</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateMutex</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">, </span><span class="hl-prepro">TRUE</span><span class="hl-code">, </span><span class="hl-identifier">szClassName</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">GetLastError</span><span class="hl-brackets">()</span><span class="hl-code"> == </span><span class="hl-identifier">ERROR_ALREADY_EXISTS</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// アプリケーション初期化
  </span><span class="hl-brackets">{
    </span><span class="hl-comment">// ウィンドウクラスを定義する
    </span><span class="hl-identifier">WNDCLASSEX wc</span><span class="hl-code">;

    </span><span class="hl-comment">// 構造体のサイズ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">cbSize</span><span class="hl-code"> = </span><span class="hl-reserved">sizeof</span><span class="hl-brackets">(</span><span class="hl-identifier">WNDCLASSEX</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-comment">// クラスのスタイル
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">style</span><span class="hl-code"> = </span><span class="hl-identifier">CS_HREDRAW</span><span class="hl-code"> | </span><span class="hl-identifier">CS_VREDRAW</span><span class="hl-code">;
    </span><span class="hl-comment">// ウィンドウプロシージャ名
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">lpfnWndProc</span><span class="hl-code"> = ::</span><span class="hl-identifier">WindowProcedure</span><span class="hl-code">;
    </span><span class="hl-comment">// 補助メモリ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">cbClsExtra</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">;
    </span><span class="hl-comment">// 補助メモリ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">cbWndExtra</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">;
    </span><span class="hl-comment">// インスタンスハンドル
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hInstance</span><span class="hl-code"> = ::</span><span class="hl-identifier">hInstance</span><span class="hl-code">;
    </span><span class="hl-comment">// アイコン
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hIcon</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HICON</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                  </span><span class="hl-identifier">MAKEINTRESOURCE</span><span class="hl-brackets">(</span><span class="hl-identifier">IDI_APPLICATION</span><span class="hl-brackets">)</span><span class="hl-code">,
                                  </span><span class="hl-identifier">IMAGE_ICON</span><span class="hl-code">,
                                  </span><span class="hl-number">0</span><span class="hl-code">,
                                  </span><span class="hl-number">0</span><span class="hl-code">,
                                  </span><span class="hl-identifier">LR_DEFAULTSIZE</span><span class="hl-code"> | </span><span class="hl-identifier">LR_SHARED</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-comment">// カーソル
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hCursor</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HCURSOR</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                      </span><span class="hl-identifier">MAKEINTRESOURCE</span><span class="hl-brackets">(</span><span class="hl-identifier">IDC_ARROW</span><span class="hl-brackets">)</span><span class="hl-code">,
                                      </span><span class="hl-identifier">IMAGE_CURSOR</span><span class="hl-code">,
                                      </span><span class="hl-number">0</span><span class="hl-code">,
                                      </span><span class="hl-number">0</span><span class="hl-code">,
                                      </span><span class="hl-identifier">LR_DEFAULTSIZE</span><span class="hl-code"> | </span><span class="hl-identifier">LR_SHARED</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-comment">// 背景ブラシ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hbrBackground</span><span class="hl-code"> = </span><span class="hl-prepro">NULL</span><span class="hl-code">;
    </span><span class="hl-comment">// メニュー名
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">lpszMenuName</span><span class="hl-code"> = </span><span class="hl-prepro">NULL</span><span class="hl-code">;
    </span><span class="hl-comment">// クラス名
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">lpszClassName</span><span class="hl-code"> = ::</span><span class="hl-identifier">szClassName</span><span class="hl-code">;
    </span><span class="hl-comment">// 小さいアイコン
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hIconSm</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HICON</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                    </span><span class="hl-identifier">MAKEINTRESOURCE</span><span class="hl-brackets">(</span><span class="hl-identifier">IDI_APPLICATION</span><span class="hl-brackets">)</span><span class="hl-code">,
                                    </span><span class="hl-identifier">IMAGE_ICON</span><span class="hl-code">,
                                    </span><span class="hl-number">0</span><span class="hl-code">,
                                    </span><span class="hl-number">0</span><span class="hl-code">,
                                    </span><span class="hl-identifier">LR_DEFAULTSIZE</span><span class="hl-code"> | </span><span class="hl-identifier">LR_SHARED</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-comment">// ウィンドウクラスを登録する
    </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!::</span><span class="hl-identifier">RegisterClassEx</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">wc</span><span class="hl-brackets">))
      </span><span class="hl-reserved">return </span><span class="hl-prepro">FALSE</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// インスタンス初期化
  </span><span class="hl-brackets">{
    </span><span class="hl-comment">// ウィンドウサイズを計算する
    </span><span class="hl-types">unsigned int </span><span class="hl-identifier">windowWidth</span><span class="hl-code"> = </span><span class="hl-identifier">iClientWidth</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXEDGE</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXBORDER</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXDLGFRAME</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-types">unsigned int </span><span class="hl-identifier">windowHeight</span><span class="hl-code"> = </span><span class="hl-identifier">iClientHeight</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYEDGE</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYBORDER</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYDLGFRAME</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYCAPTION</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-comment">// ウィンドウを作成する</span><span class="hl-code">
    ::</span><span class="hl-identifier">hWindow</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateWindow</span><span class="hl-brackets">(</span><span class="hl-comment">// クラス名</span><span class="hl-code">
                               ::</span><span class="hl-identifier">szClassName</span><span class="hl-code">,
                               </span><span class="hl-comment">// タイトルバーの文字列</span><span class="hl-code">
                               ::</span><span class="hl-identifier">szTitleBar</span><span class="hl-code">,
                               </span><span class="hl-comment">// ウィンドウの種類
                               </span><span class="hl-identifier">WS_OVERLAPPEDWINDOW</span><span class="hl-code"> &amp;
                               ~</span><span class="hl-identifier">WS_THICKFRAME</span><span class="hl-code"> &amp;
                               ~</span><span class="hl-identifier">WS_MAXIMIZEBOX</span><span class="hl-code">,
                               </span><span class="hl-comment">// x 座標
                               </span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXSCREEN</span><span class="hl-brackets">)</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code"> - </span><span class="hl-identifier">windowWidth</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code">,
                               </span><span class="hl-comment">// y 座標
                               </span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYSCREEN</span><span class="hl-brackets">)</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code"> - </span><span class="hl-identifier">windowHeight</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code">,
                               </span><span class="hl-comment">// 幅
                               </span><span class="hl-identifier">windowWidth</span><span class="hl-code">,
                               </span><span class="hl-comment">// 高さ
                               </span><span class="hl-identifier">windowHeight</span><span class="hl-code">,
                               </span><span class="hl-comment">// 親ウィンドウのハンドル
                               // 親を作るときは NULL
                               </span><span class="hl-prepro">NULL</span><span class="hl-code">,
                               </span><span class="hl-comment">// メニューハンドル
                               // クラスメニューを作るときは NULL
                               </span><span class="hl-prepro">NULL</span><span class="hl-code">,
                               </span><span class="hl-comment">// インスタンスハンドル
                               </span><span class="hl-identifier">hInstance</span><span class="hl-code">,
                               </span><span class="hl-comment">// ウィンドウ作成データ
                               </span><span class="hl-prepro">NULL</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">) {
      </span><span class="hl-reserved">return </span><span class="hl-prepro">FALSE</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">// ウィンドウを表示する</span><span class="hl-code">
    ::</span><span class="hl-identifier">ShowWindow</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">nCommandShow</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-comment">// ウィンドウを再描画する</span><span class="hl-code">
    ::</span><span class="hl-identifier">UpdateWindow</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// バックバッファの構築
  </span><span class="hl-brackets">{
    </span><span class="hl-identifier">HDC hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">hBitmap</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateCompatibleBitmap</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">,
                                         </span><span class="hl-identifier">iClientWidth</span><span class="hl-code">,
                                         </span><span class="hl-identifier">iClientHeight</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code">, ::</span><span class="hl-identifier">hBitmap</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// メッセージループ
  </span><span class="hl-brackets">{
    </span><span class="hl-identifier">FLOAT </span><span class="hl-types">const </span><span class="hl-identifier">frame</span><span class="hl-code"> = </span><span class="hl-number">16.6666</span><span class="hl-identifier">f</span><span class="hl-code">;
    </span><span class="hl-identifier">DWORD enterTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
    </span><span class="hl-identifier">DWORD previousTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
    </span><span class="hl-identifier">DWORD afterGameUpdateTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;

    ::</span><span class="hl-identifier">ZeroMemory</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-code">, </span><span class="hl-reserved">sizeof</span><span class="hl-brackets">(</span><span class="hl-identifier">MSG</span><span class="hl-brackets">))</span><span class="hl-code">;

    </span><span class="hl-reserved">while </span><span class="hl-brackets">(</span><span class="hl-identifier">msg</span><span class="hl-code">.</span><span class="hl-identifier">message</span><span class="hl-code"> != </span><span class="hl-identifier">WM_QUIT</span><span class="hl-brackets">) {
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">PeekMessage</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">PM_REMOVE</span><span class="hl-brackets">)) {</span><span class="hl-code">

        ::</span><span class="hl-identifier">TranslateMessage</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-comment">// メッセージをウィンドウプロシージャに送信</span><span class="hl-code">
        ::</span><span class="hl-identifier">DispatchMessage</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-brackets">)</span><span class="hl-code">;

      </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{

        </span><span class="hl-comment">// ゲームシステムのメインループ
        </span><span class="hl-identifier">enterTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">frame</span><span class="hl-code"> &lt;</span><span class="hl-brackets">(</span><span class="hl-identifier">enterTime</span><span class="hl-code"> - </span><span class="hl-identifier">previousTime</span><span class="hl-brackets">)) {
          </span><span class="hl-comment">// ゲームの中核処理は必ず実行する</span><span class="hl-code">
          ::</span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()</span><span class="hl-code">;
          </span><span class="hl-identifier">afterGameUpdateTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
          </span><span class="hl-reserved">if </span><span class="hl-brackets">((</span><span class="hl-identifier">afterGameUpdateTime</span><span class="hl-code"> - </span><span class="hl-identifier">enterTime</span><span class="hl-brackets">)</span><span class="hl-code"> &lt;</span><span class="hl-identifier">frame</span><span class="hl-brackets">) {
            </span><span class="hl-comment">// 同じフレーム内に UpdateGame() がすんだ場合は
            // 描画処理を実行する</span><span class="hl-code">
            ::</span><span class="hl-identifier">InvalidateRect</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-prepro">NULL</span><span class="hl-code">, </span><span class="hl-prepro">TRUE</span><span class="hl-brackets">)</span><span class="hl-code">;
            ::</span><span class="hl-identifier">UpdateWindow</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
            </span><span class="hl-identifier">previousTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
            ::</span><span class="hl-identifier">Sleep</span><span class="hl-brackets">(</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;           </span><span class="hl-comment">// 少し待つ
          </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{
            </span><span class="hl-comment">// 次のフレームに食い込んでしまった場合は
            // 強制的に次フレームの更新を実行する
            </span><span class="hl-identifier">previousTime</span><span class="hl-code"> = </span><span class="hl-identifier">enterTime</span><span class="hl-code"> - </span><span class="hl-brackets">(</span><span class="hl-identifier">DWORD</span><span class="hl-brackets">)</span><span class="hl-identifier">frame</span><span class="hl-code">;
          </span><span class="hl-brackets">}
        }

      }
    }
  }

  </span><span class="hl-comment">// バックバッファの解放</span><span class="hl-code">
  ::</span><span class="hl-identifier">DeleteObject</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBitmap</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">DeleteDC</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// ミューテックスを閉じる</span><span class="hl-code">
  ::</span><span class="hl-identifier">CloseHandle</span><span class="hl-brackets">(</span><span class="hl-identifier">hMutex</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// PostQuitMessage 関数によってポストされた
  // WM_QUIT メッセージの wParam を終了コードとして返す
  </span><span class="hl-reserved">return </span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-brackets">)</span><span class="hl-identifier">msg</span><span class="hl-code">.</span><span class="hl-identifier">wParam</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-mlcomment">/**
 * ウィンドウプロシージャ用のコールバック関数
 *
 * @param[in] hWnd ウィンドウハンドル
 * @param[in] msg メッセージ内容
 * @param[in] wp 補助パラメータ
 * @param[in] lp 補助パラメータ
 *
 * @return メッセージ処理の結果
 */
</span><span class="hl-identifier">LRESULT CALLBACK WindowProcedure</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWnd</span><span class="hl-code">,
                                 </span><span class="hl-identifier">UINT msg</span><span class="hl-code">,
                                 </span><span class="hl-identifier">WPARAM wp</span><span class="hl-code">,
                                 </span><span class="hl-identifier">LPARAM lp</span><span class="hl-brackets">)
{
  </span><span class="hl-reserved">switch </span><span class="hl-brackets">(</span><span class="hl-identifier">msg</span><span class="hl-brackets">)
    {
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_CREATE</span><span class="hl-code">:
      </span><span class="hl-comment">// ゲームシステムの初期化
      </span><span class="hl-brackets">{</span><span class="hl-code">
        ::</span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_ACTIVATE</span><span class="hl-code">:
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">wp</span><span class="hl-code"> == </span><span class="hl-identifier">WA_ACTIVE</span><span class="hl-brackets">) {
        </span><span class="hl-comment">// ゲームシステムのアクティブ化
      </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{
        </span><span class="hl-comment">// ゲームシステムの非アクティブ化
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_LBUTTONDOWN</span><span class="hl-code">:
      </span><span class="hl-brackets">{
        </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">,</span><span class="hl-identifier">y</span><span class="hl-code">;
        </span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-identifier">LOWORD</span><span class="hl-brackets">(</span><span class="hl-identifier">lp</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-identifier">HIWORD</span><span class="hl-brackets">(</span><span class="hl-identifier">lp</span><span class="hl-brackets">)</span><span class="hl-code">;
        ::</span><span class="hl-identifier">PressingMouseKey</span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_MOUSEMOVE</span><span class="hl-code">:
      </span><span class="hl-brackets">{
        </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">,</span><span class="hl-identifier">y</span><span class="hl-code">;
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">wp</span><span class="hl-code"> &amp; </span><span class="hl-identifier">MK_LBUTTON</span><span class="hl-brackets">) {
          </span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-identifier">LOWORD</span><span class="hl-brackets">(</span><span class="hl-identifier">lp</span><span class="hl-brackets">)</span><span class="hl-code">;
          </span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-identifier">HIWORD</span><span class="hl-brackets">(</span><span class="hl-identifier">lp</span><span class="hl-brackets">)</span><span class="hl-code">;
          ::</span><span class="hl-identifier">PressingMouseKey</span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-brackets">}
      }
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_PAINT</span><span class="hl-code">:
      </span><span class="hl-brackets">{
        </span><span class="hl-identifier">HDC hdc</span><span class="hl-code">;
        </span><span class="hl-identifier">PAINTSTRUCT ps</span><span class="hl-code">;
        </span><span class="hl-identifier">hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">BeginPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-comment">// ゲームの描画処理を書く</span><span class="hl-code">
        ::</span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-code">;
        ::</span><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">iClientWidth</span><span class="hl-code">, </span><span class="hl-identifier">iClientHeight</span><span class="hl-code">,
                 ::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-code">;
        ::</span><span class="hl-identifier">EndPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_CLOSE</span><span class="hl-code">:
      </span><span class="hl-comment">// 閉じる操作が行われた時 WM_DESTROY をポストする</span><span class="hl-code">
      ::</span><span class="hl-identifier">DestroyWindow</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_DESTROY</span><span class="hl-code">:
      </span><span class="hl-comment">// ゲームシステムの終了
      </span><span class="hl-brackets">{
      }
      </span><span class="hl-comment">// WM_QUIT をポスト（引数は終了コード）</span><span class="hl-code">
      ::</span><span class="hl-identifier">PostQuitMessage</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">default</span><span class="hl-code">:
      </span><span class="hl-reserved">return</span><span class="hl-code"> ::</span><span class="hl-identifier">DefWindowProc</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, </span><span class="hl-identifier">msg</span><span class="hl-code">, </span><span class="hl-identifier">wp</span><span class="hl-code">, </span><span class="hl-identifier">lp</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-brackets">}

  </span><span class="hl-comment">// 自分で処理した場合は必ず 0 を返す
  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<h5>tiles.h</h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">

#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">windows.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">
#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdlib.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

#define </span><span class="hl-identifier">SCREEN_WIDTH </span><span class="hl-number">640</span><span class="hl-prepro">
#define </span><span class="hl-identifier">SCREEN_HEIGHT </span><span class="hl-number">480</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_NUM_X </span><span class="hl-number">4</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_NUM_Y </span><span class="hl-number">4</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_WIDTH </span><span class="hl-brackets">(</span><span class="hl-identifier">SCREEN_WIDTH</span><span class="hl-code"> / </span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-brackets">)</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_HEIGHT </span><span class="hl-brackets">(</span><span class="hl-identifier">SCREEN_HEIGHT</span><span class="hl-code"> / </span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-brackets">)</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_MOVE_SPEED </span><span class="hl-number">20</span><span class="hl-prepro">

#define </span><span class="hl-identifier">BITMAP_FILE </span><span class="hl-quotes">&quot;</span><span class="hl-string">sample.bmp</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-types">typedef enum </span><span class="hl-identifier">tagYesNo </span><span class="hl-brackets">{
  </span><span class="hl-identifier">YES</span><span class="hl-code">,
  </span><span class="hl-identifier">NO
</span><span class="hl-brackets">} </span><span class="hl-identifier">YESNO</span><span class="hl-default">, *</span><span class="hl-identifier">PYESNO</span><span class="hl-default">;

</span><span class="hl-types">typedef struct </span><span class="hl-identifier">tagTile </span><span class="hl-brackets">{
  </span><span class="hl-identifier">YESNO isBlank</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">idxX</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">idxY</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">posX</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">posY</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">TILE</span><span class="hl-default">, *</span><span class="hl-identifier">PTILE</span><span class="hl-default">;

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HDC</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">PressingMouseKey</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-prepro">#endif</span></pre></div></div>
<h5></h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-types">static </span><span class="hl-identifier">HDC hMemory</span><span class="hl-default">;
</span><span class="hl-types">static </span><span class="hl-identifier">HBITMAP hBitmap</span><span class="hl-default">;
</span><span class="hl-types">static </span><span class="hl-identifier">HBRUSH hBGColor</span><span class="hl-default">;

</span><span class="hl-types">static </span><span class="hl-identifier">TILE tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-brackets">][</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-brackets">]</span><span class="hl-default">;

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">blkX</span><span class="hl-code">, </span><span class="hl-identifier">blkY</span><span class="hl-code">;

  </span><span class="hl-comment">// 乱数の種を設定
  </span><span class="hl-identifier">srand</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">())</span><span class="hl-code">;

  </span><span class="hl-comment">// ビットマップファイルの読み込み
  </span><span class="hl-identifier">HDC hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">hMemory</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">hBitmap</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HBITMAP</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                   </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-identifier">BITMAP_FILE</span><span class="hl-brackets">)</span><span class="hl-code">,
                                   </span><span class="hl-identifier">IMAGE_BITMAP</span><span class="hl-code">,
                                   </span><span class="hl-number">0</span><span class="hl-code">,
                                   </span><span class="hl-number">0</span><span class="hl-code">,
                                   </span><span class="hl-identifier">LR_LOADFROMFILE</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hMemory</span><span class="hl-code">, ::</span><span class="hl-identifier">hBitmap</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// 空タイルを決定する
  </span><span class="hl-identifier">blkX</span><span class="hl-code"> = </span><span class="hl-identifier">rand</span><span class="hl-brackets">()</span><span class="hl-code"> % </span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code">;
  </span><span class="hl-identifier">blkY</span><span class="hl-code"> = </span><span class="hl-identifier">rand</span><span class="hl-brackets">()</span><span class="hl-code"> % </span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code">;

  </span><span class="hl-comment">// 各タイルの座標をセット
  </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code">++</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code">++</span><span class="hl-brackets">) {</span><span class="hl-code">
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxX</span><span class="hl-code"> = </span><span class="hl-identifier">x</span><span class="hl-code">;
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxY</span><span class="hl-code"> = </span><span class="hl-identifier">y</span><span class="hl-code">;
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> = </span><span class="hl-identifier">x</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">;
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> = </span><span class="hl-identifier">y</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">;
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code"> == </span><span class="hl-identifier">blkX</span><span class="hl-code"> &amp;&amp; </span><span class="hl-identifier">y</span><span class="hl-code"> == </span><span class="hl-identifier">blkY</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">isBlank</span><span class="hl-code"> = </span><span class="hl-identifier">YES</span><span class="hl-code">;
      </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">isBlank</span><span class="hl-code"> = </span><span class="hl-identifier">NO</span><span class="hl-code">;
      </span><span class="hl-brackets">}
    }
  }

  </span><span class="hl-comment">// 塗りつぶしブラシ</span><span class="hl-code">
  ::</span><span class="hl-identifier">hBGColor</span><span class="hl-code"> = </span><span class="hl-identifier">CreateSolidBrush</span><span class="hl-brackets">(</span><span class="hl-identifier">RGB</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">))</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()
{
  </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">targetX</span><span class="hl-code">, </span><span class="hl-identifier">targetY</span><span class="hl-code">;

  </span><span class="hl-comment">// タイルの座標修正
  </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code">++</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code">++</span><span class="hl-brackets">) {
      </span><span class="hl-identifier">targetX</span><span class="hl-code"> = </span><span class="hl-identifier">x</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">;
      </span><span class="hl-identifier">targetY</span><span class="hl-code"> = </span><span class="hl-identifier">y</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">;
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> &lt;</span><span class="hl-identifier">targetX</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> += </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">targetX</span><span class="hl-code"> &lt;::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> -= </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> &lt;</span><span class="hl-identifier">targetY</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> += </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">targetY</span><span class="hl-code"> &lt;::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> -= </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
    }
  }
}

</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HDC hdc</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-code">;

  ::</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, ::</span><span class="hl-identifier">hBGColor</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">Rectangle</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">SCREEN_WIDTH</span><span class="hl-code">, </span><span class="hl-identifier">SCREEN_HEIGHT</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// タイル描画
  </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code">++</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code">++</span><span class="hl-brackets">) {
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">isBlank</span><span class="hl-code"> == </span><span class="hl-identifier">NO</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">,
                 ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code">,
                 ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code">,
                 </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">,
                 </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">,
                 ::</span><span class="hl-identifier">hMemory</span><span class="hl-code">,
                 ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxX</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">,
                 ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxY</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">,
                 </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-brackets">}
    }
  }
}

</span><span class="hl-types">void </span><span class="hl-identifier">PressingMouseKey</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-types">int </span><span class="hl-identifier">y</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">tileX</span><span class="hl-code">, </span><span class="hl-identifier">tileY</span><span class="hl-code">;
  </span><span class="hl-identifier">TILE temp</span><span class="hl-code">;

  </span><span class="hl-identifier">tileX</span><span class="hl-code"> = </span><span class="hl-identifier">x</span><span class="hl-code"> / </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">;
  </span><span class="hl-identifier">tileY</span><span class="hl-code"> = </span><span class="hl-identifier">y</span><span class="hl-code"> / </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">;

  </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">tileX</span><span class="hl-code"> &lt;</span><span class="hl-brackets">(</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code"> &amp;&amp; ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-code"> + </span><span class="hl-number">1</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">isBlank</span><span class="hl-code"> == </span><span class="hl-identifier">YES</span><span class="hl-brackets">) {
    </span><span class="hl-identifier">temp</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-code"> + </span><span class="hl-number">1</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-code"> + </span><span class="hl-number">1</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">temp</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code"> &lt;</span><span class="hl-identifier">tileX</span><span class="hl-code"> &amp;&amp; ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">isBlank</span><span class="hl-code"> == </span><span class="hl-identifier">YES</span><span class="hl-brackets">) {
    </span><span class="hl-identifier">temp</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">temp</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">tileY</span><span class="hl-code"> &lt;</span><span class="hl-brackets">(</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code"> &amp;&amp; ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-code"> + </span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">isBlank</span><span class="hl-code"> == </span><span class="hl-identifier">YES</span><span class="hl-brackets">) {
    </span><span class="hl-identifier">temp</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-code"> + </span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-code"> + </span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">temp</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code"> &lt;</span><span class="hl-identifier">tileY</span><span class="hl-code"> &amp;&amp; ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">isBlank</span><span class="hl-code"> == </span><span class="hl-identifier">YES</span><span class="hl-brackets">) {
    </span><span class="hl-identifier">temp</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-code"> - </span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code">;
    ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">tileX</span><span class="hl-brackets">][</span><span class="hl-identifier">tileY</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">temp</span><span class="hl-code">;
  </span><span class="hl-brackets">}
}</span></pre></div></div>
<p>今回のポイントは、最終的にタイムアタックにしたいので WM_LBUTTONDOWN と WM_MOUSEMOVE の両方でタイル交換のロジックを呼んでいる点です。これによってマウスボタンを押したままポインタを動かすだけで連続してタイル交換ができるようになりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/144/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 18 夜） &#8211; タイル表示のコーディング（５）</title>
		<link>http://www.game-create.com/archives/141</link>
		<comments>http://www.game-create.com/archives/141#comments</comments>
		<pubDate>Sat, 10 Nov 2007 10:06:59 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=141</guid>
		<description><![CDATA[だらだらとタイル表示に時間を割いていてはもったいないですよね。…というワケで最低限の処理を全て記述しました。

template.cpp
/**
 * @file
 * @brief Windows アプリケーション [...]]]></description>
			<content:encoded><![CDATA[<p>だらだらとタイル表示に時間を割いていてはもったいないですよね。…というワケで最低限の処理を全て記述しました。</p>
<p><span id="more-141"></span></p>
<h5>template.cpp</h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-mlcomment">/**
 * @file
 * @brief Windows アプリケーションの雛形
 *
 * Windows アプリケーションを作成する際の雛形ファイル。
 * コンパイルオプション /EHsc が必要。
 * ライブラリ kernel32.lib user32.lib gdi32.lib winmm.lib が必要。
 *
 * @author Byerkut
 * @date 2007-09-22
 * @version </span><span class="hl-inlinedoc">$Id: $
 </span><span class="hl-mlcomment">*/

</span><span class="hl-comment">// 国際化する
</span><span class="hl-prepro">#ifndef </span><span class="hl-identifier">_UNICODE</span><span class="hl-prepro">
#define </span><span class="hl-identifier">_UNICODE</span><span class="hl-prepro">
#endif
#ifndef </span><span class="hl-identifier">UNICODE</span><span class="hl-prepro">
#define </span><span class="hl-identifier">UNICODE</span><span class="hl-prepro">
#endif

</span><span class="hl-comment">// 依存ライブラリをリンカに教える
</span><span class="hl-prepro">#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">kernel32.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">
#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">user32.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">
#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">gdi32.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">
#pragma </span><span class="hl-identifier">comment</span><span class="hl-brackets">(</span><span class="hl-identifier">lib</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">winmm.lib</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-prepro">

</span><span class="hl-comment">// Win32API の開発環境をインポート
</span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">windows.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">
#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">mmsystem.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-mlcomment">/*======================================================================
 * プロトタイプ宣言
 *======================================================================*/

</span><span class="hl-comment">/// ウィンドウプロシージャ（コールバック関数）
</span><span class="hl-identifier">LRESULT CALLBACK WindowProcedure</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWnd</span><span class="hl-code">,
                                 </span><span class="hl-identifier">UINT msg</span><span class="hl-code">,
                                 </span><span class="hl-identifier">WPARAM wp</span><span class="hl-code">,
                                 </span><span class="hl-identifier">LPARAM lp</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-mlcomment">/*======================================================================
 * 定数
 *======================================================================*/

</span><span class="hl-comment">/// クライアントサイズの幅
</span><span class="hl-types">static const unsigned int </span><span class="hl-identifier">iClientWidth</span><span class="hl-default"> = </span><span class="hl-number">640</span><span class="hl-default">;

</span><span class="hl-comment">/// クライアントサイズの高さ
</span><span class="hl-types">static const unsigned int </span><span class="hl-identifier">iClientHeight</span><span class="hl-default"> = </span><span class="hl-number">480</span><span class="hl-default">;

</span><span class="hl-mlcomment">/*======================================================================
 * グローバル変数
 *======================================================================*/

</span><span class="hl-comment">/// ウィンドウクラス名
</span><span class="hl-types">static </span><span class="hl-identifier">LPCTSTR szClassName</span><span class="hl-default"> = </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">template</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">/// タイトルバーの文字列
</span><span class="hl-types">static </span><span class="hl-identifier">LPCTSTR szTitleBar</span><span class="hl-default"> = </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">１５ぱずりゃー</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">/// インスタンスのハンドル
</span><span class="hl-types">static </span><span class="hl-identifier">HINSTANCE hInstance</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-comment">/// メインフォームのハンドル
</span><span class="hl-types">static </span><span class="hl-identifier">HWND hWindow</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-comment">/// バックバッファ
</span><span class="hl-types">static </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-comment">/// バックバッファビットマップ
</span><span class="hl-types">static </span><span class="hl-identifier">HBITMAP hBitmap</span><span class="hl-default"> = </span><span class="hl-prepro">NULL</span><span class="hl-default">;

</span><span class="hl-mlcomment">/*======================================================================
 * 関数
 *======================================================================*/

/**
 * アプリケーションのエントリーポイント
 *
 * @param[in] hInstance 現在のインスタンスハンドル
 * @param[in] hPreviousInstance 過去のインスタンスハンドル
 * @param[in] lpsCommandLine コマンドライン引数
 * @param[in] nCommandShow ウィンドウ状態
 *
 * @return アプリケーションの終了コード
 */
</span><span class="hl-types">int </span><span class="hl-identifier">WINAPI WinMain</span><span class="hl-brackets">(</span><span class="hl-identifier">HINSTANCE hInstance</span><span class="hl-code">,
                   </span><span class="hl-identifier">HINSTANCE hPreviousInstance</span><span class="hl-code">,
                   </span><span class="hl-identifier">LPSTR lpsCommandLine</span><span class="hl-code">,
                   </span><span class="hl-types">int </span><span class="hl-identifier">nCommandShow</span><span class="hl-brackets">)
{
  </span><span class="hl-identifier">HANDLE hMutex</span><span class="hl-code">;
  </span><span class="hl-identifier">MSG msg</span><span class="hl-code">;

  </span><span class="hl-comment">// インスタンスハンドルを保存する</span><span class="hl-code">
  ::</span><span class="hl-identifier">hInstance</span><span class="hl-code"> = </span><span class="hl-identifier">hInstance</span><span class="hl-code">;

  </span><span class="hl-comment">// ミューテックスによる多重起動の検出
  </span><span class="hl-identifier">hMutex</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateMutex</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">, </span><span class="hl-prepro">TRUE</span><span class="hl-code">, </span><span class="hl-identifier">szClassName</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">GetLastError</span><span class="hl-brackets">()</span><span class="hl-code"> == </span><span class="hl-identifier">ERROR_ALREADY_EXISTS</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// アプリケーション初期化
  </span><span class="hl-brackets">{
    </span><span class="hl-comment">// ウィンドウクラスを定義する
    </span><span class="hl-identifier">WNDCLASSEX wc</span><span class="hl-code">;

    </span><span class="hl-comment">// 構造体のサイズ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">cbSize</span><span class="hl-code"> = </span><span class="hl-reserved">sizeof</span><span class="hl-brackets">(</span><span class="hl-identifier">WNDCLASSEX</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-comment">// クラスのスタイル
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">style</span><span class="hl-code"> = </span><span class="hl-identifier">CS_HREDRAW</span><span class="hl-code"> | </span><span class="hl-identifier">CS_VREDRAW</span><span class="hl-code">;
    </span><span class="hl-comment">// ウィンドウプロシージャ名
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">lpfnWndProc</span><span class="hl-code"> = ::</span><span class="hl-identifier">WindowProcedure</span><span class="hl-code">;
    </span><span class="hl-comment">// 補助メモリ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">cbClsExtra</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">;
    </span><span class="hl-comment">// 補助メモリ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">cbWndExtra</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">;
    </span><span class="hl-comment">// インスタンスハンドル
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hInstance</span><span class="hl-code"> = ::</span><span class="hl-identifier">hInstance</span><span class="hl-code">;
    </span><span class="hl-comment">// アイコン
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hIcon</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HICON</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                  </span><span class="hl-identifier">MAKEINTRESOURCE</span><span class="hl-brackets">(</span><span class="hl-identifier">IDI_APPLICATION</span><span class="hl-brackets">)</span><span class="hl-code">,
                                  </span><span class="hl-identifier">IMAGE_ICON</span><span class="hl-code">,
                                  </span><span class="hl-number">0</span><span class="hl-code">,
                                  </span><span class="hl-number">0</span><span class="hl-code">,
                                  </span><span class="hl-identifier">LR_DEFAULTSIZE</span><span class="hl-code"> | </span><span class="hl-identifier">LR_SHARED</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-comment">// カーソル
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hCursor</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HCURSOR</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                      </span><span class="hl-identifier">MAKEINTRESOURCE</span><span class="hl-brackets">(</span><span class="hl-identifier">IDC_ARROW</span><span class="hl-brackets">)</span><span class="hl-code">,
                                      </span><span class="hl-identifier">IMAGE_CURSOR</span><span class="hl-code">,
                                      </span><span class="hl-number">0</span><span class="hl-code">,
                                      </span><span class="hl-number">0</span><span class="hl-code">,
                                      </span><span class="hl-identifier">LR_DEFAULTSIZE</span><span class="hl-code"> | </span><span class="hl-identifier">LR_SHARED</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-comment">// 背景ブラシ
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hbrBackground</span><span class="hl-code"> = </span><span class="hl-prepro">NULL</span><span class="hl-code">;
    </span><span class="hl-comment">// メニュー名
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">lpszMenuName</span><span class="hl-code"> = </span><span class="hl-prepro">NULL</span><span class="hl-code">;
    </span><span class="hl-comment">// クラス名
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">lpszClassName</span><span class="hl-code"> = ::</span><span class="hl-identifier">szClassName</span><span class="hl-code">;
    </span><span class="hl-comment">// 小さいアイコン
    </span><span class="hl-identifier">wc</span><span class="hl-code">.</span><span class="hl-identifier">hIconSm</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HICON</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                    </span><span class="hl-identifier">MAKEINTRESOURCE</span><span class="hl-brackets">(</span><span class="hl-identifier">IDI_APPLICATION</span><span class="hl-brackets">)</span><span class="hl-code">,
                                    </span><span class="hl-identifier">IMAGE_ICON</span><span class="hl-code">,
                                    </span><span class="hl-number">0</span><span class="hl-code">,
                                    </span><span class="hl-number">0</span><span class="hl-code">,
                                    </span><span class="hl-identifier">LR_DEFAULTSIZE</span><span class="hl-code"> | </span><span class="hl-identifier">LR_SHARED</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-comment">// ウィンドウクラスを登録する
    </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!::</span><span class="hl-identifier">RegisterClassEx</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">wc</span><span class="hl-brackets">))
      </span><span class="hl-reserved">return </span><span class="hl-prepro">FALSE</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// インスタンス初期化
  </span><span class="hl-brackets">{
    </span><span class="hl-comment">// ウィンドウサイズを計算する
    </span><span class="hl-types">unsigned int </span><span class="hl-identifier">windowWidth</span><span class="hl-code"> = </span><span class="hl-identifier">iClientWidth</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXEDGE</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXBORDER</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXDLGFRAME</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-types">unsigned int </span><span class="hl-identifier">windowHeight</span><span class="hl-code"> = </span><span class="hl-identifier">iClientHeight</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYEDGE</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYBORDER</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYDLGFRAME</span><span class="hl-brackets">)</span><span class="hl-code">
      + ::</span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYCAPTION</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-comment">// ウィンドウを作成する</span><span class="hl-code">
    ::</span><span class="hl-identifier">hWindow</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateWindow</span><span class="hl-brackets">(</span><span class="hl-comment">// クラス名</span><span class="hl-code">
                               ::</span><span class="hl-identifier">szClassName</span><span class="hl-code">,
                               </span><span class="hl-comment">// タイトルバーの文字列</span><span class="hl-code">
                               ::</span><span class="hl-identifier">szTitleBar</span><span class="hl-code">,
                               </span><span class="hl-comment">// ウィンドウの種類
                               </span><span class="hl-identifier">WS_OVERLAPPEDWINDOW</span><span class="hl-code"> &amp;
                               ~</span><span class="hl-identifier">WS_THICKFRAME</span><span class="hl-code"> &amp;
                               ~</span><span class="hl-identifier">WS_MAXIMIZEBOX</span><span class="hl-code">,
                               </span><span class="hl-comment">// x 座標
                               </span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CXSCREEN</span><span class="hl-brackets">)</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code"> - </span><span class="hl-identifier">windowWidth</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code">,
                               </span><span class="hl-comment">// y 座標
                               </span><span class="hl-identifier">GetSystemMetrics</span><span class="hl-brackets">(</span><span class="hl-identifier">SM_CYSCREEN</span><span class="hl-brackets">)</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code"> - </span><span class="hl-identifier">windowHeight</span><span class="hl-code">/</span><span class="hl-number">2</span><span class="hl-code">,
                               </span><span class="hl-comment">// 幅
                               </span><span class="hl-identifier">windowWidth</span><span class="hl-code">,
                               </span><span class="hl-comment">// 高さ
                               </span><span class="hl-identifier">windowHeight</span><span class="hl-code">,
                               </span><span class="hl-comment">// 親ウィンドウのハンドル
                               // 親を作るときは NULL
                               </span><span class="hl-prepro">NULL</span><span class="hl-code">,
                               </span><span class="hl-comment">// メニューハンドル
                               // クラスメニューを作るときは NULL
                               </span><span class="hl-prepro">NULL</span><span class="hl-code">,
                               </span><span class="hl-comment">// インスタンスハンドル
                               </span><span class="hl-identifier">hInstance</span><span class="hl-code">,
                               </span><span class="hl-comment">// ウィンドウ作成データ
                               </span><span class="hl-prepro">NULL</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">) {
      </span><span class="hl-reserved">return </span><span class="hl-prepro">FALSE</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">// ウィンドウを表示する</span><span class="hl-code">
    ::</span><span class="hl-identifier">ShowWindow</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">nCommandShow</span><span class="hl-brackets">)</span><span class="hl-code">;

    </span><span class="hl-comment">// ウィンドウを再描画する</span><span class="hl-code">
    ::</span><span class="hl-identifier">UpdateWindow</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// バックバッファの構築
  </span><span class="hl-brackets">{
    </span><span class="hl-identifier">HDC hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">hBitmap</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateCompatibleBitmap</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">,
                                         </span><span class="hl-identifier">iClientWidth</span><span class="hl-code">,
                                         </span><span class="hl-identifier">iClientHeight</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code">, ::</span><span class="hl-identifier">hBitmap</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-brackets">}

  </span><span class="hl-comment">// メッセージループ
  </span><span class="hl-brackets">{
    </span><span class="hl-identifier">FLOAT </span><span class="hl-types">const </span><span class="hl-identifier">frame</span><span class="hl-code"> = </span><span class="hl-number">16.6666</span><span class="hl-identifier">f</span><span class="hl-code">;
    </span><span class="hl-identifier">DWORD enterTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
    </span><span class="hl-identifier">DWORD previousTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
    </span><span class="hl-identifier">DWORD afterGameUpdateTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;

    ::</span><span class="hl-identifier">ZeroMemory</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-code">, </span><span class="hl-reserved">sizeof</span><span class="hl-brackets">(</span><span class="hl-identifier">MSG</span><span class="hl-brackets">))</span><span class="hl-code">;

    </span><span class="hl-reserved">while </span><span class="hl-brackets">(</span><span class="hl-identifier">msg</span><span class="hl-code">.</span><span class="hl-identifier">message</span><span class="hl-code"> != </span><span class="hl-identifier">WM_QUIT</span><span class="hl-brackets">) {
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">PeekMessage</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">PM_REMOVE</span><span class="hl-brackets">)) {</span><span class="hl-code">

        ::</span><span class="hl-identifier">TranslateMessage</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-comment">// メッセージをウィンドウプロシージャに送信</span><span class="hl-code">
        ::</span><span class="hl-identifier">DispatchMessage</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">msg</span><span class="hl-brackets">)</span><span class="hl-code">;

      </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{

        </span><span class="hl-comment">// ゲームシステムのメインループ
        </span><span class="hl-identifier">enterTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">frame</span><span class="hl-code"> &lt;</span><span class="hl-brackets">(</span><span class="hl-identifier">enterTime</span><span class="hl-code"> - </span><span class="hl-identifier">previousTime</span><span class="hl-brackets">)) {
          </span><span class="hl-comment">// ゲームの中核処理は必ず実行する</span><span class="hl-code">
          ::</span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()</span><span class="hl-code">;
          </span><span class="hl-identifier">afterGameUpdateTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
          </span><span class="hl-reserved">if </span><span class="hl-brackets">((</span><span class="hl-identifier">afterGameUpdateTime</span><span class="hl-code"> - </span><span class="hl-identifier">enterTime</span><span class="hl-brackets">)</span><span class="hl-code"> &lt;</span><span class="hl-identifier">frame</span><span class="hl-brackets">) {
            </span><span class="hl-comment">// 同じフレーム内に UpdateGame() がすんだ場合は
            // 描画処理を実行する</span><span class="hl-code">
            ::</span><span class="hl-identifier">InvalidateRect</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-prepro">NULL</span><span class="hl-code">, </span><span class="hl-prepro">TRUE</span><span class="hl-brackets">)</span><span class="hl-code">;
            ::</span><span class="hl-identifier">UpdateWindow</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
            </span><span class="hl-identifier">previousTime</span><span class="hl-code"> = ::</span><span class="hl-identifier">timeGetTime</span><span class="hl-brackets">()</span><span class="hl-code">;
            ::</span><span class="hl-identifier">Sleep</span><span class="hl-brackets">(</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">;           </span><span class="hl-comment">// 少し待つ
          </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{
            </span><span class="hl-comment">// 次のフレームに食い込んでしまった場合は
            // 強制的に次フレームの更新を実行する
            </span><span class="hl-identifier">previousTime</span><span class="hl-code"> = </span><span class="hl-identifier">enterTime</span><span class="hl-code"> - </span><span class="hl-brackets">(</span><span class="hl-identifier">DWORD</span><span class="hl-brackets">)</span><span class="hl-identifier">frame</span><span class="hl-code">;
          </span><span class="hl-brackets">}
        }

      }
    }
  }

  </span><span class="hl-comment">// バックバッファの解放</span><span class="hl-code">
  ::</span><span class="hl-identifier">DeleteObject</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBitmap</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">DeleteDC</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// ミューテックスを閉じる</span><span class="hl-code">
  ::</span><span class="hl-identifier">CloseHandle</span><span class="hl-brackets">(</span><span class="hl-identifier">hMutex</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// PostQuitMessage 関数によってポストされた
  // WM_QUIT メッセージの wParam を終了コードとして返す
  </span><span class="hl-reserved">return </span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-brackets">)</span><span class="hl-identifier">msg</span><span class="hl-code">.</span><span class="hl-identifier">wParam</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-mlcomment">/**
 * ウィンドウプロシージャ用のコールバック関数
 *
 * @param[in] hWnd ウィンドウハンドル
 * @param[in] msg メッセージ内容
 * @param[in] wp 補助パラメータ
 * @param[in] lp 補助パラメータ
 *
 * @return メッセージ処理の結果
 */
</span><span class="hl-identifier">LRESULT CALLBACK WindowProcedure</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWnd</span><span class="hl-code">,
                                 </span><span class="hl-identifier">UINT msg</span><span class="hl-code">,
                                 </span><span class="hl-identifier">WPARAM wp</span><span class="hl-code">,
                                 </span><span class="hl-identifier">LPARAM lp</span><span class="hl-brackets">)
{
  </span><span class="hl-reserved">switch </span><span class="hl-brackets">(</span><span class="hl-identifier">msg</span><span class="hl-brackets">)
    {
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_CREATE</span><span class="hl-code">:
      </span><span class="hl-comment">// ゲームシステムの初期化
      </span><span class="hl-brackets">{</span><span class="hl-code">
        ::</span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_ACTIVATE</span><span class="hl-code">:
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">wp</span><span class="hl-code"> == </span><span class="hl-identifier">WA_ACTIVE</span><span class="hl-brackets">) {
        </span><span class="hl-comment">// ゲームシステムのアクティブ化
      </span><span class="hl-brackets">} </span><span class="hl-reserved">else </span><span class="hl-brackets">{
        </span><span class="hl-comment">// ゲームシステムの非アクティブ化
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_PAINT</span><span class="hl-code">:
      </span><span class="hl-brackets">{
        </span><span class="hl-identifier">HDC hdc</span><span class="hl-code">;
        </span><span class="hl-identifier">PAINTSTRUCT ps</span><span class="hl-code">;
        </span><span class="hl-identifier">hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">BeginPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-comment">// ゲームの描画処理を書く</span><span class="hl-code">
        ::</span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-code">;
        ::</span><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">iClientWidth</span><span class="hl-code">, </span><span class="hl-identifier">iClientHeight</span><span class="hl-code">,
                 ::</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-code">;
        ::</span><span class="hl-identifier">EndPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_CLOSE</span><span class="hl-code">:
      </span><span class="hl-comment">// 閉じる操作が行われた時 WM_DESTROY をポストする</span><span class="hl-code">
      ::</span><span class="hl-identifier">DestroyWindow</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">case </span><span class="hl-identifier">WM_DESTROY</span><span class="hl-code">:
      </span><span class="hl-comment">// ゲームシステムの終了
      </span><span class="hl-brackets">{
      }
      </span><span class="hl-comment">// WM_QUIT をポスト（引数は終了コード）</span><span class="hl-code">
      ::</span><span class="hl-identifier">PostQuitMessage</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">;
      </span><span class="hl-reserved">break</span><span class="hl-code">;
    </span><span class="hl-reserved">default</span><span class="hl-code">:
      </span><span class="hl-reserved">return</span><span class="hl-code"> ::</span><span class="hl-identifier">DefWindowProc</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, </span><span class="hl-identifier">msg</span><span class="hl-code">, </span><span class="hl-identifier">wp</span><span class="hl-code">, </span><span class="hl-identifier">lp</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-brackets">}

  </span><span class="hl-comment">// 自分で処理した場合は必ず 0 を返す
  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<h5>tiles.h</h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">

#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">windows.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">
#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdlib.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

#define </span><span class="hl-identifier">SCREEN_WIDTH </span><span class="hl-number">640</span><span class="hl-prepro">
#define </span><span class="hl-identifier">SCREEN_HEIGHT </span><span class="hl-number">480</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_NUM_X </span><span class="hl-number">4</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_NUM_Y </span><span class="hl-number">4</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_WIDTH </span><span class="hl-brackets">(</span><span class="hl-identifier">SCREEN_WIDTH</span><span class="hl-code"> / </span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-brackets">)</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_HEIGHT </span><span class="hl-brackets">(</span><span class="hl-identifier">SCREEN_HEIGHT</span><span class="hl-code"> / </span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-brackets">)</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_MOVE_SPEED </span><span class="hl-number">8</span><span class="hl-prepro">

#define </span><span class="hl-identifier">BITMAP_FILE </span><span class="hl-quotes">&quot;</span><span class="hl-string">sample.bmp</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-types">typedef struct </span><span class="hl-identifier">tagTile </span><span class="hl-brackets">{
  </span><span class="hl-types">int </span><span class="hl-identifier">idxX</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">idxY</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">posX</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">posY</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">TILE</span><span class="hl-default">, *</span><span class="hl-identifier">PTILE</span><span class="hl-default">;

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HDC</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-prepro">#endif</span></pre></div></div>
<h5>tiles.cpp</h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-types">static </span><span class="hl-identifier">HDC hMemory</span><span class="hl-default">;
</span><span class="hl-types">static </span><span class="hl-identifier">HBITMAP hBitmap</span><span class="hl-default">;
</span><span class="hl-types">static </span><span class="hl-identifier">HBRUSH hBGColor</span><span class="hl-default">;

</span><span class="hl-types">static </span><span class="hl-identifier">TILE tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-brackets">][</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-brackets">]</span><span class="hl-default">;

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-code">;

  </span><span class="hl-comment">// ビットマップファイルの読み込み
  </span><span class="hl-identifier">HDC hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">hMemory</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">hBitmap</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HBITMAP</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                   </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-identifier">BITMAP_FILE</span><span class="hl-brackets">)</span><span class="hl-code">,
                                   </span><span class="hl-identifier">IMAGE_BITMAP</span><span class="hl-code">,
                                   </span><span class="hl-number">0</span><span class="hl-code">,
                                   </span><span class="hl-number">0</span><span class="hl-code">,
                                   </span><span class="hl-identifier">LR_LOADFROMFILE</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hMemory</span><span class="hl-code">, ::</span><span class="hl-identifier">hBitmap</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// 各タイルの座標をセット
  </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code">++</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code">++</span><span class="hl-brackets">) {</span><span class="hl-code">
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxX</span><span class="hl-code"> = </span><span class="hl-identifier">x</span><span class="hl-code">;
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxY</span><span class="hl-code"> = </span><span class="hl-identifier">y</span><span class="hl-code">;
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> = </span><span class="hl-identifier">x</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">;
      ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> = </span><span class="hl-identifier">y</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">;
    </span><span class="hl-brackets">}
  }

  </span><span class="hl-comment">// 塗りつぶしブラシ</span><span class="hl-code">
  ::</span><span class="hl-identifier">hBGColor</span><span class="hl-code"> = </span><span class="hl-identifier">CreateSolidBrush</span><span class="hl-brackets">(</span><span class="hl-identifier">RGB</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">))</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()
{
  </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">targetX</span><span class="hl-code">, </span><span class="hl-identifier">targetY</span><span class="hl-code">;

  </span><span class="hl-comment">// タイルの座標修正
  </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code">++</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code">++</span><span class="hl-brackets">) {
      </span><span class="hl-identifier">targetX</span><span class="hl-code"> = </span><span class="hl-identifier">x</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">;
      </span><span class="hl-identifier">targetY</span><span class="hl-code"> = </span><span class="hl-identifier">y</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">;
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> &lt;</span><span class="hl-identifier">targetX</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> += </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">targetX</span><span class="hl-code"> &lt;::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code"> -= </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> &lt;</span><span class="hl-identifier">targetY</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> += </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
      </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">targetY</span><span class="hl-code"> &lt;::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-brackets">) {</span><span class="hl-code">
        ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code"> -= </span><span class="hl-identifier">TILE_MOVE_SPEED</span><span class="hl-code">;
      </span><span class="hl-brackets">}
    }
  }
}

</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HDC hdc</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">, </span><span class="hl-identifier">y</span><span class="hl-code">;

  ::</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, ::</span><span class="hl-identifier">hBGColor</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">Rectangle</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">SCREEN_WIDTH</span><span class="hl-code">, </span><span class="hl-identifier">SCREEN_HEIGHT</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// タイル描画
  </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">y</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_Y</span><span class="hl-code">; </span><span class="hl-identifier">y</span><span class="hl-code">++</span><span class="hl-brackets">) {
    </span><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code"> &lt;</span><span class="hl-identifier">TILE_NUM_X</span><span class="hl-code">; </span><span class="hl-identifier">x</span><span class="hl-code">++</span><span class="hl-brackets">) {</span><span class="hl-code">
      ::</span><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">,
               ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posX</span><span class="hl-code">,
               ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">posY</span><span class="hl-code">,
               </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">,
               </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">,
               ::</span><span class="hl-identifier">hMemory</span><span class="hl-code">,
               ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxX</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_WIDTH</span><span class="hl-code">,
               ::</span><span class="hl-identifier">tiles</span><span class="hl-brackets">[</span><span class="hl-identifier">x</span><span class="hl-brackets">][</span><span class="hl-identifier">y</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">idxY</span><span class="hl-code"> * </span><span class="hl-identifier">TILE_HEIGHT</span><span class="hl-code">,
               </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-brackets">}
  }
}</span></pre></div></div>
<p>ポイントは「 <a href="http://www.game-create.com/archives/77">15 パズルを作る（第９夜） &#8211; 空白のマスに隣接するタイルをスライドさせる</a>」にあることを実装した点だと思います。回転や拡大縮小はまた後日。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/141/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 17 夜） &#8211; タイル表示のコーディング（４）</title>
		<link>http://www.game-create.com/archives/125</link>
		<comments>http://www.game-create.com/archives/125#comments</comments>
		<pubDate>Thu, 25 Oct 2007 11:10:03 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[BMP]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=125</guid>
		<description><![CDATA[肝心の WinMain() 部分を載せ忘れていましたのでここにて。

まず、「ゲーム用のウィンドウを作成する」で紹介しましたサンプルソースをプロジェクトに組み込みます。
次にソースの先頭で…
#include &#038;quot [...]]]></description>
			<content:encoded><![CDATA[<p>肝心の WinMain() 部分を載せ忘れていましたのでここにて。</p>
<p><span id="more-125"></span></p>
<p>まず、「<a href="http://www.game-create.com/archives/86">ゲーム用のウィンドウを作成する</a>」で紹介しましたサンプルソースをプロジェクトに組み込みます。</p>
<p>次にソースの先頭で…</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span></pre></div></div>
<p>…と書いて tiles.cpp の関数を呼べるようにします。</p>
<p>tiles.cpp の関数を呼べるようになりましたら WM_CREATE 内に…</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">case </span><span class="hl-identifier">WM_CREATE</span><span class="hl-default">:
  </span><span class="hl-comment">// ゲームシステムの初期化
  </span><span class="hl-brackets">{</span><span class="hl-code">
    ::</span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-brackets">}
  </span><span class="hl-reserved">break</span><span class="hl-default">;</span></pre></div></div>
<p>…と、初期化処理を書きます。</p>
<p>同じように WM_PAINT 内に…</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">case </span><span class="hl-identifier">WM_PAINT</span><span class="hl-default">:
  </span><span class="hl-brackets">{
    </span><span class="hl-identifier">HDC hdc</span><span class="hl-code">;
    </span><span class="hl-identifier">PAINTSTRUCT ps</span><span class="hl-code">;
    </span><span class="hl-identifier">hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">BeginPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-comment">// ゲームの描画処理を書く</span><span class="hl-code">
    ::</span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
    ::</span><span class="hl-identifier">EndPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-brackets">}
  </span><span class="hl-reserved">break</span><span class="hl-default">;</span></pre></div></div>
<p>…と、描画処理を書きます。</p>
<p>最後に 15 パズルのタイルの絵柄となる 640&#215;480 のビットマップ画像を調達して、名前を sample.bmp としてプロジェクトディレクトリの下の debug ディレクトリの中に保存してください。</p>
<p>これで前回紹介した tiles.h と tiles.cpp を一緒にコンパイル＆リンクすれば見事に画像が表示されます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/125/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 16 夜） &#8211; タイル表示のコーディング（３）</title>
		<link>http://www.game-create.com/archives/123</link>
		<comments>http://www.game-create.com/archives/123#comments</comments>
		<pubDate>Tue, 23 Oct 2007 08:39:10 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=123</guid>
		<description><![CDATA[盛り上がってまいりました。

今日はビットマップを表示するところまで組んでみました。
tiles.cpp の役割としてはひたすらビットマップを表示するだけです。今回は画面サイズのビットマップをそのまま表示しているだけです [...]]]></description>
			<content:encoded><![CDATA[<p>盛り上がってまいりました。</p>
<p><span id="more-123"></span></p>
<p>今日はビットマップを表示するところまで組んでみました。</p>
<p>tiles.cpp の役割としてはひたすらビットマップを表示するだけです。今回は画面サイズのビットマップをそのまま表示しているだけですが、完成する頃には 4&#215;4 のタイルをひとつずつブロック転送して表示させる予定です。</p>
<p>また、本来表示させたい座標を２次元配で保持し、現在の座標から少しずつ修正するようにしてアニメーションを実現します。</p>
<p>詳しくは「 <a href="http://www.game-create.com/archives/77">15 パズルを作る（第９夜） &#8211; 空白のマスに隣接するタイルをスライドさせる</a>」を参照してください。</p>
<h5>tiles.h</h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">

#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">windows.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

#define </span><span class="hl-identifier">SCREEN_WIDTH </span><span class="hl-number">640</span><span class="hl-prepro">
#define </span><span class="hl-identifier">SCREEN_HEIGHT </span><span class="hl-number">480</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_NUM_X </span><span class="hl-number">4</span><span class="hl-prepro">
#define </span><span class="hl-identifier">TILE_NUM_Y </span><span class="hl-number">4</span><span class="hl-prepro">

#define </span><span class="hl-identifier">BITMAP_FILE </span><span class="hl-quotes">&quot;</span><span class="hl-string">sample.bmp</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-types">typedef struct </span><span class="hl-identifier">tagTile </span><span class="hl-brackets">{
  </span><span class="hl-types">int </span><span class="hl-identifier">posX</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">posY</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">TILE</span><span class="hl-default">, *</span><span class="hl-identifier">PTILE</span><span class="hl-default">;

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HDC</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-prepro">#endif</span></pre></div></div>
<h5>tiles.cpp</h5>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-types">static </span><span class="hl-identifier">HDC hMemory</span><span class="hl-default">;
</span><span class="hl-types">static </span><span class="hl-identifier">HBITMAP hBitmap</span><span class="hl-default">;

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-brackets">)
{
  </span><span class="hl-comment">// ビットマップファイルの読み込み
  </span><span class="hl-identifier">HDC hdc</span><span class="hl-code"> = ::</span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">hMemory</span><span class="hl-code"> = ::</span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">hBitmap</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HBITMAP</span><span class="hl-brackets">)</span><span class="hl-code">::</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                   </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-identifier">BITMAP_FILE</span><span class="hl-brackets">)</span><span class="hl-code">,
                                   </span><span class="hl-identifier">IMAGE_BITMAP</span><span class="hl-code">,
                                   </span><span class="hl-number">0</span><span class="hl-code">,
                                   </span><span class="hl-number">0</span><span class="hl-code">,
                                   </span><span class="hl-identifier">LR_LOADFROMFILE</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-code">::</span><span class="hl-identifier">hMemory</span><span class="hl-code">, ::</span><span class="hl-identifier">hBitmap</span><span class="hl-brackets">)</span><span class="hl-code">;
  ::</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()
{
}

</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">(</span><span class="hl-identifier">HDC hdc</span><span class="hl-brackets">)
{</span><span class="hl-code">
  ::</span><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">640</span><span class="hl-code">, </span><span class="hl-number">480</span><span class="hl-code">, ::</span><span class="hl-identifier">hMemory</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/123/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 15 夜） &#8211; タイル表示のコーディング（２）</title>
		<link>http://www.game-create.com/archives/118</link>
		<comments>http://www.game-create.com/archives/118#comments</comments>
		<pubDate>Thu, 18 Oct 2007 08:42:21 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=118</guid>
		<description><![CDATA[15 パズルコーディング２日目です。さくさくと行きます。

規模の小さいゲームの開発にはひな形が生きてくるものです。
だいたいどのモジュールも初期化、更新、描画がセットになります。本当は終了というのも必要なのですが、ゲー [...]]]></description>
			<content:encoded><![CDATA[<p>15 パズルコーディング２日目です。さくさくと行きます。</p>
<p><span id="more-118"></span></p>
<p>規模の小さいゲームの開発にはひな形が生きてくるものです。</p>
<p>だいたいどのモジュールも初期化、更新、描画がセットになります。本当は終了というのも必要なのですが、ゲームの終了＝プログラムの終了と手抜きをしているので書く必要がありません。みなさまはマネをしてはいけません。</p>
<h5>tiles.h</h5>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">

</span><span class="hl-types">typedef struct </span><span class="hl-identifier">tagTile </span><span class="hl-brackets">{
  </span><span class="hl-types">int </span><span class="hl-identifier">posX</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">posY</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">TILE</span><span class="hl-default">, *</span><span class="hl-identifier">PTILE</span><span class="hl-default">;

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">()</span><span class="hl-default">;

</span><span class="hl-prepro">#endif</span></pre></div></div>
<p>名前も単純にしましょう。 Initialize で初期化、 Update で更新、 Draw で描画です。規模の小さいゲームはこれで十分です。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">typedef struct </span><span class="hl-identifier">tagTile </span><span class="hl-brackets">{
  </span><span class="hl-types">int </span><span class="hl-identifier">posX</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">posY</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">TILE</span><span class="hl-default">, *</span><span class="hl-identifier">PTILE</span><span class="hl-default">;</span></pre></div></div>
<p>これは１枚のタイルに対する情報を保存する構造体です。 15 パズルですので、この構造体を 15 個使います。</p>
<p>メンバは今の段階ではテキトーです。描画に関わる構造体ですのでX座標とY座標は必要だろうという読みです。</p>
<h5>tiles.cpp</h5>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">

</span><span class="hl-types">void </span><span class="hl-identifier">InitializeTiles</span><span class="hl-brackets">()
{
}

</span><span class="hl-types">void </span><span class="hl-identifier">UpdateTiles</span><span class="hl-brackets">()
{
}

</span><span class="hl-types">void </span><span class="hl-identifier">DrawTiles</span><span class="hl-brackets">()
{
}</span></pre></div></div>
<p>規模の小さいゲームは書いてナンボです。</p>
<p>うそです、すみません。</p>
<p>テキトーはいけません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/118/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 14 夜） &#8211; タイル表示のコーディング（１）</title>
		<link>http://www.game-create.com/archives/117</link>
		<comments>http://www.game-create.com/archives/117#comments</comments>
		<pubDate>Wed, 17 Oct 2007 12:08:36 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=117</guid>
		<description><![CDATA[今日から 15 パズルのコーディングに入ろうと思います。
まずタイルです。

タイルを最初に作る理由は最も他のプログラムと依存度が少なく簡単だからです。全然見当がつかない方も最後にはわかっていただけると思います。
一気に [...]]]></description>
			<content:encoded><![CDATA[<p>今日から 15 パズルのコーディングに入ろうと思います。</p>
<p>まずタイルです。</p>
<p><span id="more-117"></span></p>
<p>タイルを最初に作る理由は最も他のプログラムと依存度が少なく簡単だからです。全然見当がつかない方も最後にはわかっていただけると思います。</p>
<p>一気に作ってしまうと経緯がわからないと思いますので少しずつコーディングしていきます。</p>
<p>まずはどんなプログラムでも必要なヘッダファイルの二度読み対策です。</p>
<p>ヘッダファイルとはレストランのメニューのようなものです。メニューがあるからこそ別のファイルにある関数を使うことができるのです。</p>
<p>では二度読み対策とは何か？</p>
<p>実はヘッダファイルは他のソースから #include によって読み込まれるのですが、同じヘッダファイルを二回読んでしまうとシンボル（関数の名前など）の重複でエラーになってしまうのです。ようは同じ名前の料理があるけどどちらが欲しいのか特定できないからエラーにしとくね、ということです。</p>
<p>その対策は具体的にはどうやるのか？それが次のコードです。</p>
<h5>tiles.h</h5>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">__TILES_H__</span><span class="hl-prepro">

</span><span class="hl-comment">// ここに関数のプロトタイプ（メニューのようなもの）を書きます

</span><span class="hl-prepro">#endif</span></pre></div></div>
<p>#ifndef #define #endif がポイントです。</p>
<p>このコードを簡単に説明すると、もし __TILES_H__ という言葉がはじめて使われる場合はヘッダファイルの中身をコンパイラが見えるようにします。もし __TILES_H__ という言葉が過去に使われていたらヘッダファイルの中身をコンパイラから隠します、という意味になります。</p>
<p>この辺はいずれプリプロセッサを扱うときに詳しく解説します。</p>
<h5>tiles.cpp</h5>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&quot;</span><span class="hl-string">tiles.h</span><span class="hl-quotes">&quot;</span><span class="hl-prepro">
</span><span class="hl-comment">// ↑上で作ったファイルをさっそく読み込んでいるところです</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 13 夜） &#8211; タイルを伸縮させる</title>
		<link>http://www.game-create.com/archives/99</link>
		<comments>http://www.game-create.com/archives/99#comments</comments>
		<pubDate>Mon, 01 Oct 2007 13:43:35 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=99</guid>
		<description><![CDATA[タイルは BitBlt() 関数を使って描画しますが、伸縮して描画する方法はかなりわかりやすいと思います。その名も StretchBlt() という関数がありますのでそれを使います。

StretchBlt(hdcDes [...]]]></description>
			<content:encoded><![CDATA[<p>タイルは BitBlt() 関数を使って描画しますが、伸縮して描画する方法はかなりわかりやすいと思います。その名も StretchBlt() という関数がありますのでそれを使います。</p>
<p><span id="more-99"></span></p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">StretchBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hdcDest</span><span class="hl-code">,             </span><span class="hl-comment">// 転送先のデバイスコンテキスト
           </span><span class="hl-identifier">dstLeft</span><span class="hl-code">, </span><span class="hl-identifier">dstTop</span><span class="hl-code">,     </span><span class="hl-comment">// 転送先の左上座標
           </span><span class="hl-identifier">dstWidth</span><span class="hl-code">, </span><span class="hl-identifier">dstHeight</span><span class="hl-code">, </span><span class="hl-comment">// 転送先のサイズ
           </span><span class="hl-identifier">hdcSrc</span><span class="hl-code">,              </span><span class="hl-comment">// 転送元のデバイスコンテキスト
           </span><span class="hl-identifier">srcLeft</span><span class="hl-code">, </span><span class="hl-identifier">srcTop</span><span class="hl-code">,     </span><span class="hl-comment">// 転送元の左上座標
           </span><span class="hl-identifier">srcWidth</span><span class="hl-code">, </span><span class="hl-identifier">srcHeight</span><span class="hl-code">, </span><span class="hl-comment">// 転送元のサイズ
           </span><span class="hl-identifier">rop</span><span class="hl-brackets">)</span><span class="hl-default">;                </span><span class="hl-comment">// ラスタオペレーション</span></pre></div></div>
<p>こう言ってはなんですが、こんなにわかりやすい Windows API は他にありません。他の API は自分が使いやすいようにラッピングするのが良いと思います。私流で良ければ今度お見せいたします。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/99/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 パズルを作る（第 12 夜） &#8211; タイルを回転させる</title>
		<link>http://www.game-create.com/archives/96</link>
		<comments>http://www.game-create.com/archives/96#comments</comments>
		<pubDate>Sat, 29 Sep 2007 09:48:52 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[１５パズル]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[練習]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=96</guid>
		<description><![CDATA[タイルはビットマップファイルを読み込んで BitBlt() 関数で描画するわけですが、 PlgBlt() 関数を使うと描画先を任意の頂点の平行四辺形にすることができます。頂点をきちんと算出すればきれいに回転して見せること [...]]]></description>
			<content:encoded><![CDATA[<p>タイルはビットマップファイルを読み込んで BitBlt() 関数で描画するわけですが、 PlgBlt() 関数を使うと描画先を任意の頂点の平行四辺形にすることができます。頂点をきちんと算出すればきれいに回転して見せることも可能です。</p>
<p><span id="more-96"></span></p>
<p>描画先の平行四辺形は POINT という構造体を要素とする配列で指定します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">POINT descPoints</span><span class="hl-brackets">[</span><span class="hl-number">3</span><span class="hl-brackets">]</span><span class="hl-default"> = </span><span class="hl-brackets">{{</span><span class="hl-number">260</span><span class="hl-code">,  </span><span class="hl-number">10</span><span class="hl-brackets">}</span><span class="hl-code">,
                       </span><span class="hl-brackets">{</span><span class="hl-number">460</span><span class="hl-code">, </span><span class="hl-number">210</span><span class="hl-brackets">}</span><span class="hl-code">,
                       </span><span class="hl-brackets">{ </span><span class="hl-number">10</span><span class="hl-code">, </span><span class="hl-number">210</span><span class="hl-brackets">}}</span><span class="hl-default">;</span></pre></div></div>
<p>四角形ですので頂点が４つあるわけですが、最後のひとつは３点から自動的に算出されます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">PlgBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">,           </span><span class="hl-comment">// 描画先（ HDC ）
       </span><span class="hl-identifier">descPoints</span><span class="hl-code">,    </span><span class="hl-comment">// 平行四辺形の座標
       </span><span class="hl-identifier">hMemDC</span><span class="hl-code">,        </span><span class="hl-comment">// 転送元（ HDC ）
       </span><span class="hl-identifier">top</span><span class="hl-code">, </span><span class="hl-identifier">left</span><span class="hl-code">,     </span><span class="hl-comment">// 転送する画像の左上座標
       </span><span class="hl-identifier">width</span><span class="hl-code">, </span><span class="hl-identifier">height</span><span class="hl-code">, </span><span class="hl-comment">// 転送する画像のサイズ
       </span><span class="hl-identifier">hMask</span><span class="hl-code">,         </span><span class="hl-comment">// マスク画像（ HBITMAP ）
       </span><span class="hl-identifier">mTop</span><span class="hl-code">, </span><span class="hl-identifier">mLeft</span><span class="hl-brackets">)</span><span class="hl-default">;  </span><span class="hl-comment">// マスクする画像の左上座標</span></pre></div></div>
<p>ちなみに hMask が不要な場合は NULL を指定でき、 mTop と mLeft は無視されます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/96/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

