忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[25] [24] [23] [22] [21] [20] [19] [18] [17] [16] [15]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

あんさん、ほんまスッキリやで。
関数はひとつが30行程度に収まってる、今回ぐらいの長さがちょうどいい。


ダウンロードEntry014.zip (2009.07.31)


ほんとは前のエントリでいっしょに済ましてもよかった内容。


main.cpp

enum Result
{


    UNKNOWN         // 不明
};

const int MonsterMaxNum = 5;

void InitPlayer(Unit &player)
{



Result Patrol(Unit &player, Unit (&eList)[MonsterMaxNum])
{
    Result res;
    Unit enemy;

    cout << player.getName() << "は、街を出て荒野に向かった。\n";

    for(int i=0;i<MonsterMaxNum;++i)
    {
        Sleep(800);
        enemy = eList[i];
        cout << "\n" << enemy.getName() << "が あらわれた!\n";
        res = Battle(player,enemy);
        if(res==WIN){         // プレイヤー勝利
            cout << "勝ち。\n";
            player.AddMoney(enemy.GetMoney());
        } else break;
    }
    if(res==WIN){
        // 戦闘勝利で終了してるってことは、大勝利の予感
        cout << "\n\n*+*+*  完 全 勝 利 !!  *+*+*\n";
        cout << "勇者 " << player.getName() << " の名を永遠に称えるがよい。\n\n";
        res = ABORT;
    }
    if(res==LOSE){
        cout << player.getName() << " は死亡した。\n\n-GAME OVER-\n";
        res = ABORT;
    }
    return res;
}


int main()
{
    Result res;
    Unit player,eList[MonsterMaxNum];

    srand(static_cast<unsigned int>(time(NULL)));
   
    InitPlayer(player);
    InitEnemyList(eList);

    while(1)
    {
        // 街
        res = TownEvent(player);
        if(res==ABORT) break;

        // 戦闘
        res = Patrol(player,eList);
        if(res==ABORT) break;    // 「終了」

    }

    cout << "\n\n終了。" << endl;

    Sleep(1500);

//    int hoge;
//    cin >> hoge;    // なんでもいいから最後に入力待ち

    return 0;
}



Patrol() 関数は、メインの中の無限ループの中の下半分。
の!の!の!の!
肩のうしろの2本のゴボウのまんなかのスネ毛の下のロココ調の右 !!!
「の」ばっかり使うな! って怒られた記憶。
とはいっても言い換えが身についてるんで、面白がって出さない限りは俺の文章読みにくく
なってないと思ってる。

終了条件あたりを、ちょちょいと変更。
「今、闘ってる敵」の Unit enemy は、メインにはいらないね。
メイン側での宣言消して、Patrol 関数に持ってきた。

あとちょこっと、ウェイト入れるタイミングとかメッセージの追加とか。
重要な問題だけど、今までVisualStudioのデバッグモードで遊んでたから気がつかなかった。
今まで「終了。」が見えなかったんだよな。終わるときは問答無用でベルサッサ。


メインのほうは、おかげさまですっきり。
このゲームの内容を箇条書きにしたら、

1.初期化
2.街
3.荒野へ旅立つ。戦闘。

こんな感じじゃないかと思う。
メインを見た感じ、まさにこの箇条書きそのものに見えないかい?
いちいちコメント入れておかなくても、関数名が語りかけます。十万石まんじゅう。
箇条書きよりも、簡単なフローチャートにしたら、もっとフローチャートそのままに見える。


メインの終了処理、なんでもいいからひとつ入力受け付けようと付け足してみたけど、
これでは何か文字ひとつ入れないと終わってくれない。
エンターキー空押しでは反応してくれない。なんかひっかかる。
で、Sleep() 長めに取ってみた。


そろそろようやく、プレイヤーの成長(を金で買う)システム導入になるかな。
このままではゴブリン大将に勝てない。
前は何回か勝った記憶あるんだけどなあ。そのへん何も変わらないのに、最近さっぱり。


もういっこ、マジックナンバーの討伐。

今までモンスターの数を決め打ちで「5」にしてたけど、MonsterMaxNum とか長ったらしい名前に
しておいた。
こうしておけば、モンスターの数を増やしたくなったとき、今までならモンスターの数を使ってたところ
全部見直さないといけなかったのが、プログラム冒頭の MMN を変えるだけで済む。
あっちは10、こっちは5 みたいなつまらん見落としバグを出さなくて済むようになる。


ダウンロードEntry014.zip (2009.07.31)
PR


忍者ブログ [PR]
カレンダー
02 2025/03 04
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター