This is DrawPileDelegate.m in view mode; [Download] [Up]
#import "DrawPileDelegate.h" #import <Solitaire/CardSet.h> @implementation DrawPileDelegate - (void) setDiscardCardPileView:theView { discardCardPileView = theView; } - (void) setDrawCardCount:(int)theCount { maxIndex = theCount; } - (void) clickedCard:(Card*)aCard in:(CardPileView*)drawCardPileView { CardPile* discardCardPile = [discardCardPileView cardPile]; CardPile* drawCardPile = [drawCardPileView cardPile]; int drawIndex; Card* drawCard; // Two cases where aCard will be nil: // // (1) if Draw Pile is empty // // (2) if Draw Pile is NOT empty but user has clicked on an exposed // area of the pile // // This is all pretty ugly because we want the draw-three option to // behave "nicely." if (aCard) { if (maxIndex == 1) { if (drawCard = [drawCardPile dealTopCard]) { [drawCard flip]; [discardCardPile addCard:drawCard]; } } else { int extra; [recycleCardPile addPile:discardCardPile]; [discardCardPile empty]; for (drawIndex = 0; drawIndex < maxIndex; drawIndex++) { if (drawCard = [drawCardPile dealTopCard]) { [drawCard flip]; [discardCardPile addCard:drawCard]; } } extra = maxIndex - [discardCardPile cardCount]; for (drawIndex = 0; drawIndex < extra; drawIndex++) { if (aCard = [recycleCardPile dealTopCard]) { [discardCardPile insertCard:aCard at:CS_BOTTOM]; } } } } else if ([drawCardPile cardCount] == 0) { if (maxIndex == 1) { [drawCardPile addPile:discardCardPile]; [discardCardPile empty]; [drawCardPile flip]; } else { [recycleCardPile addPile:discardCardPile]; [discardCardPile empty]; [recycleCardPile flip]; [drawCardPile addPile:recycleCardPile]; [recycleCardPile empty]; } } [discardCardPileView display]; [drawCardPileView display]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.