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

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

朝のやる気の無さはどこへやら。なんだか、すごくやりとげた感。
もう、詰まるところは無い。ノンストップでゴールまで突っ走る!




ダウンロード  Entry022.zip (2009.08.02)

あと残ってること
・プレイデータのセーブ・ロード
・敵キャラ一覧を外部ファイルからロードできるように。
・薬草を購入、戦闘中に回復。これはいらんか?
・戦闘中「逃亡」のリスク導入。
・それに伴う、フィールド探索の流れを変更。これもいらんか?

ファイルアクセスまわり整備したら、ひとまず完成かもしれんね。

・かいしんのいちげき
・「素早さ」による回避判定
・魔法とか敵攻撃バリエーションの追加
・回復魔法

このへんまで気をまわさなくても十分遊べる気がする。



main.cpp


Result InputBattleOrder()
{
    Result res = NONE;
    int cmd,cmdcnt = 0;

    while(1){
        cout << "どうする?(1:攻撃 2:逃げる):";
        if(cmdcnt){ cin.clear(); cin.ignore(); }
        cin >> cmd;
        cout << "\n";

        if(cmd == 1) { res = ATTACK;  break;}
        if(cmd == 2) { res = RUNAWAY; break;}
        if(cmd == 9) { res = ABORT;   break;}
        if((++cmdcnt)>10){res = ABORT;break;}   //無限ループ防止
    }
    return res;
}


Result Battle(Player &player, Unit &enemy)
{
    int cnt = 1;
    Result res;
    list<OrderList> order;
    list<OrderList>::iterator p;

    while(1){
        order.clear();
        Sleep(200);
        player.ShowStatus();
        enemy.ShowStatus();
        res = InputBattleOrder();
        if(res == ABORT) break;
        if(res == RUNAWAY){
            cout << player.getName() << "は逃げ出した!\n";
            break;
        }


        Unit * pPlayer = &player;
        Unit * pEnemy = &enemy;

        order.push_back(OrderList(player.GetActionPoint(),pPlayer,pEnemy));
        order.push_back(OrderList(enemy.GetActionPoint(),pEnemy,pPlayer));
        order.sort();

        for(p=order.begin(); p!=order.end(); p++)
            if(pNormalAttack(p->Arry,p->Other)) break;

        if(enemy.isDead()){res = WIN;  break;}
        if(player.isDead()){res = LOSE;  break;}


        if((++cnt)>100)break;       // 無条件ループなので、無限ループ防止
    }

    return res;
}




Battle()関数から入力受け付けを外に出してみた。
分割しただけだけど、これぐらいの長さなら見た目で処理の流れを把握できると思う。
後半ちょっと間延びしてる気がしないでもないけど、ソートのためだけにまた Unit& 引数を
ふたつ受け渡すのも間抜けな感じ。

せっかく、入力受け付けで使ってた playerインスタンスをぜんぶ追い出して、入力側に情報を
渡さないように気を使って、呼び出し元でメッセージ作るように変更したというのに。



ダウンロード  Entry022.zip (2009.08.02)



PR


忍者ブログ [PR]
カレンダー
03 2025/04 05
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
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター