アイドルゲームのビッグナンバーの名前



(レーンに注意してください:記事で与えられたアルゴリズムは、短いスケールでの千の程度の名前を指します。)

少し前に、私はアイドルジャンルのゲームの開発に参加する機会を得ました。 アイドルゲームとは何ですか? このテンポの速いジャンルについて初めて耳にする場合は、 Adventure Capitalistをプレイしてみてください。 GamasutraのWebサイトには、ジャンルをもう少し詳しく見ることができるいくつかの記事( 1、2、3、4 )もあります。

アイドルゲーム開発者が必然的に遭遇する問題の1つは、これらの膨大な数をすべて画面に配置する方法であり、さらに重要なことは、プレーヤーがそれらを把握する方法です。 この記事では、非常に長い数字をプレイヤーにとって便利な文字列として書き換える方法を説明します。 このプロセスは、2つの主要な部分に分けることができます。

  1. まず、数値を指数表記で表します。 何人かの遊戯的なゲーム開発者はこれこだわっており一部のプレイヤーそれを好むようです。 Wolfram MathWorldには、数値を変換するための非常に簡単なアルゴリズムがあり 、これを使用します。 しかし、ビットをいじくり回したい場合に使用できる別のアプローチがあります 。 言及しただけですが、この記事では考慮しません。 ゲームで使用する場合は、この記事のダウンロードフォルダーをご覧ください。このフォルダーには、使いやすい指数表記スクリプトがあります。

    ScientificNotation.FromDouble(12340000); // .significand == 1.234; .exponent == 7
  2. 指数表記で数字の表現を見つけたら、その順序に名前を選択できます。 これがこの記事の主なタスクになります。

ソースをダウンロード


ソースコードはダウンロード可能で、アイドルゲームですぐに使用できます。 使い方は簡単です。

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)
1mi
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 )。

記事が気に入ったら、 プロジェクトフォルダをダウンロードすることを忘れないでください ! 独自のゲームの開発に役立つことを願っています。 読んでくれてありがとう!

Source: https://habr.com/ru/post/J314512/


All Articles