ポケモンの固体値を求める自分用アプリを作っております。
それ専用の関数を作ってみたのですが上手い値が帰ってきてくれません。
// 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;
}