This is WasteCardPileDelegate.m in view mode; [Download] [Up]
/* indent:4 tabsize:8 font:fixed-width */
#import "WasteCardPileDelegate.h"
#import <Solitaire/CardSet.h>
#import "Pyramid.h"
@implementation WasteCardPileDelegate
/*--------------------------------------------------------------------------
|
| - setDiscardLeft:left discardRight:right
|
|---------------------------------------------------------------------------
|
| Set connections to other piles.
|
\--------------------------------------------------------------------------*/
- (void) setDiscardLeft:(CardPileView*)left discardRight:(CardPileView*)right
{
discardCardPileViewL = left;
discardCardPileViewR = right;
}
/*--------------------------------------------------------------------------
|
| - (BOOL)canAcceptPile:aCardPile from:sender in:wasteCardPileView
|
| returns: (BOOL) YES if this pile will accept the cards dropped on it
|
| (BOOL) NO if this pile will not accept the dropped cards
|
|---------------------------------------------------------------------------
|
| Called by the WasteCardPileView when a card pile wants to be
| dropped on this pile.
|
\---------------------------------------------------------------------------*/
- (BOOL) canAcceptPile:(CardPile*)aCardPile from:sender in:(CardPileView*)wasteCardPileView
{
Card* card1 = [aCardPile topCard];
Card* card2 = [[wasteCardPileView cardPile] topCard];
/*----------------------------------------------------------------------
|
| If the card being dropped and the card on top of the
| pile add to thirteen, allow the card to be dropped.
| Both cards will be moved to the discardCardPiles in
| the acceptPile delegate method.
|
\---------------------------------------------------------------------*/
if (card1 && card2 && ([card1 value] + [card2 value] == 11))
{
return YES;
}
else
{
return NO;
}
}
/*---------------------------------------------------------------------------
|
| - acceptPile:aCardPile in:wasteCardPileView
|
|----------------------------------------------------------------------------
|
| Called by WasteCardPileView after cards have been successfully
| added to the pile as a result of cards being dropped on it.
|
\---------------------------------------------------------------------------*/
- (void) acceptPile:(CardPile*)aCardPile in:(CardPileView*)wasteCardPileView
{
CardPile* leftDiscardPile = [discardCardPileViewL cardPile];
CardPile* rightDiscardPile = [discardCardPileViewR cardPile];
CardPile* pile = [wasteCardPileView cardPile];
Card* aCard;
aCard = [pile dealTopCard];
[leftDiscardPile addCard:aCard];
aCard = [pile dealTopCard];
[rightDiscardPile addCard:aCard];
[discardCardPileViewL display];
[discardCardPileViewR display];
[wasteCardPileView display];
[[Pyramid sharedInstance] checkForWin];
}
/*--------------------------------------------------------------------------
|
| - (BOOL) draggedPile:aCardPile from:wasteCardPileView
|
| returns: (BOOL) YES if it is legal to drag the card.
|
| (BOOL) NO if it is not legal to drag the card.
|
|---------------------------------------------------------------------------
|
| Called by the wastePileCardView when the user tries to drag a card.
|
\--------------------------------------------------------------------------*/
- (BOOL) draggedPile:(CardPile*)aCardPile from:(CardPileView*)wasteCardPileView
{
return YES;
}
/*--------------------------------------------------------------------------
|
| doubleClickedCard:aCard in:aCardPileView
|
|---------------------------------------------------------------------------
|
| Double clicked on a card; discard if it is a King.
|
\--------------------------------------------------------------------------*/
- (void) doubleClickedCard:(Card*)aCard in:(CardPileView*)aCardPileView
{
CardPile* cardPile = [aCardPileView cardPile];
if (aCard && (aCard == [cardPile topCard]) && [aCard value] == CS_KING)
{
[[discardCardPileViewL cardPile] addCard:[cardPile topCard]];
[cardPile removeCard:[cardPile topCard]];
[aCardPileView display];
[discardCardPileViewL display];
[[Pyramid sharedInstance] checkForWin];
}
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.