小数値の出現を防ぐには ゲーム上で表示される値に小数が含まれるのは避けたほうがいい
| どんなゲームでも数値を扱うことは避けられない。 |
| シミュレーションゲームでは、パラメーターの値を表示するゲームが散見される。 |
| 少し、下図を見てほしい。 |
| |
 |
| |
| 資金、食料、経済、農地……パラメーターの値はすべて整数になっている。 |
| もし小数になっていたら、どうだろうか? |
| 兵力が45.6 なんだ、この小数部分は? となるはずだ。 |
| |
| ところがプログラムでいろいろ値をいじっていると、往々にして小数がでてくる。 |
| たとえば、食料を売却する処理を考えてみよう。 |
| 食料1が資金1.2に換金できるとした場合、食料を86売ると103.2の資金になる。小数値だ。 |
| |
| もうひとつ。隣接国と交戦状態になり、自陣営の兵力30と相手国の兵力19がぶつかり合うケースを考える。 |
| 戦略画面上での戦争処理は、ランチェスターの第二法則を便宜的に用いているので、計算式は、 |
| |
| 残存兵力={兵力(大)の2乗−兵力(小)の2乗}の平方根 |
| |
| となる。どちらかが全滅するまで戦ったときに、生き残った側はどれくらいなのかを計算しているわけだ。 |
| すると、(30の2乗−19の2乗)の平方根だから、23.216……となる。 |
| 小数部分は何だ? 負傷兵か? などとなるわけだ。 |
| |
| どう考えても小数表示はまずいので、整数に直さないといけない。 |
| 厳しい考え方をするなら、小数部分は切り捨てたほうが良い。 |
| 四捨五入すると、0.5あれば1になってしまうからだ。ところが、なんの処置もしないまま、小数を変数へ |
| 入れようとすると、勝手に四捨五入されるので始末が悪い。 |
| 今回の23.216……なら、たまたま23になって、小数部分を切り捨てた結果と同じになるが、そうはいかない |
| 場合がでてくる。そこでどんな処置をすればよいか? |
| |
| 1で割った商を求めるのはどうだろう? つまり、演算子¥を利用するわけだ。 |
| |
| 23.216 ¥ 1 |
| |
| この回答は、23となって返ってくる。整数に変換できた。 |
| CIntを使って型変換を行うのも試してみたが、四捨五入されてしまう。 |
| というわけで、整数への変換は、演算子¥を使って1で割ることだ。 |
| |
 |
| |
| ※実際にゲーム業界では、こんなことをしないかもしれない。別の方法があるかもしれないし、四捨五入した |
| ところで、1しか違ってこないから微々たる誤差として、何の処置も施さないまま流すかもしれない。 |
| |
| |
|
|
Copyright (C) シミュレーションゲーム作成工房, All Rights Reserved.