2

シャッフル、カードの選択、カードの説明ができるカスタムタロットデッキ用のアプリを作成しています。

私の主な問題は次のとおりです。

  1. Cardクラスのデータホルダーとして使用するもの。全部で36枚のカードがあります。それぞれがfrontImage/descriptionに対して異なるpng/textを持っていますが、それぞれが同じバックイメージを持っています(トランプのように)。これはある種の配列だと思いましたが、2つの画像とテキスト(表/裏/説明)を宣言して単一のインデックス位置にリンクする方法がわかりません。または、3つの別々の配列が必要な場合は、どうすればよいでしょうか。それらを相互にリンクして、すべてが正しいデータを取得できるようにしますか?

  2. デッキクラス:シャッフルされた後にカードクラスのオブジェクトが与えられる空の配列になると思いますか?私はコンソールで試した良いシャッフルメソッドを持っていますNSLogが、基本的にカードクラスが何であれそれを実装する必要がありますか?その後、デッキは「FlowCover」(http://chaosinmotion.com/flowcover.html)に表示されます。これは機能しており、ビューを変更するために「didselect」メソッドを整理しましたが-

  3. 選択:どのオブジェクトが保持され、選択されたデータをデッキから選択されたビューに渡すかがわかりません。カードクラスと同じオブジェクトである必要があると思いますか?

4

2 に答える 2

1
  1. 3つの「モノ」を単一のインデックス位置にリンクする一般的な方法は、モノを単一のクラスに配置してから、そのクラスのオブジェクトをインデックス位置に配置することです。
  2. デッキは、objective-cの編集可能なオブジェクトのコンテナである単純なNSMutableArrayにすることができます。
  3. 選択は2番目のNSMutableArrayにすることも、選択したプロパティを各カードに追加することもできます。どちらも実行可能な選択肢ですが、アルゴリズムは状況によって異なります。

したがって、静的な背面画像を含むCardClassを用意します(つまり、背面画像は、インスタンス化するすべてのオブジェクトに存在します)。正面の画像と説明のプロパティをクラスに追加します。次に、これらのオブジェクトのコレクションとしてリストを作成します。

//Card.h
@interface Card : NSObject

{
    UIImage * back;
    UIImage * front;
    NSString * description;
}
@property (readonly) UIImage * back;
@property (readonly) UIImage * front;
@property (readonly) NSString * description;
- (id) initWithFront:(UIImage *)setFront Description:(NSString*)setDescription; 
@end

//Card.m
#import "Card.h"

static UIImage * backimage = nil;

@implementation Card
@synthesize back;
@synthesize front;
@synthesize description;

+(void) initialize
{
    if (!backimage){
        backimage = [[UIImage alloc]initWithContentsOfFile:@"imagefile.png"]; //though imagefile.png will be replaced with a reference to a plist.info string 
    }
}

- (id) initWithFront:(UIImage *)setFront Description:(NSString*)setDescription{
    if (self = [super init]){
        front=setFront;
        description= setDescription;
        back = backimage;
    }
    return self;
}
@end

//... elsewhere, perhaps your main viewDidLoad method
NSMutableArray *deck = [NSMutableArray initWithCapacity:36];
Card * card1 = [[CardClass alloc] initWithFront:@"card1.png" Description:@"card 1"];
[deck addObject:card1];
... //etc to create the remaining cards in the whole deck

NSMutableClassを拡張して、シャッフルルーチンを作成します。NSMutableArrayをシャッフルするための最良の方法は何ですか?を参照してください。

于 2012-04-04T17:54:38.863 に答える
0

2つの定数配列、テスト画像とフロント画像。その場合、デッキは整数の単純な配列(1〜36)になります。シャッフルして、一番上のカードは18です

Text is Descriptions[18] (or 17 if zero based arrays)
FrontImage is Images[18] ditto
BackImage is always the same so no point in having 36 of them.

ビューが2つの画像と1つのカードのテキストだけである場合、カードクラスやデッキクラスについて何も知る必要はなく、これら3つの引数が必要です。

于 2012-04-04T17:35:21.977 に答える