0

私はiPhone用のRPGタイプのゲームに取り組んでいます。私がやりたいのは、特定の種類のアイテムだけを特定の量だけ保持できる在庫を持つことです。これを行うには、NSMutableArray を拡張して制限を追加するだけだと思います。私はこれを行うための最良の方法を理解することはできません。これが私の頭の中にあるアイデアです...

バックパック.h

@interface Backpack : NSMutableArray {
  Class * arrayClass;
  NSMutableArray * array;
  int limit;
}

-(id) initWithClass:(Class) type andLimit:(int) num;

@end

バックパック.m

@implementation Backpack

  -(id)initWithClass:(Class) type andLimit:(int) num {

    arrayClass = type;
    limit = num;
    array = [NSMutableArray new];
    return self;

  }

  -(void)insertObject:(id) object atIndex:(int) index {

    if([object isKindOfClass:arrayClass] && index < limit) {
      // Insert it
    } else {
      // Throw Exception
    }

  }

@end
4

2 に答える 2

5

NSMutableArray を拡張するのではなく、NSMutableArray のインスタンスを使用してアイテムを保持する独自のクラスを作成するだけです。クラスには、特定のクラス タイプのアイテムを追加する必要がある (または特定のインターフェイスを実装する) add メソッドを含めることができます。アイテムの数を制限する限り、 addItem メソッド内で、最初に保持されているアイテムの数を確認します。制限を超えている場合は、アイテムの追加を許可しないでください。最後に、クラスは size メソッド (getSize() など) を公開できます。このメソッドは、NSMutableArray のインスタンスで内部的に保持されているアイテムの数を示します。これにより、バックパックが「満杯」のときにアイテムが追加されないようにすることができます。

一般的に言えば、合成 (つまり、他のクラスのメンバー インスタンスから独自のクラスを合成すること) は、クラスを拡張して継承を使用して同じ動作を実現するよりも優れています。たとえば、NSMutableArray を拡張すると、作成したメソッドに加えて、結果のクラスがそのクラスのすべてのパブリック メソッドを公開することになり、コードの再利用とドキュメンテーションの観点からクラスが乱雑になります。

最後に、あなたの質問は Java に関するものではないので、Java タグを付けるべきではないかもしれません。

于 2012-07-26T00:30:45.897 に答える
1

課したい制限は、使用を混乱させ、記述を困難にするものがあるとしても、実際にはクラス拡張を必要としません。

シンプルに保ち、RPGを作成する過程のどこかで設計したいと思うカスタムPlayerクラスのようなものにいくつかのインベントリ関連のメソッドを追加するだけです。

@interface Player : NSObject {
  NSMutableArray * inventory;
  NSUInteger inventoryLimit;
  //other centralized player data like stats, spells, or whatever
}
-(BOOL)addItemToInventory:(YourItemClass *)item;
@end

@implementation 
//... other impl stuff, like init
-(BOOL)addItemToInventory:(YourItemClass *)item {
  if([inventory count] < inventoryLimit) {
    [inventory addObject:item];
    return TRUE;
  }
  else {
    return FALSE;
  }
}
@end

「Player」クラスに関する私の提案は難しい要件ではないことに注意してください。ゲームのクラスとデータを構造化する方法はいくつもあります...

于 2012-07-26T00:45:41.993 に答える