Source/KlondikeGame.m
changeset 6 af9b2b929b03
parent 1 3eb7be1dd7b6
child 10 6c78cc6bd7a6
     1.1 --- a/Source/KlondikeGame.m	Mon Mar 10 17:30:57 2008 -0700
     1.2 +++ b/Source/KlondikeGame.m	Wed Mar 12 15:51:32 2008 -0700
     1.3 @@ -24,21 +24,19 @@
     1.4  #import "Deck.h"
     1.5  #import "PlayingCard.h"
     1.6  #import "Stack.h"
     1.7 +#import "QuartzUtils.h"
     1.8  
     1.9  
    1.10  #define kStackHeight 500
    1.11  
    1.12  
    1.13 -/**  WARNING: THIS CODE REQUIRES GARBAGE COLLECTION!
    1.14 - **  This sample application uses Objective-C 2.0 garbage collection.
    1.15 - **  Therefore, the source code in this file does NOT perform manual object memory management.
    1.16 - **  If you reuse any of this code in a process that isn't garbage collected, you will need to
    1.17 - **  add all necessary retain/release/autorelease calls, and implement -dealloc methods,
    1.18 - **  otherwise unpleasant leakage will occur!
    1.19 - **/
    1.20 +@implementation KlondikeGame
    1.21  
    1.22  
    1.23 -@implementation KlondikeGame
    1.24 ++ (BOOL) landscapeOriented
    1.25 +{
    1.26 +    return YES;
    1.27 +}
    1.28  
    1.29  
    1.30  - (id) initWithBoard: (GGBLayer*)board
    1.31 @@ -47,29 +45,43 @@
    1.32      if (self != nil) {
    1.33          [self setNumberOfPlayers: 1];
    1.34          
    1.35 +        CGSize boardSize = board.bounds.size;
    1.36 +        CGFloat xSpacing = floor(boardSize.width/7);
    1.37 +        CGSize kCardSize;
    1.38 +        kCardSize.width  = round(xSpacing * 0.9);  // 1/7th of width, with 10% gap
    1.39 +        kCardSize.height = round(kCardSize.width * 1.5);
    1.40 +        CGFloat gap = xSpacing-kCardSize.width;
    1.41 +        [Card setCardSize: kCardSize];
    1.42 +        
    1.43 +        CGPoint pos = {floor(gap/2)+kCardSize.width/2, floor(boardSize.height-kCardSize.height/2)};
    1.44          _deck = [[Deck alloc] initWithCardsOfClass: [PlayingCard class]];
    1.45          [_deck shuffle];
    1.46 -        _deck.position = CGPointMake(kCardWidth/2+16,kCardHeight/2+16);
    1.47 +        _deck.position = pos;
    1.48          [board addSublayer: _deck];
    1.49          
    1.50 +        pos.x += xSpacing;
    1.51          _sink = [[Deck alloc] init];
    1.52 -        _sink.position = CGPointMake(3*kCardWidth/2+32,kCardHeight/2+16);
    1.53 +        _sink.position = pos;
    1.54          [board addSublayer: _sink];
    1.55          
    1.56 +        pos.x += xSpacing;
    1.57          for( CardSuit suit=kSuitClubs; suit<=kSuitSpades; suit++ ) {
    1.58 +            pos.x += xSpacing;
    1.59              Deck *aces = [[Deck alloc] init];
    1.60 -            aces.position = CGPointMake(kCardWidth/2+16+(kCardWidth+16)*(suit%2),
    1.61 -                                        120+kCardHeight+(kCardHeight+16)*(suit/2));
    1.62 +            aces.position = pos;
    1.63              [board addSublayer: aces];
    1.64              _aces[suit] = aces;
    1.65          }
    1.66          
    1.67 +        CGRect stackFrame = {{floor(gap/2), gap}, 
    1.68 +                             {kCardSize.width, boardSize.height-kCardSize.height-2*gap}};
    1.69 +        CGPoint startPos = CGPointMake(kCardSize.width/2,kCardSize.height/2);
    1.70 +        CGSize spacing = {0, floor((stackFrame.size.height-kCardSize.height)/11.0)};
    1.71          for( int s=0; s<7; s++ ) {
    1.72 -            Stack *stack = [[Stack alloc] initWithStartPos: CGPointMake(kCardWidth/2,
    1.73 -                                                                        kStackHeight-kCardHeight/2.0)
    1.74 -                                                   spacing: CGSizeMake(0,-22)];
    1.75 -            stack.frame = CGRectMake(260+s*(kCardWidth+16),16, kCardWidth,kStackHeight);
    1.76 -            stack.backgroundColor = nil;
    1.77 +            Stack *stack = [[Stack alloc] initWithStartPos: startPos spacing: spacing];
    1.78 +            stack.frame = stackFrame;
    1.79 +            stackFrame.origin.x += xSpacing;
    1.80 +            stack.backgroundColor = nil; //kAlmostInvisibleWhiteColor;
    1.81              stack.dragAsStacks = YES;
    1.82              [board addSublayer: stack];
    1.83