<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>ichi-ichi-ni-ni-blog</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/" />
    <link rel="self" type="application/atom+xml" href="http://blog.1122soft.com/atom.xml" />
    <id>tag:blog.1122soft.com,2008-01-06://1</id>
    <updated>2008-08-06T22:05:12Z</updated>
    <subtitle>作業メモなど。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.01</generator>

<entry>
    <title>[Etc] はてな始めた</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/08/etc.html" />
    <id>tag:blog.1122soft.com,2008://1.80</id>

    <published>2008-08-06T22:04:01Z</published>
    <updated>2008-08-06T22:05:12Z</updated>

    <summary>http://d.hatena.ne.jp/ichiichinini/...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="Etc" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p><a href="http://d.hatena.ne.jp/ichiichinini/">http://d.hatena.ne.jp/ichiichinini/</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>[C/C++] enumの列挙数</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/06/cc-enum.html" />
    <id>tag:blog.1122soft.com,2008://1.77</id>

    <published>2008-06-18T21:19:15Z</published>
    <updated>2008-06-18T21:27:03Z</updated>

    <summary><![CDATA[enumの列挙数って取得できないのかな。 /**&nbsp;* ジョイスティック...]]></summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>enumの列挙数って取得できないのかな。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* ジョイスティック用キーコード<br />&nbsp;*/<br />enum E_JOY_CODE<br />{<br />&nbsp;&nbsp;&nbsp; JOY_UP = 0,&nbsp;&nbsp;&nbsp; ///&lt; ボタン上 ※0始まりを明示<br />&nbsp;&nbsp;&nbsp; JOY_DOWN,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン下<br />&nbsp;&nbsp;&nbsp; JOY_LEFT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン左<br />&nbsp;&nbsp;&nbsp; JOY_RIGHT,&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン右<br />&nbsp;&nbsp;&nbsp; JOY_BTN1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン1<br />&nbsp;&nbsp;&nbsp; JOY_BTN2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン2<br />&nbsp;&nbsp;&nbsp; JOY_BTN3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン3<br />&nbsp;&nbsp;&nbsp; JOY_BTN4,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン4<br />&nbsp;&nbsp;&nbsp; JOY_BTN5,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン5<br />&nbsp;&nbsp;&nbsp; JOY_BTN6,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン6<br />&nbsp;&nbsp;&nbsp; JOY_CODE_END,&nbsp; ///&lt; 最終メンバ（メンバ数取得用）<br />};</p></blockquote>
<p>しょうがなく、最初の値を0って明示して、さらに最終列挙値を用意。これでJOY_CODE_ENDを見れば列挙数がわかるって細工したんだけど、他に上手いやり方ないか。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C++][GameDev] 列挙型と配列</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/06/cgamedev-2.html" />
    <id>tag:blog.1122soft.com,2008://1.76</id>

    <published>2008-06-17T21:07:12Z</published>
    <updated>2008-06-17T21:51:48Z</updated>

    <summary><![CDATA[こんな構造体より、 /**&nbsp;* ジョイスティックの入力状態&nbsp;...]]></summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="GameDev" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>こんな構造体より、</p>
<blockquote class="program">
<p>/**<br />&nbsp;* ジョイスティックの入力状態<br />&nbsp;*/<br />struct ST_JOY_STATE<br />{<br />&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp; ucJoyUp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; 上キー<br />&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp; ucJoyDown;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; 下キー <br />&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp; ucJoyLeft;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; 左キー<br />&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp; ucJoyRight;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; 右キー<br />&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp; aryucJoyBtn[6];&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; 数字キー<br />};<br />ST_JOY_STATE _stJoyState;&nbsp;&nbsp;&nbsp; ///&lt; ジョイスティックの入力状態</p></blockquote>
<p>こんな列挙型と配列使ったほうが、</p>
<blockquote class="program">
<p>/**<br />&nbsp;* ジョイスティック用キーコード<br />&nbsp;*/<br />enum E_JOY_CODE<br />{<br />&nbsp;&nbsp;&nbsp; JOY_UP,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン上<br />&nbsp;&nbsp;&nbsp; JOY_DOWN,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン下<br />&nbsp;&nbsp;&nbsp; JOY_LEFT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン左<br />&nbsp;&nbsp;&nbsp; JOY_RIGHT,&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン右<br />&nbsp;&nbsp;&nbsp; JOY_BTN1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン1<br />&nbsp;&nbsp;&nbsp; JOY_BTN2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン2<br />&nbsp;&nbsp;&nbsp; JOY_BTN3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン3<br />&nbsp;&nbsp;&nbsp; JOY_BTN4,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン4<br />&nbsp;&nbsp;&nbsp; JOY_BTN5,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン5<br />&nbsp;&nbsp;&nbsp; JOY_BTN6,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt; ボタン6<br />&nbsp;&nbsp;&nbsp; JOY_CODE_END,&nbsp; ///&lt; 最終メンバ（メンバ数取得用）<br />};</p></blockquote>
<blockquote class="program">
<p>unsigned char _aryucJoyState[JOY_CODE_END];&nbsp;&nbsp;&nbsp; ///&lt; ジョイスティックの入力状態</p></blockquote>
<p>管理しやすいような気がした。</p>
<p>上のE_JOY_CODE列挙型があれば、ボタンの情報を関連付けやすいし、そんで構造体より配列の方がコードがシンプルになる。</p>
<p>※「///&lt;」はDoxygen用のコメント</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C++] ローワーキャメルケース</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/06/c-3.html" />
    <id>tag:blog.1122soft.com,2008://1.73</id>

    <published>2008-06-11T16:38:47Z</published>
    <updated>2008-06-11T16:43:02Z</updated>

    <summary>Part3　JavaScriptに学ぶ「言語の拡張性」 - ITpro 関数はロ...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p><a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20070626/275986/?P=2">Part3　JavaScriptに学ぶ「言語の拡張性」</a> - ITpro</p>
<blockquote class="quote">
<p>関数はローワーキャメルケース（先頭が小文字のキャメルケース）になっています。これは，クラス・ベースのオブジェクト指向言語では関数（メソッド）の命名規則がローワーキャメルケースであることに準じています。</p></blockquote>
<p>オブジェクト指向言語だと、関数名はローワー<a href="http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%A1%E3%83%AB%E3%82%B1%E3%83%BC%E3%82%B9">キャメルケース</a>にするのが一般的なのか。アッパーキャメルケースにしてたわ。直さなきゃ。ひたすら一括置換だ。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C/C++][PHP][JavaScript] 改行&quot;｛&quot;と右&quot;｛&quot;</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/06/ccphpjavascript.html" />
    <id>tag:blog.1122soft.com,2008://1.71</id>

    <published>2008-06-10T13:49:24Z</published>
    <updated>2008-06-10T14:14:15Z</updated>

    <summary>if文、for文とかにつける&quot;{&quot;についての話。 C、C++のコーディングだと、...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="JavaScript" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="コーディング" label="コーディング" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="規約" label="規約" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>if文、for文とかにつける"{"についての話。</p>
<p>C、C++のコーディングだと、改行してから"{"を付ける。スクリプト言語とかWeb系の言語だと、右に"{"を付ける。もちろん規約があればそれに従う。無ければ、一般的な方に合わせる。</p>
<p>右"｛"のとき、分岐処理のコメント前に改行するかしないかですごく悩む。</p>
<p>改行"｛"だと、</p>
<blockquote class="program">
<p>// Aのとき<br />if (a == x)<br />{<br />&nbsp;&nbsp;&nbsp; FuncA();<br />&nbsp;&nbsp;&nbsp; FuncB();<br />}<br />// Bのとき<br />else if (b == x)<br />{<br />&nbsp;&nbsp;&nbsp; FuncC();<br />&nbsp;&nbsp;&nbsp; FuncD();<br />}<br />// その他<br />else<br />{<br />}</p></blockquote>
<p>特に問題なし。</p>
<p>これが右"｛"になると、</p>
<blockquote class="program">
<p>// Aのとき<br />if (a == x) {<br />&nbsp;&nbsp;&nbsp; FuncA();<br />&nbsp;&nbsp;&nbsp; FuncB();<br />// Bのとき&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ←この行の密集してる感が嫌だ<br />} else if (b == x) {<br />&nbsp;&nbsp;&nbsp; FuncC();<br />&nbsp;&nbsp;&nbsp; FuncD();<br />// その他<br />} else {<br />}</p></blockquote>
<p dir="ltr">こんな風にごちゃごちゃする。じゃあ、コメント前に改行入れようと。</p>
<blockquote class="program">
<p dir="ltr">// Aのとき<br />if (a == x) {<br />&nbsp;&nbsp;&nbsp; FuncA();<br />&nbsp;&nbsp;&nbsp; FuncB();</p>
<p dir="ltr">// Bのとき<br />} else if (b == x) {<br />&nbsp;&nbsp;&nbsp; FuncC();<br />&nbsp;&nbsp;&nbsp; FuncD();</p>
<p dir="ltr">// その他<br />} else {<br />}</p></blockquote>
<p dir="ltr">でも、コメント前改行ってことにすると、こんなときに↓</p>
<blockquote class="program">
<p dir="ltr">// Aのとき<br />if (x == a) {<br />&nbsp;&nbsp;&nbsp; if (y == i) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FuncA();<br />&nbsp;&nbsp;&nbsp; } else if (y == j) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FuncB();<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ←この不自然な改行が気持ち悪い<br />// その他<br />} else {<br />}</p></blockquote>ってことになる。だから、密集してる感が漂ってたら、改行しましょうってことにした。<br />でも、どういう基準で改行入れてるんだってことになって、、、あー、めんどくせ。。。<br />自分めんどくせ。]]>
        
    </content>
</entry>

<entry>
    <title>[C++][GameDev] 描画クラスとか</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/06/cgamedev-1.html" />
    <id>tag:blog.1122soft.com,2008://1.68</id>

    <published>2008-06-05T13:47:45Z</published>
    <updated>2008-06-05T14:07:20Z</updated>

    <summary>ゲーム処理クラスがDirectX処理クラスを直接使ってるけど、ゲーム処理も、描画...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="GameDev" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>ゲーム処理クラスがDirectX処理クラスを直接使ってるけど、ゲーム処理も、描画エンジンとかに依存せずに独立したプログラムにしたい。ということで、一つクラスをラップすることにした。[]はクラス。</p>
<p>
<div class="gothic">
<p>[DirectX Graphics処理]←――[描画]　　　　 ←┐<br />[DirectX Audio処理] 　←――[サウンド再生] ←＋―[ゲーム処理]<br />[DirectInput処理] 　　←┬―[入力制御]　　 ←┘<br />[Keyboard入力]&nbsp; 　　　←┘</p></div>
<p></p>
<p dir="ltr">ゲーム処理クラスはDirectXなんて知らない。だから、描画クラスだけいじれば、ゲームプログラムを一切変更せずに描画エンジンが切り替えられる。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C++][GameDev] DirectX処理クラスは別</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/06/cgamedev-directx.html" />
    <id>tag:blog.1122soft.com,2008://1.67</id>

    <published>2008-06-04T14:30:25Z</published>
    <updated>2008-06-04T14:43:25Z</updated>

    <summary>共通処理クラスCCommonっていうクラスを作ってて、その中でエラーログ出力関数...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="GameDev" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>共通処理クラスCCommonっていうクラスを作ってて、その中でエラーログ出力関数みたいなどこでも使うような関数を用意して、いろんなとこで使ってたんだけど、DirectX処理クラスでこの共通処理クラスを使うのは、ちょっと変な気がしてきた。</p>
<p>というのも、DirectX処理クラスは、完全にゲームとは別に独立したものっていう考えで、本来はDLLとして存在するべきものにしてある（DLLにすると逆にめんどいことがあるんで、今は敢えてDLLにしてない）。だから、今作ってるゲームに限らず、このDirectX処理クラスは汎用的に使えるようにしてある。</p>
<p>本来独立して存在するものが、ゲーム処理クラスと同じ共通処理クラスを使用してるのは変。だから、DirectX処理クラスは、共通処理クラスを使わない方がいいな。</p>
<p>そもそも共通処理クラスっていうのが抽象的すぎた。ゲーム処理用の共通クラスとでもしておくか。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C++][GameDev] エラー用トレース</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/06/cgamedev.html" />
    <id>tag:blog.1122soft.com,2008://1.66</id>

    <published>2008-06-01T15:03:20Z</published>
    <updated>2008-06-02T13:53:31Z</updated>

    <summary><![CDATA[共通処理クラスに、デバッグトレースの関数を作った。 /**&nbsp;* デバッ...]]></summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="GameDev" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="デバッグ" label="デバッグ" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="トレース" label="トレース" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>共通処理クラスに、デバッグトレースの関数を作った。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* デバッグトレース<br />&nbsp;* <br />&nbsp;* @param[in]&nbsp;&nbsp;&nbsp; a_pszFormat&nbsp;&nbsp;&nbsp; 書式<br />&nbsp;*/<br />void CCommon::Trace(const char* a_pszFormat, ...)<br />{<br />#ifdef _DEBUG<br />&nbsp;&nbsp;&nbsp; va_list&nbsp;&nbsp;&nbsp; pcParam;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 引数リスト<br />&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szTrace[512];&nbsp;&nbsp;&nbsp; // 出力文字列</p>
<p>&nbsp;&nbsp;&nbsp; // 可変引数の取得開始<br />&nbsp;&nbsp;&nbsp; va_start(pcParam, a_pszFormat);<br />&nbsp;&nbsp;&nbsp; // 出力文字列の作成<br />&nbsp;&nbsp;&nbsp; _vsnprintf(szTrace, sizeof(szTrace),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a_pszFormat, pcParam);<br />&nbsp;&nbsp;&nbsp; // 可変引数の取得終了<br />&nbsp;&nbsp;&nbsp; va_end(pcParam);</p>
<p>&nbsp;&nbsp;&nbsp; // デバッグトレース<br />&nbsp;&nbsp;&nbsp; OutputDebugString(szTrace);<br />#endif<br />}</p></blockquote>
<p>この関数はエラー発生時とかに使う。</p>
<blockquote class="program">
<p>// エラー発生時<br />if (! bRet)<br />{<br />&nbsp;&nbsp;&nbsp; CCommon::Trace("Errror: %s %s\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __FUNCTION__, pszErrorMessage);<br />}</p></blockquote>
<p>上のフォーマットだと、例えば、</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>「Errror: CDI::Init DirectInput8オブジェクトの作成に失敗」</p></blockquote>
<p>って文字列が出力されるんだけど、いろんなとこでこのトレースは使われるわけなんで、出力フォーマットは必ず統一されるようにした方がいい。</p>
<p>それで、直接トレース関数を使うわけじゃなくて、エラー発生用に使うトレース関数を別に作っといた。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* エラー用デバッグトレース<br />&nbsp;* <br />&nbsp;* @param[in]&nbsp;&nbsp;&nbsp;&nbsp;a_pszFunction&nbsp;&nbsp;&nbsp; 関数名<br />&nbsp;* @param[in]&nbsp;&nbsp;&nbsp; a_pszError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;エラーメッセージ<br />&nbsp;*/<br />void CCommon::TraceOfError(char* a_pszFunction, char* a_pszError)<br />{<br />&nbsp;&nbsp;&nbsp; CCommon::Trace("Errror: %s %s\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __FUNCTION__, pszErrorMessage);<br />}</p></blockquote>
<p>とりあえず、エラー発生した関数名とエラーメッセージだけ出力すればいいかな。ということで、エラー発生時に書く処理はこれ↓。</p>
<blockquote class="program">
<p>// エラー発生時<br />if (! bRet)<br />{<br />&nbsp;&nbsp;&nbsp; CCommon::TraceOfError(__FUNCTION__, pszErrorMessage);<br />}</p></blockquote>]]>
        
    </content>
</entry>

<entry>
    <title>[C++][GameDev] トレース、ログ、エラーメッセージ</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/05/cgame-dev.html" />
    <id>tag:blog.1122soft.com,2008://1.64</id>

    <published>2008-05-28T13:45:19Z</published>
    <updated>2008-06-01T15:02:54Z</updated>

    <summary>ゲームプログラムで使うデバッグトレース、ログ出力、エラーメッセージ表示について。...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="GameDev" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>ゲームプログラムで使うデバッグトレース、ログ出力、エラーメッセージ表示について。それぞれどういうタイミングで使用するべきか、どういう位置づけで使用するべきか、決めてみた。</p>
<p>[デバッグトレース]</p>
<ul>
<li>ファイル読み込みや、シーンの切り替えなど、重要処理や全体の処理フローがわかるようにトレースする</li>
<li>エラー発生時に、そのときの関数の名前や行数などをトレースする</li></ul>
<p>[ログ出力]</p>
<ul>
<li>エラー発生時に、そのときの関数の名前や行数などを、エラーログとして出力する</li></ul>
<p>[エラーメッセージ表示]</p>
<ul>
<li>エラー発生時に、そのことがプレイヤーにわかるよう、メッセージダイアログにて、エラーメッセージを出力する</li>
<li>基本的には、ゲーム起動時に出力する<br />例）「DirectXの初期化に失敗しました」<br />　　「画像ファイルの読み込みに失敗しました」</li></ul>
<p>重要度でいくと、</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>エラーメッセージ表示　＞　ログ出力　＞　デバッグトレース</p></blockquote>
<p dir="ltr">っていう順番かな。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C/C++] 2038年問題</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/05/cc-2038.html" />
    <id>tag:blog.1122soft.com,2008://1.59</id>

    <published>2008-05-20T14:34:12Z</published>
    <updated>2008-05-20T14:42:36Z</updated>

    <summary>Cで時刻を表すのに、time_t型を使ってるけど、その型が2038年の1月位まで...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>Cで時刻を表すのに、time_t型を使ってるけど、その型が2038年の1月位までしか対応してない。調べてみたら、2038年問題ってのがあった。</p>
<p><a href="http://ja.wikipedia.org/wiki/2038%E5%B9%B4%E5%95%8F%E9%A1%8C">2038年問題</a> - Wikipedia</p>
<blockquote class="quote">
<p>2038年1月19日3時14分7秒を越えると、この値がオーバーフローし、負と扱われるため、誤作動する可能性が高い。</p></blockquote>
<p>time_t型のサイズを増やしても、まだ問題があるらしい。</p>
<blockquote class="quote">
<p>2038年問題と同じように考えると、292277026596年に桁あふれが起こる可能性があり、これを「292277026596年問題」と呼ぶこともある。</p></blockquote>
<p>292277026596年。ニクニ、ニナナオ、ニムゴクムね。勉強になるぜ。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C/C++] エンディアンに苦しめられた</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/05/cc.html" />
    <id>tag:blog.1122soft.com,2008://1.55</id>

    <published>2008-05-13T13:21:44Z</published>
    <updated>2008-05-14T12:53:53Z</updated>

    <summary>ファイルから読み込んだバイナリデータを扱うプログラムを改造してんだけど、読み込む...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ccエンディアン" label="C C++ エンディアン" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>ファイルから読み込んだバイナリデータを扱うプログラムを改造してんだけど、読み込むファイルのデータがビッグ<a href="http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3">エンディアン</a>になってて、動かす環境は<a href="http://ja.wikipedia.org/wiki/80x86">x86系</a>でリトルエンディアンなんで。</p>
<p>1バイトだけのデータとか文字列は別にエンディアンを考慮する必要なし。1バイトずつ見る分にはひっくりかえりようがないから。2バイト以上の整数値は変換しないといけない。</p>
<blockquote class="program">
<p>memcpy(&amp;shNum, pFileData, sizeof(short));<br />memcpy(&amp;lNum, pFileData, sizeof(long));</p></blockquote>
<p>とかやったら、shNum、lNumは変換必要。そもそも、memcpy関数使わないで、エンディアン変換込みのメモリコピー関数を独自で作ればいいけど。</p>
<p>嫌だったのは、バイナリデータが構造体を表してて、それを取得するところ。構造体は、long型（4バイト）とかのメンバをめちゃくちゃ持ってた。</p>
<blockquote class="program">
<p>struct ST_TEST<br />{<br />&nbsp;&nbsp;&nbsp; long&nbsp;&nbsp;&nbsp; lDataA;<br />&nbsp;&nbsp;&nbsp; long&nbsp;&nbsp;&nbsp; lDataB;<br />&nbsp;&nbsp;&nbsp; long&nbsp;&nbsp;&nbsp; lDataC;<br />&nbsp;&nbsp;&nbsp; …<br />&nbsp;&nbsp;&nbsp; …果てなく続く（嘘）…<br />}</p></blockquote>
<p>この構造体をそのまま</p>
<blockquote class="program">
<p>memcpy(&amp;stTestData, pFileData, sizeof(ST_TEST));</p></blockquote>
<p>ってしたら、↓こんなバイナリデータが、</p>
<blockquote class="program">
<p>00&nbsp;00&nbsp;00&nbsp;01&nbsp;&nbsp;00 00 00 0A&nbsp; 00 00 00 02 …</p></blockquote>
<p>それぞれ4バイト区切りでひっくり返った値になって解釈されちゃう。↓こんな風に。</p>
<blockquote class="program">
<p>lDataA：0x01000000　※本当は0x00000001というデータで欲しい<br />lDataB：0x0A000000<br />lDataC：0x02000000<br />…</p></blockquote>
<p>というわけで、せっかく構造体として存在してるのに、わざわざメンバ一個ずつ見てエンディアン変換かけることに。めんどい。</p>
<p>リトルエンディアンって、よくいう「<a href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%C3%A5%C9%A5%CE%A5%A6%A5%CF%A5%A6">バッドノウハウ</a>」ってやつになるのかな。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C++] do～while (false)が好き</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/05/c-do.html" />
    <id>tag:blog.1122soft.com,2008://1.54</id>

    <published>2008-05-11T13:50:50Z</published>
    <updated>2008-05-13T13:04:13Z</updated>

    <summary>関数内で、do～while (false)を使うのが好き。使う人は当たり前のよう...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="c" label="C++" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>関数内で、do～while (false)を使うのが好き。<br />使う人は当たり前のように使ってるけど、この書き方が嫌いな人も結構いるっぽい。</p>
<p>メリットは、</p>
<ul>
<li>if文の多用や、それによるインデントの数を防げる</li>
<li>終了時の処理が分散しない（途中returnを無くせる）</li></ul>
<p>ってとこだと思う。</p>
<p>実際↓こんな感じになる。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* なんかの初期化関数<br />&nbsp;* <br />&nbsp;* @param[in]&nbsp;&nbsp;&nbsp; a_nIn&nbsp;&nbsp;&nbsp; 入力値<br />&nbsp;* <br />&nbsp;* @return&nbsp;&nbsp;&nbsp; 処理結果<br />&nbsp;* @retval&nbsp;&nbsp;&nbsp; true&nbsp;&nbsp;&nbsp; 成功<br />&nbsp;* @retval&nbsp;&nbsp;&nbsp; false&nbsp;&nbsp; 失敗<br />&nbsp;*/<br />bool Init(int a_nIn)<br />{<br />&nbsp;&nbsp;&nbsp; bool&nbsp;&nbsp;&nbsp; bRet = true;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; // 戻り値<br />&nbsp;&nbsp;&nbsp; char*&nbsp;&nbsp; pszError = NULL;&nbsp;&nbsp;&nbsp; // エラーメッセージ<br /><br />&nbsp;&nbsp;&nbsp; do<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // パラメータチェック<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a_nIn &lt; 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pszError = "パラメータエラー";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // オブジェクトの生成<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (! CreateObject())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pszError = "オブジェクト生成エラー";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // オブジェクト2の生成<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (! CreateObject2())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pszError = "オブジェクト2生成エラー";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; while (false);<br /><br />&nbsp;&nbsp;&nbsp; // エラーメッセージ表示<br />&nbsp;&nbsp;&nbsp; if (! bRet)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputErrorMessage(pszError);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; // ログ出力とか？必要なら<br />&nbsp;&nbsp;&nbsp; OutputLog(__FUNCTION__);<br /><br />&nbsp;&nbsp;&nbsp; return bRet;<br />}</p></blockquote>
<p>途中returnあると、終了時の処理が分散しちゃって見にくいし、管理しにくい。終了処理は一箇所にまとまってる方がいいかなと。</p>
<p>ちなみに、while文使って、</p>
<blockquote class="program">
<p>&nbsp;&nbsp;&nbsp; while (true)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // パラメータチェック<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a_nIn &lt; 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pszError = "パラメータエラー";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bRet = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; …（略）…<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp; }</p></blockquote>
<p>でもいいかと思ったけど、会社の人と話したときに、</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>「breakは忘れるから怖い」</p></blockquote>
<p>って言ってた。while(true)でbreak忘れて無限ループになるのが怖いと。<br />do～while文だったら、最後のwhile忘れたらコンパイルがそもそもできないし、その最後のwhileにfalseじゃなくて敢えてtrueを指定するって間違いは無いと思う。<br />でも、while文のときは、while(true)の中で最後にbreak忘れても、コンパイル通っちゃう。そのbreakだけ忘れるとかだったらやっちゃいそう。</p>
<p>あ、goto文は存在しないことにしときます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[C++] コンストラクタの初期化リストと配列</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/04/c-1.html" />
    <id>tag:blog.1122soft.com,2008://1.46</id>

    <published>2008-04-29T21:56:29Z</published>
    <updated>2008-05-11T13:41:22Z</updated>

    <summary>コンストラクタでメンバ変数を初期化する際には、代入じゃなくて、初期化リストを使う...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="C/C++" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="初期化" label="初期化" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>コンストラクタでメンバ変数を初期化する際には、代入じゃなくて、初期化リストを使う。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* CSampleクラス<br />&nbsp;*&nbsp;<br />&nbsp;* @date 2008/04/30<br />&nbsp;*/<br />class CSample<br />{<br />&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp; _nTest;<br />&nbsp;&nbsp;&nbsp;&nbsp;int*&nbsp;&nbsp; _pnTest;<br />&nbsp;&nbsp;&nbsp; …<br />}&nbsp;</p></blockquote>
<p>こんなメンバ変数持ったクラスだったら、初期化リスト使った初期化はこうなる。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* コンストラクタ<br />&nbsp;*/<br />CSample::CSample():<br />&nbsp;&nbsp;&nbsp;&nbsp;_nTest(0),<br />&nbsp;&nbsp;&nbsp; _pnTest(NULL)<br />{<br />}</p></blockquote>
<p>で、メンバ変数が配列とか構造体のときは、どうすんのかと思って調べたけど、見つからなかった。試しに次のメンバ変数を初期化リストに入れてデバッグしてみた。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* CSampleクラス<br />&nbsp;* <br />&nbsp;* @date 2008/04/30<br />&nbsp;*/<br />class CSample<br />{<br />&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _arynTest[100];&nbsp;&nbsp;&nbsp; ←配列<br />&nbsp;&nbsp;&nbsp; ST_TEST&nbsp;&nbsp;&nbsp; _stTest;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ←構造体<br />&nbsp;&nbsp;&nbsp; …<br />} </p></blockquote>
<p>初期値を引数に入れようとするとエラーになったから、空にしてビルドした。</p>
<blockquote class="program">
<p>/**<br />&nbsp;* コンストラクタ<br />&nbsp;*/<br />CSample::CSample():<br />&nbsp;&nbsp;&nbsp; _arynTest(),<br />&nbsp;&nbsp;&nbsp; _stTest()<br />{<br />}</p></blockquote>
<p>で、このとき構造体"_stTest"は0埋めされてたから、とりあえず構造体は0で初期化されるっぽい。ただ配列"_arynTest"は0埋めとかされてなかった。この方法だと配列は初期化できないみたい。</p>
<p>配列のメンバ変数の初期化は、普通に{}内で、memsetとか使うしかないか。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[CakePHP] DB設計ができない</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/04/cakephp-db.html" />
    <id>tag:blog.1122soft.com,2008://1.41</id>

    <published>2008-04-22T14:09:18Z</published>
    <updated>2008-04-22T14:38:28Z</updated>

    <summary>CakePHPでWebアプリ作り。ということで、まず必要なのは、DB構成かな。 ...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="CakePHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cakephp" label="CakePHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="db" label="DB" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>CakePHPでWebアプリ作り。ということで、まず必要なのは、DB構成かな。</p>
<p>で、DB設計と思ったけど、、、</p>
<p>…できない。</p>
<p>DBがらみの仕事やったことないからな。そりゃまともな設計できないな。</p>
<p>そんな低いレベルからスタートかー。</p>
<p>CakePHPの前に、データベースというものの勉強を始めたいと思います。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[CakePHP] 命名規約</title>
    <link rel="alternate" type="text/html" href="http://blog.1122soft.com/2008/04/php-cakephp-1.html" />
    <id>tag:blog.1122soft.com,2008://1.40</id>

    <published>2008-04-22T13:40:18Z</published>
    <updated>2008-04-22T13:55:14Z</updated>

    <summary>CakePHPの規約で、モデルのクラス名は英語の単数形、テーブル名は複数形とかっ...</summary>
    <author>
        <name>1122</name>
        
    </author>
    
        <category term="CakePHP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cakephp" label="CakePHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="規約" label="規約" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://blog.1122soft.com/">
        <![CDATA[<p>CakePHPの規約で、モデルのクラス名は英語の単数形、テーブル名は複数形とかってあるけど、じゃあ、Fishは本当にFishでいいのかってちょっと不安になる。</p>
<p>そんなときに便利なのがあった。</p>
<p><a href="http://www.cpa-lab.com/tech2/inflects/">CakePHP 規約ワードメーカー</a></p>]]>
        
    </content>
</entry>

</feed>
