Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 定制卡片组应用程序的数据和类设计_Ios - Fatal编程技术网

Ios 定制卡片组应用程序的数据和类设计

Ios 定制卡片组应用程序的数据和类设计,ios,Ios,我正在为一个定制塔罗牌制作一个应用程序,它应该能够洗牌,选择一张牌,并给出牌的描述 我的主要问题是: 在卡类中用作数据持有者的内容。总共有36张卡片。每个都有不同的png/文本作为正面图像/描述,但每个都有相同的背面图像(就像一个游戏组一样)。我假设这是某种数组,但我不知道如何声明两个图像和文本(前/后/描述)并将其链接到单个索引位置,或者如果我需要3个单独的数组,那么我如何将它们链接到彼此,以便它们都获得正确的数据 甲板类:我假设将是一个空数组,在洗牌后从卡类中获得对象?我有一个很好的洗牌方法

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

我的主要问题是:

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

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

  • 选择:我不确定将保存什么对象,并将所选数据从数据组传递到所选视图。我假设它必须是与card类相同的对象


  • 两个恒定阵列,测试和正面图像。 然后,您的数据组是简单的整数数组(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.
    
    如果您的视图只是两个imnages和一个card的文本,那么它不需要了解card类或deck类的任何信息,只需要这三个参数

  • 将三个“事物”链接到单个索引位置的典型方法是将事物放入单个类中,然后将该类的对象放入索引位置
  • deck可以是一个简单的NSMutableArray,它是objective-c的可编辑对象容器
  • 所选内容可以是第二个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以拥有一个洗牌例程。请参见

    欢迎来到SO!这不是一个论坛;与你的编程问题无关的个人细节只会分散你对手头任务的注意力,这就是回答你的问题。此外,这似乎相当广泛,最好分成两个或三个较小的问题,每个问题解决一个问题。只是想弄清楚您在示例中做了什么。是否将每个数据部分声明为card类中的方法-()?甲板阵列是否仍在不同的类别中?你会在“甲板”数组上运行随机方法吗?如果您添加了一个选定的属性,那么如何将数据链接到第二个视图?Hi Rosh,我在这里通过只指定类的接口实现了一些快捷方式。今天晚些时候我会完整地写出来。每个数据部分都是一个成员变量,可以通过一个名为属性访问器的方法访问。deck数组是一个不同的类,它是一个扩展的NSMutableArray,因此您不必编写该类,只需使用shuffle/random方法(参见链接)对其进行扩展,即调用deck对象的random方法。如果将选定的属性添加到card类中,那么当您想要显示所选内容时,您可以简单地遍历该组,这样您就不需要第二个selecteddeck对象。或者你可以有第二个selecteddeck对象,它只包含引用,直到你,Card类真的需要一个back属性吗?因为它总是一样的,我想你可以很容易地删除该属性。我认为这将使类的使用更加连贯,一张卡的所有属性都是从同一个地方访问的。