私は大規模なロールプレイングゲームを開発しています。問題は、アイテムとインベントリ システムをどのように管理するかを設計するのに苦労していることです。現在、私はこれに似たものを持っています:
- public 抽象クラス Item には 5 つの入れ子になったクラスがあり、これらはすべて抽象的で静的であり、Item の型を表します。すべてのネストされたクラスには、独自の use()、delete() (クラス インスタンスをファイナライズする)、および Sell() (削除のトリガー) void があります。また、必要なすべてのフィールドを埋める setAll() メソッドのような、オプションの getter および setter メソッドもあります。
- デフォルト: 基本価格、取引可能性ブール値、文字列名などがあります...非常に柔軟です
- 武器: デフォルト タイプにあるもの以外に、装備時の統計ボーナスの整数があります (equip() および unequip() void で使用されます)。public クラス Hero とやり取りします。
- Equipment: Weapon と同様ですが、装備する場所を決定する「EquipSlot」と呼ばれる Enum フィールドがあります。
- 消耗品: デフォルトと似ていますが、それを使用するときにプレイヤーが特定の効果をヒーローに適用できるようにする consumer() void があります。通常、消費とは、delete() void をトリガーすることを意味します。
- 特別: 通常、'Tradeable' ブール値がstatic、final、常に falseであるクエスト関連のアイテム。
さて、私のカスタムアイテムの作り方はこうです。
- まず、新しいクラスを作成します(抽象ではありません)
- 次に、Item.ItemType を拡張します。
- 次に、内部に setAll(info) void を持つコンストラクターを作成します。
- 次に、このクラスを他のクラスで使用できます。
それはすべて次のようになります。
package com.ep1ccraft.Classes.Items.Defaults;
import com.ep1ccraft.apis.Item.*;
public class ItemExample extends Item.Default {
public ItemExample() { // Constructor
this.setAll(lots of arguments here);
}
}
それから私はすることができます:
ItemExample something = new ItemExample();
そして、必要なすべてのプロパティを備えた完璧な ItemExample を持っているので、そのさまざまなインスタンスを作成し、「getName()」などの素晴らしいメソッドを使用できます。
インスタンスに他のインスタンスとは異なる名前を付けて衝突しないようにする自動化されたフォームを作成する方法がわからないため、インスタンスの名前付けに問題が生じます。また、スロットをコンテナーとして使用し、スタックを保持できるインベントリ システムを実装したいと考えています (スタック可能なアイテムのみ)。また、その主な機能は、それらを他のスロットにドラッグ アンド ドロップできることです (たとえば、再編成または移動するため)。銀行などの別の在庫インスタンスに移動したり、許可されている場合はヒーローの武器や装備スロットに配置したりできます)、それらをクリックして、アイテムの名前、説明、および可能なアクションを示す画面を表示できます (どのトリガー前述の delete() および use() void)。
全部読んでくれてありがとう!多分私はあまりにも多くを求めていることを知っていますが、とにかくどんな答えでも感謝します!