小さなゲームを開発しているときに、私は昨夜自分自身で問題をコード化しました。先日、私は余暇の時間を何か生産的なものに費やすべきだと自分に確信していました。ゲームの代わりに、テキストベースのRPGで作業を始めることに決めました。私は、その後、ゲームで通貨を表す問題に来ました。さて、これはちょうど楽しみのためであるので、私は少し自分に挑戦したいと思います。 1つの値として通貨を表すだけではなく(例えば、「金貨」と呼ばれる1種類のコインがゲーム内の唯一のコインではありません)。さまざまな通貨を表すための静的クラスの使用
4種類のコイン - ペンス、銅、デンタル、オレン。硬貨の4つすべては、重量、体積、材料、および名前などの値を有する。さらに、コインには相対的な価値を決定する為替レートがあります。この点は、さもなければ退屈な古い通貨とは異なるものを許すことでした。私の問題は、その実装方法がわからないことです。
私が最後の夜に到着したのは、抽象クラスのCoinを拡張する4つのクラス(Pence、Copper、Denar、Oren)でした。コインには、4つのサブクラスすべてに対して、DENSITY、VOLUME、NAME、EXCHANGEなどの多くの保護された静的要素が含まれています。
サブクラスのコンストラクタは次のようになります。
public Coppers() {
super();
super.metal = COPPER_METAL;
super.name = COPPER;
super.setVolume();
super.setDensity();
super.setWeight();
}
そして、このようなスーパークラスの外観のメソッド:
protected void setDensity() {
switch(getMetal()) {
case "copper":
this.density = DENSITY_COPPER;
break;
case "silver":
this.density = DENSITY_SILVER;
break;
case "gold":
this.density = DENSITY_GOLD;
break;
default:
this.density = DENSITY_COPPER;
break;
};
}
これはひどく...間違っているようです。私はベストプラクティスが何であるかはわかりません。私は静的なクラスを使ってこれらの値を保持することについて友達に尋ね、混在した応答を受けました。しかし、これらのクラスのPOINTは重要です。プレイヤークラスに、さまざまなタイプのコインの数を追跡する、「財布」と呼ばれるオブジェクトがあるとします。彼らの財布で、プレーヤーは銀行でコインを交換し、商品を購入し、コインのために商品を売ることができます。インスタンス化されたすべてのコインのセットを保持することは意味がありません。私はちょうど情報と方法が必要です。静的クラスの実装は意味があるのでしょうか?どのようにして4つの硬貨がすべて非常に多くの物件を共有しているときに最高の状態になるのですか?
[Javaの列挙]を見(https://docs.oracle.com/javase/tutorial/java/javaOO/enum:あなたはテストにそれを吸うために、この
main
メソッドを使用することができます.html)sは基本的にいくつかの構文的な砂糖を持つ静的なクラスです。 – markspace
密度は変わりますか?なぜ金属のセッターでそれをセットするのではなく、重量と体積も同じです。なぜ保護されるのですか?プライベートはより良いアクセス修飾子になりませんか? – Natecat
彼は正確なコインを持っているプレイヤーにとって重要です(100セントで1ドル/ユーロとは異なる状況になるでしょうか?もしそうでなければ、シンプルな 'int財布'を持っていて、ペニーを一杯にして、ビジュアルエクスペリエンスのためだけにこの数字をoren、denar、copperとpenniesに変換することができます。 –