<?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%a7%8b%e9%80%a0%e4%bd%93/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>構造体のタグと同じ名前で typedef しても問題なく使える</title>
		<link>http://www.game-create.com/archives/660</link>
		<comments>http://www.game-create.com/archives/660#comments</comments>
		<pubDate>Sat, 30 Aug 2008 11:08:44 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[typedef]]></category>
		<category><![CDATA[構造体]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=660</guid>
		<description><![CDATA[知りませんでした。これ C/C++ の仕様なんでしょうか？

typedef struct SomeStruct {
  int hoge;
} SomeStruct, *pSomeStruct;
こんな構造体を作っ [...]]]></description>
			<content:encoded><![CDATA[<p>知りませんでした。これ C/C++ の仕様なんでしょうか？</p>
<p><span id="more-660"></span></p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">typedef struct </span><span class="hl-identifier">SomeStruct </span><span class="hl-brackets">{
  </span><span class="hl-types">int </span><span class="hl-identifier">hoge</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">SomeStruct</span><span class="hl-default">, *</span><span class="hl-identifier">pSomeStruct</span><span class="hl-default">;</span></pre></div></div>
<p>こんな構造体を作っても問題なく使えます。今まで名前がかぶらないように苦労していたのが馬鹿みたいですよね。本来ならばタグ名の前に struct が付くので識別するのに問題はないということでしょうか。</p>
<p>Byerkut さんもブログを始めてからいろいろと学ぶことがあります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/660/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ヘッダファイルの役割</title>
		<link>http://www.game-create.com/archives/399</link>
		<comments>http://www.game-create.com/archives/399#comments</comments>
		<pubDate>Fri, 20 Jun 2008 12:26:27 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></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=399</guid>
		<description><![CDATA[ヘッダファイルは、ある *.cpp が持っている関数や型を、他のファイルから使えるようにするために *.cpp の概要を外部へ公開する名刺のようなファイルです。
ヘッダファイルは *.cpp ファイルに対してひとつ *. [...]]]></description>
			<content:encoded><![CDATA[<p>ヘッダファイルは、ある *.cpp が持っている関数や型を、他のファイルから使えるようにするために *.cpp の概要を外部へ公開する名刺のようなファイルです。</p>
<p>ヘッダファイルは *.cpp ファイルに対してひとつ *.h という形で作りますが、その内容として次のような情報を記述します。</p>
<ul>
<li>その *.cpp が外部に対してどんな型を提供しているか？</li>
<li>その *.cpp が外部に対してどんな関数を提供しているか？</li>
<li>#include ガード</li>
</ul>
<p><span id="more-399"></span></p>
<h4>その *.cpp が外部に対してどんな型を提供しているか？</h4>
<p>*.cpp が外部に公開している型を他のファイルに教えるための記述です。 class や typedef や enum などを書くことができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 構造体の定義
</span><span class="hl-types">typedef struct </span><span class="hl-brackets">{
  </span><span class="hl-comment">// …
</span><span class="hl-brackets">} </span><span class="hl-identifier">SampleStructure</span><span class="hl-default">;

</span><span class="hl-comment">// クラスの定義
</span><span class="hl-types">class </span><span class="hl-identifier">SampleClass
</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">typedef enum </span><span class="hl-brackets">{
  </span><span class="hl-comment">// …
</span><span class="hl-brackets">} </span><span class="hl-identifier">SampleEnum</span><span class="hl-default">;</span></pre></div></div>
<h4>その *.cpp が外部に対してどんな関数を提供しているか？</h4>
<p>*.cpp が外部に公開している関数を他のファイルに教えるための記述です。他のファイルからはこの *.h ファイルを #include することで *.cpp が提供している関数を使うことができるようになります。関数を外部に公開するためには、関数の名前・引数・戻り値を次のように記述します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">void </span><span class="hl-identifier">InitializePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">FinalizePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdatePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawPlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<h4>#include ガード</h4>
<p>同じ *.h ファイルを２回以上 #include してしまうと「同じ関数名が使われています」というようなエラーになってしまいます。これを回避するために #include ガードを記述します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">

</span><span class="hl-comment">// ここにヘッダファイルの中身を書きます

</span><span class="hl-prepro">#endif</span></pre></div></div>
<p>#include ガードは任意の文字列（前述の例では SAMPLE_HEADER_INCLUDED__ ）を用いて、「その文字列が初めて使われるか？」「すでに使われていないか？」を検証し、初めて使われている場合は *.h ファイルをインクルードし、すでに使われている場合は #include をスキップするようにします。これによって同じ *.h ファイルが２回以上 #include されないようになります。任意の文字列（前述の例では SAMPLE_HEADER_INCLUDED__ ）は好きな文字列を指定することができますが、ファイルごとに違う文字列を指定する必要があります。また、アンダーバーで始まる名前は使用できません。</p>
<h4>完全なヘッダファイルの例</h4>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">

</span><span class="hl-comment">// 型を定義する例
</span><span class="hl-types">typedef struct </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-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">width</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">height</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">life</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">Player</span><span class="hl-default">, *</span><span class="hl-identifier">pPlayer</span><span class="hl-default">;

</span><span class="hl-comment">// 関数を定義する例
</span><span class="hl-types">void </span><span class="hl-identifier">InitializePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">FinalizePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdatePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawPlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-prepro">#endif</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/399/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>100 体分の敵キャラクターをなるべく少ないコードで動かす</title>
		<link>http://www.game-create.com/archives/398</link>
		<comments>http://www.game-create.com/archives/398#comments</comments>
		<pubDate>Thu, 19 Jun 2008 11:22:21 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></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=398</guid>
		<description><![CDATA[100 体分の敵キャラクターをなるべく少ないコードで動かすためには、配列と for 文を組み合わせます。

まず、敵キャラクターの総数を定数で定義します。定数で定義する理由は「あとで変更するのが楽」だからです。
#def [...]]]></description>
			<content:encoded><![CDATA[<p>100 体分の敵キャラクターをなるべく少ないコードで動かすためには、配列と for 文を組み合わせます。</p>
<p><span id="more-398"></span></p>
<p>まず、敵キャラクターの総数を定数で定義します。定数で定義する理由は「あとで変更するのが楽」だからです。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-prepro">#define </span><span class="hl-identifier">MAX_ENEMY </span><span class="hl-number">100</span></pre></div></div>
<p>こうすることで、プログラムから MAX_ENEMY という定数を使うことができるようになります。意味は 100 と数字で書いたときと同じになります。</p>
<p>次に敵キャラクターの情報を保存する配列を作ります。今回の場合は 100 体分の敵キャラクターが必要ですので 100 …と、数字で指定したいところですが、ここで先ほど定義した定数を使います。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-identifier">Enemy enemies</span><span class="hl-brackets">[</span><span class="hl-identifier">MAX_ENEMY</span><span class="hl-brackets">]</span><span class="hl-default">;</span></pre></div></div>
<p>100 という数字を MAX_ENEMY という定数で置き換えることで、敵キャラクターの増減が簡単になります。たとえば、敵キャラクターを 200 体に増やしたい場合は、 #define MAX_ENEMY 200 と書き直すだけで 200 体分の配列を作れるようになります。</p>
<p>100 体分の配列が作れたら準備が完了です。次はゲームの中から 100 体分の敵キャラクターを動かします。しかし、プログラムは一度にひとつのことしかできませんので 100 体の敵キャラクターを同時に動かすことはできません。 100 体分の敵キャラクターを動かすためには、きわめて短い間隔で１体ずつ動かして、見かけ上同時に動いているように見せるのです（アニメーションの原理と同じ）。これを実現するためには for 文を使います。</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-identifier">MAX_ENEMY</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-identifier">doEnemy</span><span class="hl-brackets">(</span><span class="hl-identifier">enemies</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">])</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>１体の敵キャラクターを動かすための関数が doEnemy() で、どの敵キャラクターを動かすのかを引数で受け取るような仕様の場合、先ほど作った enemies 配列に、現在のループは何回目かを数えている i という変数を組み合わせて enemies[i] とする点がポイントです。このように書くと、１回目のループでは i の値が０ですので enemies[0] を参照することができ、２回目のループでは i の値が１ですので enemies[1] を参照することができるようになります。この調子で 100 回繰り返すわけですから、結果的に 100 体分の敵キャラクターを順番に参照していることになります。</p>
<p>これは基本的にして重要なイディオムですので覚えてしまいましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/398/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>複数の変数を内部に持つ新しい型を作る &#8211; 構造体</title>
		<link>http://www.game-create.com/archives/149</link>
		<comments>http://www.game-create.com/archives/149#comments</comments>
		<pubDate>Sun, 18 Nov 2007 12:27:43 +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=149</guid>
		<description><![CDATA[複数の変数を内部に持つ新しい型を作ることができます。これは、たとえば RPG を作る際に１キャラ分のデータをひとつの変数にまとめたい場合に有効です。このような意図で作られた新しい型を構造体と呼びます。

構造体はひとつの [...]]]></description>
			<content:encoded><![CDATA[<p>複数の変数を内部に持つ新しい型を作ることができます。これは、たとえば RPG を作る際に１キャラ分のデータをひとつの変数にまとめたい場合に有効です。このような意図で作られた新しい型を構造体と呼びます。</p>
<p><span id="more-149"></span></p>
<p>構造体はひとつの名前で複数のデータを管理するところが配列と似ています。</p>
<p>しかし、配列はひとつの名前と番号で複数のデータを管理していたのに対して、構造体はひとつの名前とその名前に関連付いている別の名前で複数のデータを管理する部分が異なります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 配列で３つのデータを管理する
</span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">First is %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">numbers</span><span class="hl-brackets">[</span><span class="hl-number">0</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">Second is %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">numbers</span><span class="hl-brackets">[</span><span class="hl-number">1</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">Third is %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">numbers</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">])</span><span class="hl-default">;

</span><span class="hl-comment">// 構造体で３つのデータを管理する
</span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">First is %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">numbers</span><span class="hl-code">.</span><span class="hl-identifier">first</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">Second is %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">numbers</span><span class="hl-code">.</span><span class="hl-identifier">second</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">Third is %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">numbers</span><span class="hl-code">.</span><span class="hl-identifier">third</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>構造体を使うためには、まず構造体を定義する必要があります。</p>
<p>構造体は、はじめてその構造体の変数を宣言するより前（ソースコードから見ると上）に定義する必要があります。</p>
<p>構造体は次のように定義します。このとき、カッコの中の変数をメンバ変数と呼びます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">struct </span><span class="hl-identifier">Player
</span><span class="hl-brackets">{
  </span><span class="hl-types">char </span><span class="hl-identifier">name</span><span class="hl-brackets">[</span><span class="hl-number">50</span><span class="hl-brackets">]</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">HP</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">MP</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">STR</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">DEF</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">AGI</span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-default">;</span></pre></div></div>
<p>これは RPG の１キャラ分のデータをイメージしたものです。</p>
<p>実際にこの変数を使うためには、通常の変数と同様に宣言が必要になります。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-types">struct </span><span class="hl-identifier">Player player</span><span class="hl-default">;</span></pre></div></div>
<p>構造体へアクセスするためには通常の変数と同様に、宣言した時につけた名前を指定するだけですが、構造体の中の変数（メンバ変数）へアクセスするためには、構造体の変数名の後ろにドットをひとつおいて、中の変数名を指定する必要があります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// プレイヤーの名前へアクセス
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">name</span><span class="hl-default">;
</span><span class="hl-comment">// プレイヤーの体力へアクセス
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">HP</span><span class="hl-default">;
</span><span class="hl-comment">// プレイヤーの攻撃力へアクセス
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">STR</span><span class="hl-default">;</span></pre></div></div>
<p>構造体の中の変数は通常の変数と同じようにデータを計算や記憶することができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 宣言
</span><span class="hl-types">struct </span><span class="hl-identifier">Player player</span><span class="hl-default">;

</span><span class="hl-comment">// キャラクターの初期情報をセット
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">name</span><span class="hl-default"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">Byerkut</span><span class="hl-quotes">&quot;</span><span class="hl-default">;
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">HP</span><span class="hl-default"> = </span><span class="hl-number">100</span><span class="hl-default">;
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">MP</span><span class="hl-default"> = </span><span class="hl-number">50</span><span class="hl-default">;
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">STR</span><span class="hl-default"> = </span><span class="hl-number">10</span><span class="hl-default">;
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">DEF</span><span class="hl-default"> = </span><span class="hl-number">5</span><span class="hl-default">;
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">AGI</span><span class="hl-default"> = </span><span class="hl-number">1</span><span class="hl-default">;

</span><span class="hl-comment">// ダメージを食らった
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">HP</span><span class="hl-default"> = </span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">HP</span><span class="hl-default"> - </span><span class="hl-number">10</span><span class="hl-default">;

</span><span class="hl-comment">// MP を消費して魔法を使い、攻撃力を上昇させた
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">MP</span><span class="hl-default"> = </span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">MP</span><span class="hl-default"> - </span><span class="hl-number">8</span><span class="hl-default">;
</span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">STR</span><span class="hl-default"> = </span><span class="hl-identifier">player</span><span class="hl-default">.</span><span class="hl-identifier">STR</span><span class="hl-default"> * </span><span class="hl-number">1.1</span><span class="hl-default">;</span></pre></div></div>
<p>構造体は変数ですので他の変数へコピーすることが可能です。ただし、数値型ではないため計算はできません。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">struct </span><span class="hl-identifier">Player player</span><span class="hl-default">;
</span><span class="hl-types">struct </span><span class="hl-identifier">Player beforeBattle</span><span class="hl-default">;

</span><span class="hl-comment">// 戦闘前のデータを保存しておく
</span><span class="hl-identifier">beforeBattle</span><span class="hl-default"> = </span><span class="hl-identifier">player</span><span class="hl-default">;</span></pre></div></div>
<p>構造体の中の変数（メンバ変数）は C++ の基本型だけではなく、別の構造体を指定することもできます。</p>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-comment">// プレイヤー
</span><span class="hl-types">struct </span><span class="hl-identifier">Player
</span><span class="hl-brackets">{
  </span><span class="hl-types">char </span><span class="hl-identifier">name</span><span class="hl-brackets">[</span><span class="hl-number">50</span><span class="hl-brackets">]</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">HP</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">MP</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">STR</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">DEF</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">AGI</span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-default">;

</span><span class="hl-comment">// パーティー
</span><span class="hl-types">struct </span><span class="hl-identifier">Party
</span><span class="hl-brackets">{
  </span><span class="hl-comment">// リーダー
  </span><span class="hl-types">struct </span><span class="hl-identifier">Player leader</span><span class="hl-code">;
  </span><span class="hl-comment">// サブリーダー
  </span><span class="hl-types">struct </span><span class="hl-identifier">Player subLeader</span><span class="hl-code">;
  </span><span class="hl-comment">// メンバー１
  </span><span class="hl-types">struct </span><span class="hl-identifier">Player member1</span><span class="hl-code">;
  </span><span class="hl-comment">// メンバー２
  </span><span class="hl-types">struct </span><span class="hl-identifier">Player member2</span><span class="hl-code">;
  </span><span class="hl-comment">// メンバー３
  </span><span class="hl-types">struct </span><span class="hl-identifier">Player member3</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>Party 構造体の中の変数（メンバ変数）として Player 構造体を使っていますので、 Player 構造体は Party 構造体より前に定義する必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/149/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

