ページ 11

階層図を書いてみました

Posted: 2010年4月10日(土) 10:17
by dic
なかなかプログラムを把握できず
仕事もやってるので、数日後にはまた最初から
プログラムを読んで理解しないといけないという立場でして

図だったら比較的理解しやすい(修正しやすい)と思い
UML図とフローチャートを組み合わせて
図を作ってみました

シューティングとしては4面までのものです

なにか欠落してたり、ここはこうしたほうがいいんでは?
などあったら、指摘してくれるとありがたいです

Re:階層図を書いてみました

Posted: 2010年4月10日(土) 11:02
by Ma
このような図を簡単に生成してくれるプログラムとかあるとちょっぴり便利そうですね。

気になった点

ステージの処理の分岐後、ゲームクリアかゲームオーバー画面にいくようですが、
両方当てはまらない場合、つまりプレイ中の場合はステージの処理のノードから分岐にいかずに、メインループにもどる って感じで正しいのでしょうか?

いまのままだと、初見では必ず分岐にいくと思ってしまうのですが、しかたないんでしょうか。
分岐をもうひとつ作って、メインループに戻る と特殊なノードを作るぐらいしか思いつかない…。
同様のことがステージ初期化の分岐でも起きてます。

*追記
UML図については知らないので、無知なこといってるかもしれません(汗 画像

Re:階層図を書いてみました

Posted: 2010年4月10日(土) 15:24
by dic
う~ん、たしかにUMLとフローチャートをごちゃまぜにしたら
わけがわからないですね

>メインループに戻る
関数の呼び出し順番だけ表現してるだけで
メインループには全部戻ってくるようになってます

ステージ初期化の分岐では
敵や弾の画像など、同じ変数を使うので
あとはそのステージ特有の変数の初期化だけですむのです
それに初期化だけなので一回呼び出すだけでいいんで
ここもswitchで分けました

このUMLはクラス図と呼ばれるもので
アクティビティ図という表記方法もあるんで
アクティビティ図にしてみたらスッキリしました

UMLの知識はあるんですが、支払がクレジットカードのみなんで
UMLの資格が取れないんです・・・orz

Re:階層図を書いてみました

Posted: 2010年4月10日(土) 19:23
by Ma
あ、なるほど。
いいんじゃないですか?

Re:階層図を書いてみました

Posted: 2010年4月10日(土) 19:54
by Justy
 これは UMLっぽい感じで作ったメインループ内の実装時のコールツリー的な図、
でしょうか。


 ゲームの仕様が出ていないので欠落については判りません。
 おかしなところ……も仕様がわからないので本当におかしいのかどうか
判別が難しいのですが、気になるところ・不明点などを少し挙げてみます。


・ システムの初期化と解放
 メインループの中にあるようですが、ループ内でシステムの初期化と解放を
何度も繰り返す意図がある、ということでしょうか?


・ ロード画面
 何のロード画面か明記されていないので汎用のロード画面だと思いますが、
だとすると裏で何の処理が走るかは不定(例えばステージ初期化中だとか)に
なりますので、この図の中に現れるのは不自然な気がします。


・ サブシステム関連
 メインループにサウンドとかファイルシステムとかペリフェラル関連とかの定型処理が
含まれていませんが、これは既定なので省略されているということなのでしょうか?


>UMLの資格が取れないんです・
 OMGとか UMTPのとかはクレジット以外(コンビニとか)も受け付けてたはずですよ。
 それ以外の資格でしょうか?

Re:階層図を書いてみました

Posted: 2010年4月10日(土) 20:56
by dic
ご指摘ありがとうございます

>・ システムの初期化と解放
実際は一回しか呼ばれませんが何回でも呼べる構造ですね
改良しました

>・ ロード画面
シングルスレッドなので、同期の問題はないです
ロードって、セーブデータの読み込みのことです
色々関連付けできますね、すいません

>・ サブシステム関連
そうですね、省略しました

>UMLの資格が取れないんです
う、そうなんですか?
ホームページで調べてみましたがわからなかったので
メールで問い合わせてみました
返答待ちです
画像

Re:階層図を書いてみました

Posted: 2010年4月10日(土) 23:25
by Justy
>実際は一回しか呼ばれませんが何回でも呼べる構造ですね
 デバッグ目的とかゲーム上の仕様によってはそういうことがあってもいいとは
思いますけどね。


>ロードって、セーブデータの読み込みのことです
 あー、なるほど。セーブ・ロードのロード画面でしたか。
 失礼しました。

 新しい図の方も拝見しました。
 後は特に問題はないと思います。

リリースモードだと画像がでない(オリジナルライブラリ使用

Posted: 2010年4月17日(土) 17:57
by dic
ある程度進めて、リリースモードで速度を見ようとしたら
リリースモードでコンパイル実行だと画像が表示されないです
デバック版のビルドでは表示されるので、どこかにバグがあるとは思うのですが
予想できそうな所は一応目を通し、チェックしたのでどこが悪いか予想つかないです
pSurface -> 初期化済み
pBack -> バックバッファー初期化済み
void    DXDRAW3::Blt( LPDIRECTDRAWSURFACE pSurface, RECT src, RECT dest )
{
    if( !bReady )
        return;

    HRESULT    h;

    if( pSurface==NULL ){
        gLogdraw.Put( "pSurface==NULL.\n" );
        return;
    }

    h = pBack->Blt( &dest, pSurface, &src, DDBLT_KEYSRC | DDBLT_WAIT, NULL );

    if( h!=DD_OK )
    {
        if( h==DDERR_INVALIDRECT )
        {
// DDERR_INVALIDRECT に入る
            char    str[80];
            wsprintf( str, "ERR : src:(%d,%d)-(%d,%d)  dest:(%d,%d)-(%d,%d)\n",
                src.left, src.top, src.right, src.bottom,
                dest.left, dest.top, dest.right, dest.bottom );
            OutputDebugString( str );

        }
        else
            ddErr_(h);
    }
}

void hoge()
{
    //    背景を描画
    SetRect( &src, 0, 0, 800, 600 );
    SetRect( &dest, 0, 0, 800, 600 );
    DXDRAW3::Instance()->Blt( g_iImgBack01, src, dest );
}
他に予想できそうなところはないでしょうか?

Re:リリースモードだと画像がでない(オリジナルライブラリ使用

Posted: 2010年4月17日(土) 18:02
by dic
ちなみに
RECT    src, dest;
    SetRect( &src, 0, 0, 640, 480 );
    SetRect( &dest, 0, 0, 640, 480 );
    DXDRAW3::Instance()->Blt( g_iTitle01, src, dest );
これは動くので、LPDIRECTDRAWオブジェクトの大きさが・・・?
とは思ってはいます

Re:リリースモードだと画像がでない(オリジナルライブラリ使用

Posted: 2010年4月18日(日) 20:39
by dom
画像への相対パスが変わっているのでわないでしょうか。

Re:リリースモードだと画像がでない(オリジナルライブラリ使用

Posted: 2010年4月21日(水) 16:30
by dic
返答おくれました
ん~、確認しましたけど、IDE上から呼び出すのでDebugもReleaseもパスは変わらないですね

回答ありがとうございました

Re:リリースモードだと画像がでない(オリジナルライブラリ使用

Posted: 2010年4月21日(水) 16:34
by dic
後回しってことで解決押しておきます