This is StockCardPileDelegate.m in view mode; [Download] [Up]
/* indent:4 tabsize:8 font:fixed-width */ #import "StockCardPileDelegate.h" #import "../Solitaire/CardSet.subproj/cardset.h" #import "Pyramid.h" #import "localstrings.h" #import "AlertPanel.h" @implementation StockCardPileDelegate /*---------------------------------------------------------------------------- | | Delegate-setting methods | \---------------------------------------------------------------------------*/ - setDiscardLeft:left discardRight:right waste:waste { discardCardPileViewL = left; discardCardPileViewR = right; wasteCardPileView = waste; return self; } /*-------------------------------------------------------------------------- | | - clickedCard:aCard in:stockCardPileView | | returns: (id) self | |--------------------------------------------------------------------------- | | Called by the StockPileCardView when the mouse is clicked on the pile. | \---------------------------------------------------------------------------*/ - clickedCard:aCard in:stockCardPileView { id wasteCardPile = [wasteCardPileView cardPile]; id stockCardPile = [stockCardPileView cardPile]; /*----------------------------------------------------------------------- | | If the stock pile is empty, turn over the waste pile | and move the cards pack to the stock pile. | \-----------------------------------------------------------------------*/ if (!aCard) { /*----------------------------------------------------------------- | | The pile may not actually be empty; the user may | have clicked on an exposed area of the pile view. | \----------------------------------------------------------------*/ if ([stockCardPile cardCount] > 0) { return self; } if ([SolGameController() dealCount] < 3) { [wasteCardPile flip]; [stockCardPile addPile:wasteCardPile]; [wasteCardPile empty]; [wasteCardPileView display]; [stockCardPileView display]; [SolGameController() incDealCount]; } else { NXRunAlertPanel(LOCALIZED_GAME_NAME, LOCALIZED_NO_FLIP, NULL, NULL, NULL); return self; } } else /*----------------------------------------------------------------- | | If the top card was clicked, and it was face-down, | turn it face-up. Then, move it to the waste pile. | If this card and the card currently on top of the waste | pile add to 13, give the user the option to leave it on | the waste pile, or to discard them both. \---------------------------------------------------------------*/ if ((aCard == [stockCardPile cardAt:CS_TOP]) && (![aCard isFaceUp])) { id wasteCard = [wasteCardPile cardAt:CS_TOP]; [aCard flip]; [stockCardPileView display]; if (wasteCard && ([aCard value] + [wasteCard value] == 11)) { int result; [[alertPanel first] setTitle:LOCALIZED_LEAVE_ON_WASTE]; [[alertPanel second] setTitle:LOCALIZED_REMOVE_THEM]; [[alertPanel message] setStringValue:LOCALIZED_TURN_MATCH]; [[alertPanel alert] setStringValue:LOCALIZED_GAME_NAME]; [alertPanel run:self]; result = [alertPanel lastResult]; if (result == NX_ALERTALTERNATE) { id leftDiscardPile = [discardCardPileViewL cardPile]; id rightDiscardPile = [discardCardPileViewR cardPile]; [stockCardPile removeCard:aCard]; [leftDiscardPile addCard:aCard]; [wasteCardPile removeCard:wasteCard]; [rightDiscardPile addCard:wasteCard]; [discardCardPileViewL display]; [discardCardPileViewR display]; [stockCardPileView display]; [wasteCardPileView display]; [SolGameController() checkForWin]; return self; } } [stockCardPile removeCard:aCard]; [wasteCardPile addCard:aCard]; [stockCardPileView display]; [wasteCardPileView display]; [SolGameController() checkForWin]; } return self; } /*-------------------------------------------------------------------------- | | - (BOOL) canAcceptPile:aCardPile from:sender in:stockCardPileView | | 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 StockPileCardView when a card pile wants to be dropped | on this pile. | \--------------------------------------------------------------------------*/ - (BOOL)canAcceptPile:aCardPile from:sender in:stockCardPileView { return NO; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.