Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ポケモンダメ計 2017/11/25
func testExample() {
//攻撃者: ガブリアス
//実数値: A 182
let 攻撃者レベル: Double = 50.0
let 攻撃者の攻撃力: Double = 182
//技: じしん(物理 威力100)
let 技の威力: Double = 100
let タイプ一致: Double = 1.5
//防御者: メガバシャーモ
//実数値: D 101
let 防御者の防御力: Double = 101
//タイプ相性
let タイプ相性: Double = 2.0
//計算
let レベル定数値 = floor((攻撃者レベル * 2) / 5 + 2)
let B = floor(レベル定数値 * 技の威力 * 攻撃者の攻撃力 / 防御者の防御力)
let 基本ダメージ = floor(B / 50 + 2)
print("レベル定数値: \(レベル定数値)")
print("基本ダメージ: \(基本ダメージ)")
let 最小乱数: Double = 0.85
let 最大乱数: Double = 1.0
let 最小 = floor(基本ダメージ * 最小乱数)
let 最大 = floor(基本ダメージ * 最大乱数)
let 最低ダメージ量 = pokeRound(floor(最小 * タイプ一致) * タイプ相性)
let 最大ダメージ量 = pokeRound(floor(最大 * タイプ一致) * タイプ相性)
print("ダメージ量: \(最低ダメージ量)〜\(最大ダメージ量)")
//結果が「ダメージ量: 206.0〜243.0」となる。ダメ計Z・トレ天・Arcでは 204〜242になので
//おおまかな計算結果は合っているけれど、おそらく小数点周りでの処理が間違ってるみたいだ
//追記(2017/11/25 17:54)
//タイプ一致とタイプ相性の掛け算ごとに小数点の処理をおこなうようにしてみた
//結果としては「ダメージ量: 206〜242」、基本ダメージは81.0、補正済みダメ値は242.0となった
//最小乱数(x0.85)の計算結果の扱いに問題があるのかもしれない
//追記(2017/11/25 20:23)
//先に乱数込みの最小ダメージ量と最大ダメージ量を計算してからタイプ一致とタイプ相性の倍率を求めるようにした
//結果としては「ダメージ量: 204〜242」、基本ダメージは81.0、補正済みダメ値は242.0となり
//ダメ計Z・トレ天・Arcの計算結果をマッチするようになった
}
fileprivate func pokeRound(_ num: Double) -> Int {
if (modf(num).1 > 0.5) {
return Int(ceil(num))
} else {
return Int(floor(num))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment