2

我正在为一个自定义塔罗牌制作一个应用程序,它应该能够洗牌、选择一张卡片并给出卡片的描述。

我的主要问题是:

  1. 在 Card 类中用作数据持有者的内容。总共有 36 张卡片。每个都有不同的正面图像/描述的 png/文本,但每个都有相同的背面图像(就像播放甲板一样)。我认为这将是某种数组,但我不知道如何声明两个图像和文本(前/后/描述)并将其链接到单个索引位置,或者如果我需要 3 个单独的数组,那么如何我将它们相互链接,以便它们都获得正确的数据?

  2. 甲板类:我假设将是一个空数组,在它们被洗牌后从卡片类中获得对象?我有一个很好的洗牌方法,我一直在控制台中尝试,NSLog但基本上需要在卡片类上实现它?然后牌组将显示在“FlowCover”(http://chaosinmotion.com/flowcover.html)中。这是有效的,我已经整理出“didselect”方法来更改视图但是 -

  3. 选择:我不确定将保存什么对象并将所选数据从卡座传递到所选视图。我认为它必须是与卡类相同的对象?

4

2 回答 2

1
  1. 将三个“事物”链接到单个索引位置的典型方法是将事物放入单个类,然后将该类的对象放在索引位置。
  2. 卡片组可以是一个简单的 NSMutableArray,它是 Objective-c 的可编辑对象容器
  3. 选择可以是第二个 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

两个常量数组,测试和前图像。那么你的牌组就是简单的整数数组(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.

如果你的视图只是两张图片和一张卡片的文字,那么它不需要知道卡片类或套牌类的任何内容,只需要这三个参数。

于 2012-04-04T17:35:21.977 回答