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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
山口

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

#1

投稿記事 by 山口 » 15年前

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

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

// 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:ポケモンの固体値を判別するアプリ

#2

投稿記事 by 釣り師 » 15年前

int型で性格を入れることはできなかったと思います。
int型が使えるのは整数値のみのはずです。

シエル

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

#3

投稿記事 by シエル » 15年前

いや、列挙型だと思いますが。。。

Poco

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

#4

投稿記事 by Poco » 15年前

上手くいかないと判断した際の、
 ・関数の引数の値
 ・その時の戻り値
 ・期待する戻り値
を教えてください。

ookami

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

#5

投稿記事 by ookami » 15年前

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

toyo

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

#6

投稿記事 by toyo » 15年前

能力値={(種族値×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:ポケモンの固体値を判別するアプリ

#7

投稿記事 by 山口 » 15年前

折角、ご回答を頂けたのにお礼が遅くなってしまい申し訳ございませんでした。
一度締めさせていただきます。

閉鎖

“C言語何でも質問掲示板” へ戻る