<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/gamexprogram/">
    <title>ProgramingTips</title>
    <link>http://w.atwiki.jp/gamexprogram/</link>
    <atom:link href="https://w.atwiki.jp/gamexprogram/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>ProgramingTips</description>

    <dc:language>ja</dc:language>
    <dc:date>2008-03-01T08:52:09+09:00</dc:date>
    <utime>1204329129</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/47.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/46.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/45.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/44.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/43.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/42.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/41.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/40.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/39.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/gamexprogram/pages/38.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/47.html">
    <title>DirectX</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/47.html</link>
    <description>
      *DirectX
**行列関連

 D3DXMatrixIdentity( D3DXMATRIX *out )
行列を単位行列にする    </description>
    <dc:date>2008-03-01T08:52:09+09:00</dc:date>
    <utime>1204329129</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/46.html">
    <title>複数弾を撃つ</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/46.html</link>
    <description>
      *[[シューティング]]&gt;複数の弾を撃つ

前回は、一つの弾しか撃つことができなかったので、
今回は、複数の[[弾を撃つ]]ようにしてみましょう。

**ソースコード
[[shot2.cpp&gt;http://www26.atwiki.jp/gamexprogram/pub/shot2.cpp]]
[[function2.h&gt;http://www26.atwiki.jp/gamexprogram/pub/function2.h]]
[[function2.cpp&gt;http://www26.atwiki.jp/gamexprogram/pub/function2.cpp]]

**解説

 if(LunaPad::GetState(0, PAD_STATE_HOLD, PAD_BUTTON_01) )
 {
 	for(int i = 0;i &lt; BULLET_MAX;i++)
 	{
 		if(!bullet[i].IsExist)
 		{
 			bullet[i].IsExist = TRUE;
 			bullet[i].posx = player.posx;
 			bullet[i].posy = player.posy;
 			break;
 		}
 	}
 }
ここが、複数弾を撃つキモとなる部分です。
一番重要なのは、[[for文]]の途中に入り込んでいる
break文です。
このbreak文を書くことで、一回の入力ごとに
一つの弾が出るようになっています。
もしこのbreak文を書かなかったら、同時に
BULLET_MAX(今は10)個分の弾が描画されてしまい、一つの弾しか
描画されていないように見えるはずです。

&lt;[[シューティング]]に戻る    </description>
    <dc:date>2007-08-13T10:04:33+09:00</dc:date>
    <utime>1186967073</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/45.html">
    <title>弾を撃つ</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/45.html</link>
    <description>
      *[[シューティング]]&gt;弾を撃つ

弾を撃つ処理です。

**ソースコード
[[shot1.cpp&gt;http://www26.atwiki.jp/gamexprogram/pub/shot1.cpp]]
[[function2.h&gt;http://www26.atwiki.jp/gamexprogram/pub/function2.h]]
[[function2.cpp&gt;http://www26.atwiki.jp/gamexprogram/pub/function2.cpp]]

**解説

 if(LunaPad::GetState(0, PAD_STATE_HOLD, PAD_BUTTON_01) )
 {
 	if(!bullet.IsExist)
 	{
 		bullet.IsExist = TRUE;
 		bullet.posx = player.posx;
 		bullet.posy = player.posy;
 	}
 }
ショットする処理です。
弾が存在していないとき、弾の存在フラグをONにして、
プレイヤーの座標から出るようにしています。

 if(bullet.IsExist)
 {
 	bullet.posy -= bullet.speed;
 }
弾が存在しているときのみ、弾の座標を進めます。

 if(bullet.posy &lt; 0)
 {
 	bullet.IsExist = FALSE;
 }
 
弾が画面外に行ったとき、弾の存在フラグをOFFにしています。

 if(bullet.IsExist)
 {
 	/*描画*/
 	LunaTexture::Draw(bullet.lTex, &amp;bullet.Dst, &amp;bullet.Src, COLOR_BASE);
 }
 
弾が存在している時のみ、弾を描画するようにしています。

&lt;[[シューティング]]に戻る    </description>
    <dc:date>2007-07-25T16:28:58+09:00</dc:date>
    <utime>1185348538</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/44.html">
    <title>シューティング</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/44.html</link>
    <description>
      *シューティング
シューティングゲーム用の処理です。

-[[弾を撃つ]]
-[[複数弾を撃つ]]    </description>
    <dc:date>2007-08-13T10:03:09+09:00</dc:date>
    <utime>1186966989</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/43.html">
    <title>ポインタ3</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/43.html</link>
    <description>
      *[[C言語]]&gt;ポインタ3

3回目は、構造体を使ってポインタを説明します。

**例文
 //================================================
 //include
 //================================================
 #include &lt;stdio.h&gt;
 
 //================================================
 //define
 //================================================
 #define P_AT 4 //自分の攻撃力
 #define P_DEF 2//自分の防御力
 #define E_AT 2//敵の攻撃力
 #define E_DEF 1//敵の防御力
 
 //================================================
 //struct
 //================================================
 struct tagChara
 {
 	char *name;//名前
 	int attack;//攻撃力
 	int defence;//防御力
 };
 
 //================================================
 //関数のプロトタイプ宣言
 //================================================
 void SetStatus(struct tagChara *chara, char *name, int attack, int defence);//ステータスのセット
 void DispStatus(struct tagChara *chara);//ステータスの表示
 
 //================================================
 //メイン関数
 //=============================================    </description>
    <dc:date>2007-07-18T12:20:14+09:00</dc:date>
    <utime>1184728814</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/42.html">
    <title>ポインタ2</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/42.html</link>
    <description>
      *[[C言語]]&gt;ポインタ2

2回目は、関数を使ってポインタを説明します。

**例文
 //================================================
 //include
 //================================================
 #include &lt;stdio.h&gt;
 
 //================================================
 //struct
 //================================================
 struct tagChara
 {
 	int attack;//攻撃力
 	int defence;//防御力
 };
 
 //================================================
 //関数のプロトタイプ宣言
 //================================================
 void SetStatus(int *attack, int *defence);//ステータスセット
 
 //================================================
 //メイン関数
 //================================================
 int main(void)
 {
 	struct tagChara player;
 
 	/*ステータスセット*/
 	SetStatus(&amp;player.attack, &amp;player.defence);
 	
 	[[printf]](&quot;攻撃力:%d\t&quot;, player.attack);
 	printf(&quot;防御力:%d&quot;, player.defence);
 	
 	return 0;
 } 
 
 //================================================
 //ステータスセット
 //=================================    </description>
    <dc:date>2007-07-11T17:27:20+09:00</dc:date>
    <utime>1184142440</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/41.html">
    <title>ポインタ1</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/41.html</link>
    <description>
      *[[C言語]]&gt;ポインタ1
[[C言語]]で最大の難関と言われるポインタです。

**使用方法
 [[データ型]] *変数名;
変数前に*(アスタリスク)をつけることでポインタを指します。
 
**例文
 //================================================
 //include
 //================================================
 #include &lt;stdio.h&gt;
 //================================================
 //メイン関数
 //================================================
 int main(void)
 {
 	int a = 1;
 	int *p;
 	
 	p = &amp;a;//ポインタにアドレスを入れる
 	
 	[[printf]](&quot;aの変数のアドレスは%p\n&quot;, &amp;a);
 	printf(&quot;aの変数内の数値は%d\n&quot;, a);
 	
 	printf(&quot;pの変数のアドレスは%p\n&quot;, p);
 	printf(&quot;pの変数内の数値は%d&quot;, *p);
 	
 	return 0;
 }

**実行結果
&amp;ref(pointa.png)

**解説
 int *p;
pという名前のポインタを宣言しています。

 p = &amp;a;
ポインタのアドレスを代入しています。

 printf(&quot;aの変数のアドレスは%p\n&quot;, &amp;a);
%pはアドレスを表示させるものです。
そして、アドレスを示すので変数の前に&amp;をつけています。

 printf(&quot;pの変数のアドレスは%p\n&quot;, p);
 printf(&quot;pの変数内の数値は%d&quot;, *p);
ポインタにアドレスを入れた場合は、数値とアドレスを
見る方法が変わります。
アドレスの場合は、前に何も付けずに、
数値の場合は、*を付けています。

ややこしいので、少し表にしてみました。
|普通の変数の場合|数値|何も付けない|アドレス|前に&amp;|
|ポインタの場合|数値|前に*|アドレス|何    </description>
    <dc:date>2007-07-04T16:57:58+09:00</dc:date>
    <utime>1183535878</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/40.html">
    <title>関数2</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/40.html</link>
    <description>
      *[[C言語]]&gt;関数2

今回説明するのは戻り値を使った関数です。

*例文
 //===============================================
 //include
 //===============================================
 #include &lt;stdio.h&gt;
 
 //===============================================
 //関数のプロトタイプ宣言
 //===============================================
 void Initialize();//初期化関数
 int CalcDamage(int at, int def);//ダメージ計算
 
 //===============================================
 //struct
 //===============================================
 struct CharaData
 {
 	int m_attack;//攻撃力
 	int m_defence;//防御力
 };
 
 //===============================================
 //variable
 //===============================================
 
 struct CharaData player;
 struct CharaData enemy;
 
 //===============================================
 //メイン関数
 //===============================================
 int main(void)
 {
 	int damage;//ダメージ値
 	
 	Initialize();
 	
 	damage = CalcDamage(player.m_attack, enemy.m_defence);
 	
 	[[printf    </description>
    <dc:date>2007-06-13T17:45:16+09:00</dc:date>
    <utime>1181724316</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/39.html">
    <title>関数1</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/39.html</link>
    <description>
      *[[C言語]]&gt;関数1

**関数とは
数学の関数を思い出して頂くと、ちょっとわかりやすいのですかね…
y=f(x)という関数があったら、引数(ひきすう)のxによって、yの値が変わるというものです。
プログラムでも、まあ似たようなものだと考えていてください。

**使用方法1
 型名 関数名(引数);
 
 int main(void)
 {
 	……
 }
 
 型名 関数名(引数)
 {
 	……
 }
まず、関数名のプロトタイプ宣言というものを行ってから、
実際に関数の内容を書いていく方法です。
プロトタイプ宣言とは、この関数を使いますよ…
とあらかじめ宣言しておくものです。
こちらの方法がメジャーな方法です。

**使用方法2
 型名 関数名(引数)
 {
 
 }
 
 int main(void)
 {
 	…
 }
メイン関数の前に処理内容を書くこともできます。
こちらはいろいろ不便なことがあるので、なるべく
この書き方は避けましょう。

**例文
 //===============================================
 //include
 //===============================================
 #include &lt;stdio.h&gt;
 
 //===============================================
 //関数のプロトタイプ宣言
 //===============================================
 void Initialize(void);//変数の初期化
 void DispStatus(char *name, int hp, int attack, int defence);//ステータス表示 
 
 //===============================================
 //struct
 //===============================================
 struct CharaData
 {
 	char *m_nam    </description>
    <dc:date>2007-06-06T18:08:52+09:00</dc:date>
    <utime>1181120932</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/gamexprogram/pages/38.html">
    <title>配列3</title>
    <link>https://w.atwiki.jp/gamexprogram/pages/38.html</link>
    <description>
      *[[C言語]]&gt;配列3

今回説明するのは二次元配列です。

**配列イメージ
 |a[0][0]|a[0][1]|…|
 |a[1][0]|a[1][1]|…|

**使用方法
 型名 変数[要素名][要素名] =
 {
 	…,
 };

**例文
 //================================================
 //include
 //================================================
 #include &lt;stdio.h&gt;
 //================================================
 //define
 //================================================
 #define MAP_WIDTH  5
 #define MAP_HEIGHT 5
 
 //================================================
 //enum
 //================================================
 [[enum]]
 {
 	MAP_FLAT,
 	MAP_SEA,
 	MAP_MOUNT,
 	MAP_FLOW,
 	MAP_HILL,
 };
 
 //================================================
 //メイン関数
 //================================================
 int main(void)
 {
 	int i = 0;
 	int j = 0;
 
 	/*マップデータ*/
 	int MapData[MAP_HEIGHT][MAP_WIDTH] =
 	{
 		0, 1, 2, 3, 4,
 		1, 2, 3, 4, 0,
 		2, 3, 4, 0, 1,
 		3, 4, 0, 1, 2,
 		4, 0, 1, 2, 3,
 	};
 	
 	for(i = 0;i &lt; M    </description>
    <dc:date>2007-06-13T17:04:26+09:00</dc:date>
    <utime>1181721866</utime>
  </item>
  </rdf:RDF>
