(レーンに注意してください:記事で与えられたアルゴリズムは、短いスケールでの千の程度の名前を指します。)少し前に、私は
アイドルジャンルのゲームの開発に参加する機会を得ました。 アイドルゲームとは何ですか? この
テンポの速いジャンルについて初めて耳にする場合は、
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 )。
記事が気に入ったら、
プロジェクトフォルダをダウンロードすることを忘れないで
ください ! 独自のゲームの開発に役立つことを願っています。 読んでくれてありがとう!