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

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

前回これで完成なんて言ってたけど、ゲームが面白くなるかどうかはここから。
もうあとは、ゲームバランスのための微調整。


ダウンロード  Entry025.zip (2009.08.04)






宿代は、最後まで10Gではダメだろうなと思ってたから、かなり前の段階で
調整するための前フリ入れてた。

static const int stayPrice = 10;

結局使わなかったけど。
何らかのタイミングで値上げしていけるように仕込んでたけど、よく考えたら
このままだと、この宿代もセーブの対象にしないといけなくなるんだよな。

それなら、プレイヤーの足元(パラメーター)見て宿代決めてやろうかと。


main.cpp


Result TownEvent(Player& player)
{
    Result res;
    int cmd,cmdcnt = 0;
//  static int stayPrice = 10;

    cout << "\n\n街にいます。\n";

    while(1){
        cmd = 0;
        res = NONE;
        player.ShowAllStatus();
        cout << "\n1:出撃\n"
             << "2:宿屋(" << player.GetStayPrice() << "G)      体力 " << player.getShowHP() << "\n"
             << "3:体力強化(" << player.TrainingCost(THP) <<"G)\n"
             << "4:攻撃訓練(" << player.TrainingCost(TAtk) <<"G)\n"
             << "5:防御訓練(" << player.TrainingCost(TDef) <<"G)\n"
             << "6:素早さ (" << player.TrainingCost(TAgi) <<"G)\n"
             << "9:終了\n"
             << "どうする?";
        if(cmdcnt){
            cin.clear();
            cin.ignore();
        }
        cin >> cmd;
        cout << "\n";
        switch(cmd){
            case 1:     // 出撃
                res = DEPARTURE;
                break;
            case 2:     // 宿泊
                if(player.Stay())
                    Save(player);
                break;
            case 3:     // 体力強化
                player.Training(THP);
                break;
            case 4:     // 攻撃訓練
                player.Training(TAtk);
                break;
            case 5:     // 防御訓練
                player.Training(TDef);
                break;
            case 6:     // 素早さ訓練
                player.Training(TAgi);
                break;
            case 9:
                res = ABORT;
                break;
        }
        if(res!=NONE) break;
        if((++cmdcnt)>100){res = ABORT; break;}   //無限ループ防止
    }

    return res;
}




プレイヤークラス

Player.h


class Player : public Unit
{
public:
    bool Stay();                        // 宿に泊まる
    void AddMoney(int gd);              // 金額加算
    void ShowAllStatus();
    void Training(TrainingMenu tM);       // 強化訓練(3種)
    int  TrainingCost(TrainingMenu tM);   // 強化コスト
    string getShowHP();
    string GetSaveTxt();                // セーブ用の文字列を作る
    int GetStayPrice();                 // 宿代の計算
};



int Player::GetStayPrice()
{
    double sp;
    sp = (( MaxHP + (Atp+Dfp+Agi)*4)/10*((1000+Atp+Dfp+Agi)/1000));

    return(static_cast<int>(sp));
}


bool Player::Stay()
{
    int price = GetStayPrice();
    if(HP == MaxHP){
        cout << "体力満タンです。   " << getShowHP() << "\n"
             << "泊まる必要ありませんよ。\n";
    } else if(Money >= price){
        cout << Name << "は、宿に泊まった・・・\n体力が全快した。\n";
        HP = MaxHP;
        Money -= price;
        return true;
    } else {
        cout << "お金がたりませんよ!\n";
    }
    return false;
}



宿代把握してるのがメインの TownEvent()関数から Player クラスに移ったので
Stay()メソッドに宿代を知らせる必要が無くなったわけだ。
そのへんの変更だけ。


追加したGetStayPrice()は、これまた適当に感性だけで。

    sp = (( MaxHP + (Atp+Dfp+Agi)*4)/10*((1000+Atp+Dfp+Agi)/1000));

前半は、まず能力値の合計を出す。HPは他の能力の4分の1ぐらいの価値。
初期値からだったら、30+(8+5+6)×4 = 106
で、これの1割が基準。


    sp = (( MaxHP + (Atp+Dfp+Agi)*4)/10*((1000+Atp+Dfp+Agi)/1000));

これだけじゃ増加の割合が一直線すぎて面白くないようなので、ちょっと細工。
初期値だと、(1000+8+5+6)÷1000 = 1.019
この数値を掛けることで、1.02%ほど宿代を上乗せする気なんだな。

キャラが弱いうちは効いてこないけど、能力の合計が1000超える頃には
宿代が基準値の2倍になる計算。
HP1500・500・300・200で宿代1100G。

能力値上昇との兼ね合い考えたら、宿代こんなもんかなと思う。
実際プレイしてみないとやっぱりわからない、しょせんは机上の空論。




ダウンロード  Entry025.zip (2009.08.04)

そうそう。
調整中だから、プレイヤーデータの削除はコメントにしてある。
負けるまで突撃したりするから、それでいちいち消えるのもうっとおしいし。
PR


忍者ブログ [PR]
カレンダー
11 2024/12 01
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
アクセス解析
カウンター