ページ 11

ポケモンの固体値を判別するアプリ

Posted: 2010年9月21日(火) 20:01
by 山口
ポケモンの固体値を判別するアプリ

ポケモンの固体値を求める自分用アプリを作っております。
それ専用の関数を作ってみたのですが上手い値が帰ってきてくれません。

// int tribe 種族値 , int status 能力値 , int fight 努力値, int lv レベル, int heart 性格, int mode 何の能力か(攻撃など)
// 戻り値は固体値です。
int PokeValue( int tribe, int status, int fight, int lv, int heart, int mode )

サイトが重いので何回かF5を押さないとだめだと思います。

固体値とは
http://yakkun.com/dp/system.htm

能力値={(種族値×2+個体値+努力値÷4)×レベル÷100+5}×性格補正
で出る値のことです。
この式の結果は0~32になります。

作りたいもの
http://yakkun.com/dp/ic.htm

分かりにくくて申し訳ないのですが
どこが悪いかわかる方おりませんでしょうか?
int PokeValue( int tribe, int status, int fight, int lv, int heart, int mode ){
    
    float bairitu = 1.0f;

    switch(heart){
        case  H_SAMISHIGARI:
            if( mode == M_ATK ) bairitu = 1.1f;
            if( mode == M_DEF ) bairitu = 0.9f;
            break;
        case H_IJIPPARI:
            if( mode == M_ATK ) bairitu = 1.1f;
            if( mode == M_SPATK ) bairitu = 0.9f;
            break;
        case H_YANCHA:
            if( mode == M_ATK ) bairitu = 1.1f;
            if( mode == M_SPDEF ) bairitu = 0.9f;
            break;
        case H_YUUKAN:
            if( mode == M_ATK ) bairitu = 1.1f;
            if( mode == M_SPD ) bairitu = 0.9f;
            break;
        case H_ZUBUTOI:
            if( mode == M_DEF ) bairitu = 1.1f;
            if( mode == M_ATK ) bairitu = 0.9f;
            break;
        case H_WANPAKU:
            if( mode == M_DEF ) bairitu = 1.1f;
            if( mode == M_SPATK ) bairitu = 0.9f;
            break;
        case H_NOUTENKI:
            if( mode == M_DEF ) bairitu = 1.1f;
            if( mode == M_SPDEF ) bairitu = 0.9f;
            break;
        case H_NONKI:
            if( mode == M_DEF ) bairitu = 1.1f;
            if( mode == M_SPD ) bairitu = 0.9f;
            break;
        case H_HIKAEME:
            if( mode == M_SPATK ) bairitu = 1.1f;
            if( mode == M_ATK ) bairitu = 0.9f;
            break;
        case H_OTTORI:
            if( mode == M_SPATK ) bairitu = 1.1f;
            if( mode == M_DEF ) bairitu = 0.9f;
            break;
        case H_UKKARIYA:
            if( mode == M_SPATK ) bairitu = 1.1f;
            if( mode == M_SPDEF ) bairitu = 0.9f;
            break;
        case H_REISEI:
            if( mode == M_SPATK ) bairitu = 1.1f;
            if( mode == M_SPD ) bairitu = 0.9f;
            break;
        case H_ODAYAKA:
            if( mode == M_SPDEF ) bairitu = 1.1f;
            if( mode == M_ATK ) bairitu = 0.9f;
            break;
        case H_OTONASHII:
            if( mode == M_SPDEF ) bairitu = 1.1f;
            if( mode == M_DEF ) bairitu = 0.9f;
            break;
        case H_SINCHOU:
            if( mode == M_SPDEF ) bairitu = 1.1f;
            if( mode == M_SPATK ) bairitu = 0.9f;
            break;
        case H_NAMAIKI:
            if( mode == M_SPDEF ) bairitu = 1.1f;
            if( mode == M_SPD ) bairitu = 0.9f;
            break;
        case H_OKUBYOU:
            if( mode == M_SPD ) bairitu = 1.1f;
            if( mode == M_ATK ) bairitu = 0.9f;
            break;
        case H_SEKKATI:
            if( mode == M_SPD ) bairitu = 1.1f;
            if( mode == M_DEF ) bairitu = 0.9f;
            break;
        case H_YOUKI:
            if( mode == M_SPD ) bairitu = 1.1f;
            if( mode == M_SPATK ) bairitu = 0.9f;
            break;
        case H_MUJYAKI:
            if( mode == M_SPD ) bairitu = 1.1f;
            if( mode == M_SPDEF ) bairitu = 0.9f;
            break;
        // 変化なし
        case H_TEREYA:
        case H_GANBARIYA:
        case H_SUNAO:
        case H_KIMAGURE:
        case H_MAJIME:
            break;
    }
    //(能力値-5)×100÷Lv.-2種族値-1/4努力値
    //int val = status - int( int( int( int( tribe*2 + int(fight/4) ) * lv / 100 ) + 5 ) * bairitu );
    int val = int(int( (status-5)*100/lv ) - (2*tribe) - int(fight/4) * bairitu);
    
    //int val = int( int( ( status*2 + int(fight/4) ) * lv / 100 + 5 ) * bairitu) -
    return val;
}

Re:ポケモンの固体値を判別するアプリ

Posted: 2010年9月21日(火) 21:45
by 釣り師
int型で性格を入れることはできなかったと思います。
int型が使えるのは整数値のみのはずです。

Re:ポケモンの固体値を判別するアプリ

Posted: 2010年9月21日(火) 21:56
by シエル
いや、列挙型だと思いますが。。。

Re:ポケモンの固体値を判別するアプリ

Posted: 2010年9月21日(火) 23:31
by Poco
上手くいかないと判断した際の、
 ・関数の引数の値
 ・その時の戻り値
 ・期待する戻り値
を教えてください。

Re:ポケモンの固体値を判別するアプリ

Posted: 2010年9月21日(火) 23:32
by ookami
ポケモンは苦手ですが、
気になったのは、
int val = int(int( (status-5)*100/lv ) - (2*tribe) - int(fight/4) * bairitu);
の部分で、
それぞれの(int割るint)でいちいち小数点以下が切り捨てられますが、そこは意図どおりですか?

Re:ポケモンの固体値を判別するアプリ

Posted: 2010年9月22日(水) 08:29
by toyo
能力値={(種族値×2+個体値+努力値÷4)×レベル÷100+5}×性格補正
能力値 / 性格補正 =(種族値×2+個体値+努力値÷4)×レベル÷100+5
(能力値 / 性格補正) - 5 =(種族値×2+個体値+努力値÷4)×レベル÷100
((能力値 / 性格補正) - 5) * 100 =(種族値×2+個体値+努力値÷4)×レベル
(((能力値 / 性格補正) - 5) * 100) / レベル =種族値×2+個体値+努力値÷4
(((能力値 / 性格補正) - 5) * 100) / レベル - 種族値 * 2 - 努力値 / 4 = 個体値

bairituが性格補正のことなら式が間違っていますよ

Re:ポケモンの固体値を判別するアプリ

Posted: 2010年9月28日(火) 22:13
by 山口
折角、ご回答を頂けたのにお礼が遅くなってしまい申し訳ございませんでした。
一度締めさせていただきます。