(レーンに注意してください:記事で与えられたアルゴリズムは、短いスケールでの千の程度の名前を指します。)
少し前に、私はアイドルジャンルのゲームの開発に参加する機会を得ました。 アイドルゲームとは何ですか? このテンポの速いジャンルについて初めて耳にする場合は、 Adventure Capitalistをプレイしてみてください。 GamasutraのWebサイトには、ジャンルをもう少し詳しく見ることができるいくつかの記事( 1、2、3、4 )もあります。
アイドルゲーム開発者が必然的に遭遇する問題の1つは、これらの膨大な数をすべて画面に配置する方法であり、さらに重要なことは、プレーヤーがそれらを把握する方法です。 この記事では、非常に長い数字をプレイヤーにとって便利な文字列として書き換える方法を説明します。 このプロセスは、2つの主要な部分に分けることができます。
- まず、数値を指数表記で表します。 何人かの遊戯的なゲーム開発者はこれにこだわっており 、 一部のプレイヤーはそれを好むようです。 Wolfram MathWorldには、数値を変換するための非常に簡単なアルゴリズムがあり 、これを使用します。 しかし、ビットをいじくり回したい場合に使用できる別のアプローチがあります 。 言及しただけですが、この記事では考慮しません。 ゲームで使用する場合は、この記事のダウンロードフォルダーをご覧ください。このフォルダーには、使いやすい指数表記スクリプトがあります。
ScientificNotation.FromDouble(12340000); // .significand == 1.234; .exponent == 7
- 指数表記で数字の表現を見つけたら、その順序に名前を選択できます。 これがこの記事の主なタスクになります。
ソースをダウンロード
ソースコードはダウンロード可能で、アイドルゲームですぐに使用できます。 使い方は簡単です。
LargeNumber.ToString (12340000); // "12.34 million"
また、ダウンロードファイルには小さなサンプルプログラムが含まれており、ゲーム内で大きな数値が文字列に変換される方法を示しています( 前の記事で説明したボタンスクリプトを使用)。
これはすべて、主にUnityでのネットワークの操作に関するチュートリアル( 1、2、3 )から書かれた私の記事の一部に付随するコード例の一部です。 コード例をダウンロードして、それらの動作を確認してください!
標準の数値書式文字列
100万未満の数字は非常に小さく、深刻な処理を必要としません。 C#番号の組み込みの書式設定機能に依存することができます 。彼らは私たちのためにほとんどの仕事をします:
double x = 987654.321
x.ToString ("N2"); // "987,654.32"
適切な引数をToStringメソッドに追加することにより、区切り文字と制限された小数点以下の桁をほぼ簡単にグループ化できます。 追加の除算を実行したり、切り捨て関数を使用したりする必要はありません。
それほど大きな数字ではないラテン語の接頭辞
数百万(数百万)、数十億(十億)、兆(兆)などで表される多数を扱うとき、名前は3桁ごとに変わることがわかります。 指数表記の数字を持っているので、順序が6から8の場合は数百万で、9から11の場合は10億で、12から14の場合は1兆で表されることがわかります。 指数表記の数値の一般的な形式:
M x 10 N
Nを次のように表現する必要があります。
N = 3(U+1) + V, V < 3
次に、番号の最終行は次のようになります。
M*(10^V) Name(U)+"llion"
ここで、 名前(U)は、次のラテン語プレフィックステーブルから取得できます。
うん | 名前(U) |
1 | mi |
2 | バイ |
3 | トライ |
4 | クアドリ |
5 | キンティ |
6 | セクスティ |
7 | セプティ |
8 | オクティ |
9 | ノニ |
たとえば、数字123,000,000,000,000,000を処理する場合、次のような指数表記で表現できます。
1.23 x 10 17 , M = 1.23 N = 17
Nを書き換えると、次のようになります。
17 = 3*(4+1) + 2, U = 4 V = 2
これは、数値が次のように見えることを意味します。
1.23*(10 2 ) Name(4)+"llion"
簡略化すると、以下が得られます。
123 quadrillion
多数のプレフィックスの組み合わせ
ウィキペディアには、名前が多数に与えられる方法を説明する有用な記事があります。 私はそこに書かれていることを繰り返しません。 代わりに、アルゴリズムにアプローチする方法を説明し、いくつかの例を示します。
数値のUの値(およそTransl。:以下、著者はNと言うが、これは明らかに間違っている)を受け取った後、ラテン語の接頭辞を持つ数値で行ったように、ビット(単位、数十、数百)に分割してから定式化する必要があります次のようなタイトル:
( ) + () + ( ) + ( ) + ( "a" ) + "llion"
単位、数十、数百の接頭辞は、ウィキペディアの記事の表から取得できます。 特定のユニットプレフィックスに加えて、数十または数百のプレフィックスを配置する場合、修飾子を追加する必要がある場合がありますが、ほとんどの場合、修飾子は必要ありません。 いくつかの例を見てみましょう。
U = 12の場合、ユニットの場合、数字は2になり、これは"duo"に対応し、10の場合-1は"deci"に対応します。 「duo」から「deci」に切り替える場合、修飾子は必要ありません。 上記の式を使用して、「十二十億」を取得します。
U = 27の場合、単位の場合、数字は7( 「septe」に対応)、数十-2( 「viginti」に対応)です。 表によると、 septeからvigintiへの移行には修飾子mが必要です。 すべてをまとめると、 「septemvigintillion」になります。
最後に、 U = 30の場合、10の桁は3です。これは、末尾が「a」の 「triginta」に対応します。 したがって、私たちはそれを破棄し、3 兆を獲得します。
これがコードでどのように見えるかを理解しようとしている場合、私は答えます:それは配列検索、複数のifコンストラクト、および連結と文字列置換操作の組み合わせになります。 運がよく、パターンとの比較をサポートする言語で作業している場合は、それらを使用できます。
ソースコードファイルには、U = 999までのすべてのケースを処理する実用的な実装が含まれています。多数のリストに含まれるすべての名前でテストされています。 自分のプロジェクトに簡単に挿入できるすぐに使用できるコードが必要な場合、または実装を実際のバージョンと比較したい場合は、ダウンロードすることをお勧めします。
U = 1000の場合
それから数は百万と呼ばれます(およそTransl。:長いスケールで-quingentiard) 。
大きな数字では十分ではありません
倍精度浮動小数点数を使用すると、最大10 308 、またはU = 101 までの数値を処理できます。 ゲームでより大きな数字が必要な場合は、 任意の精度で数字を保存してみてください。 したがって、プレイヤーを億万長者にすることができます。
しかし、最初に本当に必要かどうかを自問してください。 Infinityはゲーム開発のための十分なスペースを提供し、与えられたスペースをすべて埋めようとする必要はありません。 私の大学教授を言い換えると:「考えられる最大の有限数を考えてください。 次に、彼の指数と同じ数を使用し、その数を自分の力で増やします。 この数値を実数の軸上に配置すると、無限大と比較しても、ゼロに非常に近くなります。
倍精度の数値を超えることで、ゲームはさらに面白くなりますか? 一部のゲームでは、答えは肯定的かもしれませんが、ほとんどの場合、ゲームのバランスとデザインについて再考することをお勧めします( 1、2、3、4 )。
記事が気に入ったら、 プロジェクトフォルダをダウンロードすることを忘れないでください ! 独自のゲームの開発に役立つことを願っています。 読んでくれてありがとう!