斯坦福大学公开课IOS 7 学习笔记(2)

本文档详细介绍了使用Objective-C进行iOS7游戏开发的过程,通过构建简单的游戏卡片(Card)类、牌组(Deck)类和具体的游戏牌(PlayingCard)类,深入探讨了面向对象编程在iOS开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

斯坦福大学公开课IOS 7 学习笔记(2)


上次的内容

//Card.h

#import <Foundation/NSObject.h>
//#import <Foundation/Foundation.h>
//#import Foundation;

@interface Card : NSObject
//默认object-c会自动创建getter与setter
@property {strongnonatomic} NSString * contents;
@property {nonatomic} BOOL chosen;
@property {nonatomic} BOOL matched;
//方法默认命名 getter->matched setter->setMatched 
//方法重命名 @property {nonatomic,getter=isMatched} BOOL matched;

- (int ) match:(Card *)card; 
- (int ) matchs:(NSArray *)card; 

@end
//Card.m

#import "Card.h"

//私有属性或方法的声明,主要用于属性
@interface Card()

@end


//灭有synthsize你将无法创建card实例,而且它没有名,你无法再getter和setter中引用它
//实际上这些代码是看不到的,object-c会自动创建
@synthesize contents = _contents;
@synthesize chosen = _chosen;
@synthesize matched = _matched;
//- (NNString *)contents 是一个方法声明
// - 表示这是一个方法
- (NNString *)contents{
    return _contents;
}

- (void)setContents:(NNString *contents){
     _contents = contents;
 }

- (BOOL) chosen
{
    return _chosen;
}

- (void) setChosen:(BOOL chosen){
    _chosen = chosen;
}

- (BOOL) matched{
    return _matched; 
}

-(void )setMatched:(BOOL matched){
    _matched = matched;
}

@implementation Card


- (int )match:(Card *)card{
    int score = 0;

    if([card.contents isEqualToString:self.contents]){
        score=1;
    }

    return score;
}

- (int )matchs:(NSArray *)otherCards{
    int score = 0;


    for(Card * card in otherCards){
        if([card.contents isEqualToString:self.contents]){
            score=1;
        }
    }

    return score;
}
@end

Deck

//Deck.h
#import <Foundation/Foundation.h>


@interface Deck:NSObejct

- (void )addCard:(Card *)Card atTop:(BOOL)arTop;
- (void )addCard:(Card *)Card;


- (void )drawRandomCard;


@end
#import "Deck.m"

@interface Deck()

//NSArray 是个基础集合类,是个不可增加不可删除的类,NSMutableArray可以
@property (strong,nonatomic) NSMutableArray *cards;
@end


@implementation Deck


- (NSMutableArray *)cards{

    if(!_cards) _cards = [[NSMutableArray alloc] init]
    return _cards;
}

- (void )addCard:(Card *)card atTop:(BOOL)atTop{

    if(atTop){
        [self.cards insertObject:card atIndex:0];
    }else{
        [self.cards addObject:card];
    }
}

- (void )addCard:(Card *)card{

    [self addCard:card atTop:No];
}


- (Card *) drawRandomCard{
    Card * randomCard = nil;

    if([self.cards count]){
        unsigned index = are4random()%[self.cards count];
        randomCard = self.cards[index];
        //等价于 randomCard = [self.cards ObjectAtIndex:index];
        [self.cards removeObjectAtIndex:index];
    }
    return randomCard;
}
@end

PlayingCard

//PlayingCard.h
#import "Card.h"

@interface PlayingCard:Card

@property (strong,nonatomic) NSString *suit;
@property (nonatomic) NSUInteger rank;

+ (NSArray *)validSuits;
+ (NSUInteger *)maxRank;
@end
//PlayingCard.m

#import "PlayingCard.h"

@implementation PlayingCard


//方法重写 contents->get contents方法 @代表一个对象
- (NSString *)contents {

    NSArray *rankString = [PlayingCard rankStrings];
    return rankString[self.rank] stringByAppendingString:self.suit;
    //return [NSString stringWithFormat:@"%d%@" ,self.rank, self.suit];

}

+ (NSArray *)rankStrings{
    return  @[@"?",@"A",@"2",@"3",...,@"J",@"Q",@"K"];
}

+(NSUInteger )maxRank{
    return [[self rankStrings] count]-1;
}


//当提供(重写)了setter与getter就必须处理synthesize
@synthesize suit=_suit;
//重写suit
- (NSString *)suit{

    if(self.suit)
        return @"?";
    return self.suit;
}

//"+" 代表类方法,静态方法
+ (NSArray *) validSuits{
    return @[@"1",@"2",@"3",@"4"];
}

//重写
- (void)setSuit:(NSString *)suit{
        //containsObject对于字符串比较,字符串的内容
        //使用 @[]就是创建数组
        if([ @[@"1",@"2",@"3",@"4"] containsObject:suit ]){
            _suit = suit;
        }

        /**使用类方法
        if([[PlayingCard vaildSuits] containsObject:suit ]){
            _suit = suit;
        }
        **/
}


- (void )setRank:(NSUInteger )rank{
    if(rank <= [PlayingCard maxRank]){
        _rank = rank;
    }
}

@end

PlayingCardDeck

//PlayingCardDeck.h
#import "Deck.h"

@interface PlayingCardDeck : Deck


@end
//PlayingCardDeck.m
#import "PlayingCardDeck.h"
#import "PlayingCard"

@implementation PlayingCardDeck

//除了在init方法内,永远别用alloc
- (instancetype)init{
    self = [super init];

    if(self){
        for(NSString *suit in [PlayingCard validSuits]){
            for(NSUInteger rank=1;ran <= [PlayingCard maxRanking];rank++){
                PlayingCard * card = [[PlayingCard alloc] init];
                card.rank = rank;
                card.suit = suit;
                [self addCard:card];
            }

        }   

    }
    return self;
}


@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值