<?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/%e3%83%8d%e3%82%bf/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>計算結果が０かどうかの判定が速い x86 の CPU</title>
		<link>http://www.game-create.com/archives/708</link>
		<comments>http://www.game-create.com/archives/708#comments</comments>
		<pubDate>Thu, 11 Sep 2008 19:19:05 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=708</guid>
		<description><![CDATA[これはもう時代遅れの考え方ではなかろうか…

仕事で使っているプログラムは「必ず真になる条件」として 1 == 1 という式が頻繁に出てきます。これ、なぜかというと if 文などで式が成り立っているかを引き算で判定してい [...]]]></description>
			<content:encoded><![CDATA[<p>これはもう時代遅れの考え方ではなかろうか…</p>
<p><span id="more-708"></span></p>
<p>仕事で使っているプログラムは「必ず真になる条件」として 1 == 1 という式が頻繁に出てきます。これ、なぜかというと if 文などで式が成り立っているかを引き算で判定していることに起因します。たとえば value < 2 という式が成り立っているかを判定する際には、内部的に value &#8211; 2 が計算されるのです。もし、結果が０より小さければ条件が成り立っています。逆に結果が０以上の場合は条件は成り立っていません。</p>
<p>では、なぜこの仕組みと 1 == 1 がつながるのかというと、実は x86 の CPU は計算結果が０かどうかの比較が速いのです。だから 1 == 1 つまり 1 &#8211; 1 で結果が０になるか？という調べ方をするんですね。</p>
<p>しかしながら、最近の CPU は速いのでこれはもう true に書き換えても良いのではないかと思います。たぶん最適化で消えると思いますし…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/708/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>すでに都市伝説と化したコンパイラの最適化うんちく</title>
		<link>http://www.game-create.com/archives/625</link>
		<comments>http://www.game-create.com/archives/625#comments</comments>
		<pubDate>Wed, 20 Aug 2008 15:54:42 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[コンパイラ]]></category>
		<category><![CDATA[ネタ]]></category>
		<category><![CDATA[最適化]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=625</guid>
		<description><![CDATA[私のような老兵が今の若者に過去の苦難を語る機会など急速に減りつつある昨今、コンパイラの最適化についてまたひとつ通説が伝説と化しました。

おそらく MS-DOS 時代を駆け巡った方々にはおなじみであろう通説、それは「コン [...]]]></description>
			<content:encoded><![CDATA[<p>私のような老兵が今の若者に過去の苦難を語る機会など急速に減りつつある昨今、コンパイラの最適化についてまたひとつ通説が伝説と化しました。</p>
<p><span id="more-625"></span></p>
<p>おそらく MS-DOS 時代を駆け巡った方々にはおなじみであろう通説、それは「コンパイラは２重ループの最適化が苦手」というものです。読んで字のごとく、コンパイラは最適化オプションをつけても、ハイパフォーマンスな２重ループのコードを吐きだしてくれなかったのです。そんなわけで、２重ループの代表的な用途であるブロック転送などをアセンブラでガリガリやっていた時代があったのですが、先日、某天才プログラマーに言われてしまいました。</p>
<p><img src="http://www.game-create.com/wp-content/plugins/wp-tegaki/wp-tegaki-img.php?tegaki_id=625-0&amp;page=1" alt="コンパイラ？最適化？２重ループ？" width="381" height="36" /><br />
<img src="http://www.game-create.com/wp-content/plugins/wp-tegaki/wp-tegaki-img.php?tegaki_id=625-1&amp;page=1" alt="君はいつの話をしておるんだ…" width="325" height="35" /></p>
<p>聞く話によると最近のコンパイラは２重ループも速いそうです。知りませんでしたなぁ…。冷静に考えてみると Win32API でゲームが作れるくらい最近のマシンスペックとテクノロジーは進化しているわけですよね。最近、アセンブラ書いてないです。これは幸せなことなのかもしれません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/625/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>古い Visual C++ のスコープに関するおもしろいバグ</title>
		<link>http://www.game-create.com/archives/559</link>
		<comments>http://www.game-create.com/archives/559#comments</comments>
		<pubDate>Thu, 07 Aug 2008 01:05:12 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[コンパイラ]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=559</guid>
		<description><![CDATA[昔の Visual C++ というか cl.exe におもしろいバグがあるそうです。

for (int i = 0; i &#60;10; i++);

printf(&#34;%d\n&#34;, i);
これ [...]]]></description>
			<content:encoded><![CDATA[<p>昔の Visual C++ というか cl.exe におもしろいバグがあるそうです。</p>
<p><span id="more-559"></span></p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> &lt;</span><span class="hl-number">10</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">%d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">i</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>これが動いてしまうそうです。ちゃんと 10 と表示されるとか。わざわざ for 文の中で変数を宣言する意味が無いですね。もしかしたら cl.exe ではブロックの先頭から末尾が新しいスコープになるように設計されているのかもしれません。なんというか機械的に、まぁ、機械であることには違いないんですけど。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/559/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>他のプログラマに「バグ」ではなく「仕様」だと主張する</title>
		<link>http://www.game-create.com/archives/521</link>
		<comments>http://www.game-create.com/archives/521#comments</comments>
		<pubDate>Wed, 30 Jul 2008 23:27:51 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[アサーション]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=521</guid>
		<description><![CDATA[他のプログラマに「バグ」ではなく「仕様」だと主張するためには assert() 関数を使います。

assret() 関数に自分のソースコード中で成り立つ恒等式を記述しておくことで、他のプログラマに対して「私はこの条件を [...]]]></description>
			<content:encoded><![CDATA[<p>他のプログラマに「バグ」ではなく「仕様」だと主張するためには assert() 関数を使います。</p>
<p><span id="more-521"></span></p>
<p>assret() 関数に自分のソースコード中で成り立つ恒等式を記述しておくことで、他のプログラマに対して「私はこの条件を満たしていることを前提に開発している」と主張することができるようになります。もし assert() 関数に書いた条件が満たされない場合は警告が表示されるようになります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">someFunc</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg</span><span class="hl-brackets">)
{
  </span><span class="hl-comment">// arg は０以外の数値である必要がある
  </span><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-identifier">arg</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-comment">// 関数の中身
</span><span class="hl-brackets">}</span></pre></div></div>
<p>もし assert() 関数の警告に遭遇してしまった場合は、その仕様がアプリケーション全体として問題ないかを検討し、問題ある場合は、その assert() を使ったプログラマーや上長と議論するなどして解決する必要があります。 CVS と同様で assert() 関数を使う＝ソフトウェアの品質が上がるということではありません。 assert() 関数はきっかけに過ぎません。</p>
<p>また、 assert() 関数には副作用のある式を書くことはできません。これは assert() 関数がリリース時に削除される可能性があるためです（普通は削除します）。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">someFunc</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg</span><span class="hl-brackets">)
{
  </span><span class="hl-comment">// やってはいけない！これはリリース時に無くなる！
  </span><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-identifier">arg</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// 関数の中身
</span><span class="hl-brackets">}</span></pre></div></div>
<p>assert() 関数はエラー処理ではなく、あくまで品質向上の仕組みというわけです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/521/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>空中で肉を焼くとどうなるか？ in モンスターハンター</title>
		<link>http://www.game-create.com/archives/507</link>
		<comments>http://www.game-create.com/archives/507#comments</comments>
		<pubDate>Sat, 26 Jul 2008 14:26:41 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲーム]]></category>
		<category><![CDATA[MONSTER HUNTER]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=507</guid>
		<description><![CDATA[実は、つっかえ棒が出現してきて焼けるんですけど、あれを開発者の苦労と受け取っていただける方が多いようです。

実際は地面の上で焼いているときでもつっかえ棒があって、普段はめり込んでいて見えないだけだと思うのですが、ちょっ [...]]]></description>
			<content:encoded><![CDATA[<p>実は、つっかえ棒が出現してきて焼けるんですけど、あれを開発者の苦労と受け取っていただける方が多いようです。</p>
<p><span id="more-507"></span></p>
<p>実際は地面の上で焼いているときでもつっかえ棒があって、普段はめり込んでいて見えないだけだと思うのですが、ちょっと 3D の開発経験がないので何とも言えません。ただ、基本的にゲームはすべてのものがめり込むと考えていただいた方が良いと思います。これからゲーム制作を学ばれる場合はなおさらです。「どうやってめり込まないようにするか？」というテーマだけで 8,000 円くらいする本があるのですが、先日 Amazon で注文してしまいました。いやーん。</p>
<p>今流行の物理エンジンってどうなんでしょうか？何であって何でないのか？めりこみとか起こらないのか？興味をそそります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/507/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>プログラムは正常終了したら０を返す</title>
		<link>http://www.game-create.com/archives/416</link>
		<comments>http://www.game-create.com/archives/416#comments</comments>
		<pubDate>Sun, 06 Jul 2008 13:30:01 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=416</guid>
		<description><![CDATA[よくサンプルソースで main 関数の戻り値に return 0; と書いていますが、本当は return EXIT_SUCCESS; と書きます。 EXIT_SUCCESS の値が０なんです。

一見、正常終了が０とは [...]]]></description>
			<content:encoded><![CDATA[<p>よくサンプルソースで main 関数の戻り値に return 0; と書いていますが、本当は return EXIT_SUCCESS; と書きます。 EXIT_SUCCESS の値が０なんです。</p>
<p><span id="more-416"></span></p>
<p>一見、正常終了が０とは不自然のように思います。なぜなら if (0) は false になるからです。しかし、これはコマンドラインからプログラムが正常終了したかの判断材料とするために、「正常終了したら０を返す」と広く決まっているのです（仕様なのか慣例なのかはわかりません）。つまり、「０が返ってきたら正常終了したとみなそう」というわけです。</p>
<p>Windows は GUI が中心ですのであまりピンとこないかもしれませんが、 Linux などでは各コマンドが正常終了した場合は決まって０が返ってきます。これを見越してシェルスクリプトを作ったりもします。</p>
<p>ちなみに Visual C++ でプログラムを実行して終了した場合、「出力」ウィンドウに「プログラムはコード 0 (0&#215;0) で終了しました。」のようなメッセージが出てきますが、これこそ return 0; の結果なのです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/416/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows はいつからアナログ入力に対応したのか？</title>
		<link>http://www.game-create.com/archives/296</link>
		<comments>http://www.game-create.com/archives/296#comments</comments>
		<pubDate>Tue, 18 Mar 2008 14:28:05 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=296</guid>
		<description><![CDATA[ファミコンからゲームに入った世代の素朴な疑問です。

その昔、 Windows 対応のジョイパッドと言えば十時キーを搭載したファミコンタイプのものが主流でした（少なくとも近所の電気屋にはそれしか売っていませんでした）。
 [...]]]></description>
			<content:encoded><![CDATA[<p>ファミコンからゲームに入った世代の素朴な疑問です。</p>
<p><span id="more-296"></span></p>
<p>その昔、 Windows 対応のジョイパッドと言えば十時キーを搭載したファミコンタイプのものが主流でした（少なくとも近所の電気屋にはそれしか売っていませんでした）。</p>
<p>しかし、プレステの DualShock が登場したあたりから Windows 対応のジョイパッドにもアナログスティックを搭載したタイプが登場するようになりました。</p>
<p>当時不思議だったのが、後発であるはずのアナログスティックのタイプが Windows に対して何の更新や設定もなしに使えるということでした。</p>
<p>さすがは Windows 。こうなることを見越してアナログ入力にも対応していたのかぁ～、などと感心してしまったのですが、ジョイパッドのさらに前身にジョイスティックというアナログ入力デバイスが存在していたことを知り、一気に熱が冷めました。つまり、アナログ入力が最初だったのです。</p>
<p>だからジョイパッドから入力キーを取得するとX軸とY軸という区別でデータが取得されるんですね。</p>
<p>納得しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/296/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配列の添え字と名前を入れ替える</title>
		<link>http://www.game-create.com/archives/138</link>
		<comments>http://www.game-create.com/archives/138#comments</comments>
		<pubDate>Wed, 07 Nov 2007 07:19:34 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=138</guid>
		<description><![CDATA[Ｃ言語が使える方にはおなじみのこのネタ。
たとえば items[10] という変数があったとき…

10[items] と書いてもコンパイルが通ります。
もちろん構文エラーも論理エラーもありません。
配列がポインタとポイ [...]]]></description>
			<content:encoded><![CDATA[<p>Ｃ言語が使える方にはおなじみのこのネタ。</p>
<p>たとえば items[10] という変数があったとき…</p>
<p><span id="more-138"></span></p>
<p>10[items] と書いてもコンパイルが通ります。</p>
<p>もちろん構文エラーも論理エラーもありません。</p>
<p>配列がポインタとポインタ演算で成り立っているからこそ成り立つこのネタ。つまり items[10] というのは items+10 と同じ意味なんですね。足し算は順番を入れ替えても成り立ちますから 10+items というのは正しいのです。</p>
<p>この点に関して、ある著名なプログラマは自身の本でこう言ったそうです。</p>
<p><img src="http://www.game-create.com/wp-content/plugins/wp-tegaki/wp-tegaki-img.php?tegaki_id=138-0&amp;page=1" alt="…でも書くな！" width="250" height="51" /></p>
<p>名言ですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/138/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

