<?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/%e6%95%b0%e5%80%a4/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/614</link>
		<comments>http://www.game-create.com/archives/614#comments</comments>
		<pubDate>Sun, 17 Aug 2008 23:28:17 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[radian]]></category>
		<category><![CDATA[数値]]></category>
		<category><![CDATA[数学]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=614</guid>
		<description><![CDATA[角度をラジアンに変換するためには、角度を 180 で除算してπと積算します。

C/C++ をはじめ、多くのプログラミング言語では角度をラジアンで指定します。これはなぜかというと角度が 360 度であることの根拠がわから [...]]]></description>
			<content:encoded><![CDATA[<p>角度をラジアンに変換するためには、角度を 180 で除算してπと積算します。</p>
<p><span id="more-614"></span></p>
<p>C/C++ をはじめ、多くのプログラミング言語では角度をラジアンで指定します。これはなぜかというと角度が 360 度であることの根拠がわからないためです（一応、歴史的根拠はあるそうです）。それに対してラジアンという単位は、その角度からなる弧の長さの比率ですので根拠が明確なのです。コンピュータはラジアンが大好きです。</p>
<p>しかし、根拠がどうとか、いちいち面倒なことを覚える必要はありません、ラジアンは次の式で求めることができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#define </span><span class="hl-identifier">PI </span><span class="hl-number">3.141592</span><span class="hl-prepro">
</span><span class="hl-types">float </span><span class="hl-identifier">degree</span><span class="hl-default"> = </span><span class="hl-number">123</span><span class="hl-default">; </span><span class="hl-comment">// 123 度
</span><span class="hl-types">float </span><span class="hl-identifier">radian</span><span class="hl-default"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">degree</span><span class="hl-code"> / </span><span class="hl-number">180</span><span class="hl-brackets">)</span><span class="hl-default"> * </span><span class="hl-identifier">PI</span><span class="hl-default">; </span><span class="hl-comment">// 2.146754 …</span></pre></div></div>
<p>実際に計算してみるとわかるのですが、ラジアンは０度の時には０、 180 の時にはπになり、 360 度で２πになります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/614/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>変数の数値を１増やす、または１減らす</title>
		<link>http://www.game-create.com/archives/592</link>
		<comments>http://www.game-create.com/archives/592#comments</comments>
		<pubDate>Wed, 13 Aug 2008 00:41:40 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[式]]></category>
		<category><![CDATA[数値]]></category>
		<category><![CDATA[算術演算子]]></category>
		<category><![CDATA[言語仕様]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=592</guid>
		<description><![CDATA[変数の数値を１増やす、または１減らすためには、インクリメント演算子、またはデクリメント演算子を使います。

百聞は一見にしかず。早速例を見てください。
value = value + 1;
value = value  [...]]]></description>
			<content:encoded><![CDATA[<p>変数の数値を１増やす、または１減らすためには、インクリメント演算子、またはデクリメント演算子を使います。</p>
<p><span id="more-592"></span></p>
<p>百聞は一見にしかず。早速例を見てください。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">value</span><span class="hl-default"> = </span><span class="hl-identifier">value</span><span class="hl-default"> + </span><span class="hl-number">1</span><span class="hl-default">;
</span><span class="hl-identifier">value</span><span class="hl-default"> = </span><span class="hl-identifier">value</span><span class="hl-default"> - </span><span class="hl-number">1</span><span class="hl-default">;</span></pre></div></div>
<p>value の値をそれぞれ１増やしたり１減らしたりしていますが、これは次のように書くことができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">value</span><span class="hl-default">++;
</span><span class="hl-identifier">value</span><span class="hl-default">--;</span></pre></div></div>
<p>これがインクリメント演算子とデクリメント演算子です。この書き方は変数が評価されてから値が変わる点に注意してください。値が変わってから変数を評価したい場合は次のように書きます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-default">++</span><span class="hl-identifier">value</span><span class="hl-default">;
--</span><span class="hl-identifier">value</span><span class="hl-default">;</span></pre></div></div>
<p>前置型と後置型は違いは次のようになります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">cout</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">value</span><span class="hl-default">++ &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">endl</span><span class="hl-default">;
</span><span class="hl-comment">// ↓と同じ意味
</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">cout</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">value</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">endl</span><span class="hl-default">;
</span><span class="hl-identifier">value</span><span class="hl-default"> = </span><span class="hl-identifier">value</span><span class="hl-default"> + </span><span class="hl-number">1</span><span class="hl-default">;

</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">cout</span><span class="hl-default"> &lt;&lt;++</span><span class="hl-identifier">value</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">endl</span><span class="hl-default">;
</span><span class="hl-comment">// ↓と同じ意味
</span><span class="hl-identifier">value</span><span class="hl-default"> = </span><span class="hl-identifier">value</span><span class="hl-default"> + </span><span class="hl-number">1</span><span class="hl-default">;
</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">cout</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">value</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">endl</span><span class="hl-default">;</span></pre></div></div>
<p>しかし、前置型と後置型の違いは可読性に影響を与えるという宗派もありますので注意してください。時に後置型のみを使うというルールで開発している人もいます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/592/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>０からｎまでの間で数値を循環させる</title>
		<link>http://www.game-create.com/archives/588</link>
		<comments>http://www.game-create.com/archives/588#comments</comments>
		<pubDate>Mon, 11 Aug 2008 19:05:18 +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=588</guid>
		<description><![CDATA[０からｎまでの間で数値を循環させるためには % 演算子を使います。

% は割り算の余りを求める演算子ですが、ある変数の内容を１ずつ増加させ、その余りを取ると数値が循環するようになります。
#include &#60;io [...]]]></description>
			<content:encoded><![CDATA[<p>０からｎまでの間で数値を循環させるためには % 演算子を使います。</p>
<p><span id="more-588"></span></p>
<p>% は割り算の余りを求める演算子ですが、ある変数の内容を１ずつ増加させ、その余りを取ると数値が循環するようになります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">iostream</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

</span><span class="hl-types">int </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">value</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">;

  </span><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">100</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-comment">// 0 から 7 で循環させる
    </span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">cout</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">value</span><span class="hl-code"> % </span><span class="hl-number">8</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">endl</span><span class="hl-code">;
    </span><span class="hl-identifier">value</span><span class="hl-code">++;
  </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></pre></div></div>
<p>これを実行すると次のようになります。</p>
<div class="hl-surround" ><div class="hl-main"><pre>0
1
2
3
4
5
6
7
0 ←また０に戻った！
1
2
3
4
5
6
7
0 ←また！
1
2
…（以下、略）</pre></div></div>
<p>注意点は、変数がオーバーフローしたときに期待した動作にならないことです。一度だけ使うツールを作る際など、限定した用途に使うのが吉です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/588/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>32bit 値の上位 16bit または下位 16bit を取得する</title>
		<link>http://www.game-create.com/archives/516</link>
		<comments>http://www.game-create.com/archives/516#comments</comments>
		<pubDate>Tue, 29 Jul 2008 08:56:17 +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=516</guid>
		<description><![CDATA[32bit 値の上位 16bit または下位 16bit を取得するためには、 HIWORD マクロ、または LOWORD マクロ を使います。

Windows から送られてくるメッセージのパラメータを解析するために、 [...]]]></description>
			<content:encoded><![CDATA[<p>32bit 値の上位 16bit または下位 16bit を取得するためには、 HIWORD マクロ、または LOWORD マクロ を使います。</p>
<p><span id="more-516"></span></p>
<p>Windows から送られてくるメッセージのパラメータを解析するために、 32bit 値の上位 16bit や下位 16bit を分析することがよくありますが、これを簡単に取得するためのマクロが HIWORD と LOWORD です。 HIWORD は上位 16bit 値を取得し、 LOWORD は下位 16bit 値を取得します。</p>
<div class="hl-surround" ><div class="hl-main"><pre>00000000000000000000000000000000
|--------------||--------------|
     HIWORD          LOWORD</pre></div></div>
<p>HIWORD で返される値は 16bit の長さしかない整数型でも格納できるようビットシフトされて返されます。自分でビットシフトする必要はありません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/516/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>64bit コードと 32bit コードで適切に振り分けられる int 型を使う</title>
		<link>http://www.game-create.com/archives/514</link>
		<comments>http://www.game-create.com/archives/514#comments</comments>
		<pubDate>Mon, 28 Jul 2008 08:12:08 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[32bit]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[数値]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=514</guid>
		<description><![CDATA[64bit コードと 32bit コードで適切に振り分けられる int 型を使うためには、 INT_PTR を使います。

64bit の長さがある整数値型には __int64 がありますが、 32bit 機向けにコンパ [...]]]></description>
			<content:encoded><![CDATA[<p>64bit コードと 32bit コードで適切に振り分けられる int 型を使うためには、 INT_PTR を使います。</p>
<p><span id="more-514"></span></p>
<p>64bit の長さがある整数値型には __int64 がありますが、 32bit 機向けにコンパイルする際には無理に __int64 を使いたくない場合があります。このような場合に INT_PTR 型が便利です。</p>
<p>INT_PTR 型は 64bit 機向けのコンパイル時（ _WIN64 という定数が定義されている時）には __int64 となり、 32bit 機向けのコンパイル時には int となります。 UNICODE を使う際に TCHAR を使うのとイメージは同じです。</p>
<p>なお、 unsigned int を使いたい場合は UINT_PTR 型を使います。 INT_PTR の long 版ともいえる LONG_PTR 型というのもあります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/514/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>浮動小数点数を使わないで小数を表現する</title>
		<link>http://www.game-create.com/archives/430</link>
		<comments>http://www.game-create.com/archives/430#comments</comments>
		<pubDate>Thu, 17 Jul 2008 13:21:21 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[数値]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=430</guid>
		<description><![CDATA[浮動小数点数を使わないで小数を表現するためには固定小数点数を使います。

これはブログで書くほどの話題か悩んだのですが、 C/C++ では固定小数点数型がないため一応書いておきます。
今ではめっきり聞かなくなりましたが「 [...]]]></description>
			<content:encoded><![CDATA[<p>浮動小数点数を使わないで小数を表現するためには固定小数点数を使います。</p>
<p><span id="more-430"></span></p>
<p>これはブログで書くほどの話題か悩んだのですが、 C/C++ では固定小数点数型がないため一応書いておきます。</p>
<p>今ではめっきり聞かなくなりましたが「浮動小数点数を使うと CPU のクロック数が余分にかかる」と言われていた時代がありまして、「だったら浮動小数点数を使わなければ良いんだ」というのが現実解でした（特にゲームの場合）。ちなみに私の時代で整数演算ユニットと浮動小数演算ユニットの切り替えに 15 クロックくらいかかっていました。足し算ひとつで１クロックと考えるとあり得ないオーバーヘッドですよね。</p>
<p>また、浮動小数点数は仕組みを知らないで使うと誤差が大きくなってバグの原因にもなり得ます。このあたりの理由から給与計算などのお金に関わる計算には固定小数点数を使うことがあったりします。</p>
<p>では、固定小数点数が無い C/C++ ではどうすればいいのかというと、たとえば 1.25 という数値を表現したいときは 1250 と保持しておいて、整数部が必要なときに 1000 で除算するのです。つまり 1000 を１として計算するわけですね。こうすると４桁分の精度で小数部が実現できることになります。もちろん計算する場合はすべての数に対してこのルールを適用しなければなりません。</p>
<p>さて、ここまで読んでいただいて「なるほど、ためになったぜ」と思われた方、非常に申し訳ないのですが、 3D ゲームが主流の現在において固定小数点数はほとんど使わないと思います。最近の CPU は速過ぎなんです。しかもコンパイラも頭が良いので、もしかしたらライスタライザを自分で書いてもゲームになるかもしれません。</p>
<p>余談なのですが COBOL というプログラミング言語がありまして、この言語は固定小数点数がメインになっています。なぜかというと COBOL で作られるアプリケーションはビジネス向けに限定されるためです。つまり、誤差などがありますとかなり嬉しくないわけですね。 COBOL = COmmon Business Oriented Language です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/430/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数値と数値の大小を比較する &#8211; 関係演算子</title>
		<link>http://www.game-create.com/archives/103</link>
		<comments>http://www.game-create.com/archives/103#comments</comments>
		<pubDate>Fri, 05 Oct 2007 12:51:40 +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=103</guid>
		<description><![CDATA[プログラミングでは数値と数値の大小を比較することがしばしばあります。たとえば RPG で HP が０になったらステータスを戦闘不能に変更するという仕様があったとします。このような場合は関係演算子を用いて HP が０と等し [...]]]></description>
			<content:encoded><![CDATA[<p>プログラミングでは数値と数値の大小を比較することがしばしばあります。たとえば RPG で HP が０になったらステータスを戦闘不能に変更するという仕様があったとします。このような場合は関係演算子を用いて HP が０と等しいかを判断します。</p>
<p><span id="more-103"></span></p>
<p>関係演算子は、 ==, < , <=, >, >=, != があります。次の表は各関係演算子の意味と使い方です。</p>
<table summary="関係演算子の一覧表" class="style-1">
<tr>
<th>関係演算子</th>
<th>例</th>
<th>意味</th>
</tr>
<tr>
<td>==</td>
<td>HP == 0</td>
<td>変数 HP は０と等しいか？</td>
</tr>
<tr>
<td>&lt;</td>
<td>0 &lt; Gold</td>
<td>変数 Gold は０より大きいか？</td>
</tr>
<tr>
<td>&lt;=</td>
<td>0 &lt;= Gold</td>
<td>変数 Gold は０以上か？</td>
</tr>
<tr>
<td>&gt;</td>
<td>100 &gt; PositionX</td>
<td>変数 PositionX は 100 未満か？</td>
</tr>
<tr>
<td>&gt;=</td>
<td>100 &gt;= PositionX</td>
<td>変数 PositionX は 100 以下か？</td>
</tr>
<tr>
<td>!=</td>
<td>Degree != 90</td>
<td>変数 Degree は 90 と異なっているか？</td>
</tr>
</table>
<p>たいていの場合、関係演算子は if 文とともに使います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/103/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Win32API のデータ型（数値編）</title>
		<link>http://www.game-create.com/archives/10</link>
		<comments>http://www.game-create.com/archives/10#comments</comments>
		<pubDate>Wed, 25 Jul 2007 06:05:21 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[データ型]]></category>
		<category><![CDATA[まとめ]]></category>
		<category><![CDATA[数値]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=10</guid>
		<description><![CDATA[Windows API による Windows アプリケーションの構築に必要な数値型です。



BOOL
真偽値


BOOLEAN
真偽値


BYTE
８ビットの符号なし整数


WORD
16 ビットの符号なし整 [...]]]></description>
			<content:encoded><![CDATA[<p>Windows API による Windows アプリケーションの構築に必要な数値型です。</p>
<p><span id="more-10"></span></p>
<table summary="Win32API のデータ型（数値編）" class="style-1">
<tr>
<th>BOOL</th>
<td>真偽値</td>
</tr>
<tr>
<th>BOOLEAN</th>
<td>真偽値</td>
</tr>
<tr>
<th>BYTE</th>
<td>８ビットの符号なし整数</td>
</tr>
<tr>
<th>WORD</th>
<td>16 ビットの符号なし整数</td>
</tr>
<tr>
<th>DWORD</th>
<td>32 ビットの符号なし整数</td>
</tr>
<tr>
<th>LONG</th>
<td>32 ビットの符号あり整数</td>
</tr>
<tr>
<th>ULONGLONG</th>
<td>64 ビットの符号なし整数</td>
</tr>
<tr>
<th>LONGLONG</th>
<td>64 ビットの符号あり整数</td>
</tr>
<tr>
<th>CHAR</th>
<td>char と同じ</td>
</tr>
<tr>
<th>WCHAR</th>
<td>w_char と同じ</td>
</tr>
<tr>
<th>SHORT</th>
<td>signed short int と同じ</td>
</tr>
<tr>
<th>USHORT</th>
<td>unsigned short int と同じ</td>
</tr>
<tr>
<th>INT</th>
<td>signed int と同じ</td>
</tr>
<tr>
<th>UINT</th>
<td>unsigned int と同じ</td>
</tr>
<tr>
<th>FLOAT</th>
<td>float と同じ</td>
</tr>
<tr>
<th>VOID</th>
<td>void と同じ</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

