forked from alisdair/freecell
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Card.h
65 lines (55 loc) · 2.15 KB
/
Card.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//
// Card.h
// Freecell
//
// Created by Alisdair McDiarmid on Sat Jul 05 2003.
// Copyright (c) 2003 Alisdair McDiarmid. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// ALISDAIR MCDIARMID BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <Foundation/Foundation.h>
// Suit order is important: must match the card graphics file.
typedef enum {
CLUBS, DIAMONDS, HEARTS, SPADES
} Suit;
enum { NUMBER_OF_SUITS = 4 };
typedef enum {
ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING
} Rank;
@interface Card : NSObject <NSCopying>
{
Suit suit;
Rank rank;
}
+ cardWithSuit: (Suit) newSuit rank: (Rank) newRank;
- initWithSuit: (Suit) newSuit rank: (Rank) newRank;
// Accessors
//
- (Suit) suit;
- (NSString *) suitString;
- (Rank) rank;
- (NSString *) rankString;
- (BOOL) isRed;
- (BOOL) isBlack;
- (BOOL) isSuccessorTo: (Card *) other; // Move to Game logic: these methods are
- (BOOL) isPlayableOn: (Card *) other; // not part of a generic card class.
@end