階層図を書いてみました

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

階層図を書いてみました

#1

投稿記事 by dic » 15年前

なかなかプログラムを把握できず
仕事もやってるので、数日後にはまた最初から
プログラムを読んで理解しないといけないという立場でして

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

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

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

Ma

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

#2

投稿記事 by Ma » 15年前

このような図を簡単に生成してくれるプログラムとかあるとちょっぴり便利そうですね。

気になった点

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

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

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

dic

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

#3

投稿記事 by dic » 15年前

う~ん、たしかにUMLとフローチャートをごちゃまぜにしたら
わけがわからないですね

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

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

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

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

Ma

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

#4

投稿記事 by Ma » 15年前

あ、なるほど。
いいんじゃないですか?

Justy

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

#5

投稿記事 by Justy » 15年前

 これは UMLっぽい感じで作ったメインループ内の実装時のコールツリー的な図、
でしょうか。


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


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


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


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


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

dic

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

#6

投稿記事 by dic » 15年前

ご指摘ありがとうございます

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

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

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

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

Justy

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

#7

投稿記事 by Justy » 15年前

>実際は一回しか呼ばれませんが何回でも呼べる構造ですね
 デバッグ目的とかゲーム上の仕様によってはそういうことがあってもいいとは
思いますけどね。


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

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

dic

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

#8

投稿記事 by dic » 15年前

ある程度進めて、リリースモードで速度を見ようとしたら
リリースモードでコンパイル実行だと画像が表示されないです
デバック版のビルドでは表示されるので、どこかにバグがあるとは思うのですが
予想できそうな所は一応目を通し、チェックしたのでどこが悪いか予想つかないです
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 );
}
他に予想できそうなところはないでしょうか?

dic

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

#9

投稿記事 by dic » 15年前

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

dom

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

#10

投稿記事 by dom » 15年前

画像への相対パスが変わっているのでわないでしょうか。

dic

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

#11

投稿記事 by dic » 15年前

返答おくれました
ん~、確認しましたけど、IDE上から呼び出すのでDebugもReleaseもパスは変わらないですね

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


閉鎖

“C言語何でも質問掲示板” へ戻る