Another coding story
ときどきの雑記帖
ゲーム開発でこういうコーディングをする人がいたという話。詳しい内容は元記事を参照のこと。
ゲーム内である温度を表示するのに次のようなコードが書かれた。
temp_to_str(int temp) { char str[4]; sprintf(str, "%d", temp);
このようなコードの場合、温度が1000℃を超えたり−100℃より低くなったら、最悪クラッシュしてしまう。では自分の場合、どのように対処したコードを書くか考えてみた。
まず、ゲームの仕様では温度が必ず3桁で表示できる範囲になっている場合。例えば-99℃から+99℃の範囲だとする。その範囲外の値が指定されたときは、温度を計算するロジックのどこかにバグがあるわけで、それを知らせるためにアサートで止まるようにする。
temp_to_str(int temp) { assert( -99 <= temp && temp <= 99 ); char str[4]; sprintf(str, "%d", temp);
次に温度の範囲は指定されておらず、1000℃を超えたり-100℃より低くなることもある場合。この場合は上限や下限を設定して表示する。例えば1000℃以上は999℃と表示し、-100℃以下は-99℃と表示する。つまり上限や下限を設定する。
temp_to_str(int temp) { if(temp > 999) temp = 999; if(temp < -99) temp = -99; char str[4]; sprintf(str, "%d", temp);
あるいは範囲外の値の場合は”測定不能”のような表示にしても良いかも知れない。ここはゲームの仕様しだいかな。
多分、自分ではこういう感じでコーディングすると思う。