This is DrawPileDelegate.m in view mode; [Download] [Up]
#import "DrawPileDelegate.h" #import "../Solitaire/CardSet.subproj/cardset.h" @implementation DrawPileDelegate - setDiscardCardPileView:theView { discardCardPileView = theView; return self; } - setDrawCardCount:(int)theCount { maxIndex = theCount; return self; } - clickedCard:aCard in:drawCardPileView { id discardCardPile = [discardCardPileView cardPile]; id drawCardPile = [drawCardPileView cardPile]; int drawIndex; id 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 cardAt:CS_TOP]) { [drawCardPile removeCard:drawCard]; [drawCard flip]; [discardCardPile addCard:drawCard]; } } else { int extra; [recycleCardPile addPile:discardCardPile]; [discardCardPile empty]; for (drawIndex = 0; drawIndex < maxIndex; drawIndex++) { if (drawCard = [drawCardPile cardAt:CS_TOP]) { [drawCardPile removeCard:drawCard]; [drawCard flip]; [discardCardPile addCard:drawCard]; } } extra = maxIndex - [discardCardPile cardCount]; for (drawIndex = 0; drawIndex < extra; drawIndex++) { if (aCard = [recycleCardPile cardAt:CS_TOP]) { [recycleCardPile removeCard:aCard]; [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]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.