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

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

破綻しておるのう。
HP100、能力30までぐらいはおいしくいただけたのに。

こんな出来で、人のいるところに一般公開なんて出来やしねえ。
スタジオ借りて練習してるだけなら、恥さらしな俺の歌を聞いてるのはせいぜい
スタジオ受付のねーちゃんぐらいだけど、まだ夜の駅前に出て弾き語りするような
段階じゃねえってところか。


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





チートで作った HP1500 500-300-200 のキャラ、ここからHPを3回育てたら
1900まで育ってしまって笑えた。
攻撃力なんて 500 が 503 になったところで誤差程度しか変わらないのに。

ここからなら、せいぜい1回の訓練で 50程度の上昇にしたい。
他の能力も1割基準かなあ。1割基準とか言ってると、上がってきたら
さっきのHPの二の舞だし。

上昇値をパラメーターから割り算で減額補正していこうかな。
20あたりから2づつ増えるようになってもいい。
+5%計算にしたら、500のとき1回で25か。ちょっと大きすぎるけど
こんなもんでもいいのかな?

成長が速すぎるなら訓練の値段を上げるとか。
サイフ的にちょっとフンパツして訓練受けてみて、相応の効果を得られるのなら
喜びはじゅうぶんあるか。

ちょっと上方補正気にしつつ、組み込んでみる。
どう考えても、HP伸びすぎだなあ。
弱いうちはこんな感じでよかったんだけど。


      imp = (Atp/20+1)/(Atp<100 ? 1 : Atp/100);
      Atp += imp;



3項演算子、条件演算子なんて使ってみる。
使い方は

    条件A ? B : C;
   
が基本パターン。というかこういう使い方。
条件Aを満たしているときには Bの処理を。満たしてなければ Cの処理。
二つの数を受けて大きいほうの数を返すとかいうとき、

// 大きいほうの数を返す
int isMax(int A, Int B){
    if( A > B){
        return A;
    } else {
        return B;
    }
}

int isMaxWith3(int A, int B){
    return( A>B ? A : B );
}


このふたつの関数は同じことをしてる。
AがBより大きいときはAを返す。Bのほうが大きいときはBを返す。

この3項演算子をうまく使えば、プログラムはすっきりする。
ただ、安易に使いすぎたらプログラムの流れをを目で追うのが難しくなるので
上のように if文を並べて平易に書くのもいい。



話を戻して、このとき Atp500 で、25 / 5 で5ポイントの増加かあ。
もうちょっとだけ上げてみる。

      imp = (Atp/15+1)/(Atp<100 ? 1 : Atp/100);
      Atp += imp;



ほんとにちょっとだけだあ!
これで、Atp500 のとき +6ポイント、3回目で+7ポイントの節目、ここから
10回ぐらいで+8ポイントに上昇。
これぐらいの伸び率だと気持ちいいな。

HPも、この方向性で補正かけてみる。
ついでに、変数imp を整数型から実数型にして、結果が出てから整数型に丸める
方式にする。
この方法、俺は好きだ。

    double imp;
    :
    :

    case TAtk:
        imp = (Atp/15+1)/(Atp<100 ? 1 : Atp/100);
        Atp += static_cast<nt>(imp);
        break;



動かしてみる。
データはもちろん?改ざんしたチートキャラだ。金だけは腐るほどあるぜ。

ふむ・・・鍛えてると上昇値が巻き戻ることがあるなあ。
ちょっと気になるかな。
放置しててもいいのかな。

気になるところなので、double型にキャストしてみる。

    case TAtk:
//      imp = (Atp/15+1)/(Atp<100 ? 1 : Atp/100);
        imp = (static_cast<double>(Atp)/15.0+1.0)/(Atp<100 ? 1.0 : static_cast<double>(Atp)/100.0);
        Atp += static_cast<nt>(imp);
        break;



ふむう・・・。
なんだかひどいソースだ。
ちょっとふいんき的に変わったけど、根本的な解決には至らないか。

上昇値がたまに巻き戻るのは、この方法では仕方ないとしても
ある程度までパラメーター上がってしまうと、鍛える上昇値が一定のところで
収束してしまうのな。

しかしまあなんですな。
圧倒的なクソ調整のにおいがだいぶ薄くなったんで、こんな感じでいいか。

こんなクソ長い数式を3回も4回も並べるのはイヤなんで、これだけでも
外に追い出す。


player.h


int mImp(int a){
    double d,da = static_cast<int>(a);
    d = (da/15.0+1.0)/(da<250.0 ? 1.0 : da/250.0);
    return static_cast<int>(d);
}

int mImpHP(int a){
    double d, da = static_cast<int>(a);
    d = (da/15.0+1.0)/(da<250.0 ? 1.0 : da/250.0)*((da+1000.0)/1000.0);
    return static_cast<int>(d);
}

void Player::Training(TrainingMenu tM)
{
    int cost = TrainingCost(tM);
    int imp;
    if(Money >= cost){
        Money -= cost;
        switch(tM){
            case THP:
//              imp = static_cast<int>(static_cast<double>((mImp(MaxHP)*(MaxHP+1000)/1000)));
                imp = mImpHP(MaxHP);
                MaxHP += imp;

                break;
            case TAtk:
//              imp = (Atp/15+1)/(Atp<100 ? 1 : Atp/100);
//              imp = (static_cast<double>(Atp)/15.0+1.0)/(Atp<100 ? 1.0 : static_cast<double>(Atp)/100.0);

                imp = mImp(Atp);
                Atp += imp;

                break;
            case TDef:
                imp = mImp(Dfp);
                Dfp += imp;

                break;
            case TAgi:
                imp = mImp(Agi);
                Agi += imp;

                break;
        }
        cout << tMenu[tM] << "が " << imp << "上がった。\n";
    } else {
        cout << "お金がたりませんよ!\n";
    }
}




HPの計算、どうせ16か17あたりで収束するなら、それに倍率掛けてやろうかと。
これがけっこういい感じの上昇を見せる。

出たとこ勝負で掛けたり割ったりの、無駄に散らかってる計算式。
式を整理したら落ち込むほど単純になりそう。結果的に4倍してるだけのような気が。




ダウンロード  Entry026.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
アクセス解析
カウンター