This is FTGameDelegate.m in view mode; [Download] [Up]
/* indent:4 tabsize:8 font:fixed-width */
#import "FTGameDelegate.h"
#import "FTSuitDelegate.h"
#import "../Solitaire/Solitaire.h"
#import "FortyThieves.h"
@implementation FTGameDelegate
- setSuitCardPileViews:(id [])theViews
{
int i;
for (i=0; i<8; i++)
suitCardPileViews[i] = *(theViews + i);
return self;
}
- doubleClickedCard:aCard in:aCardPileView
{
int i;
id cardPile = [aCardPileView cardPile];
if ((aCard == [cardPile cardAt:CS_TOP]) && (![aCard isFaceUp]))
{
[aCard flip];
[aCardPileView display];
}
else if (aCard == [cardPile cardAt:CS_TOP])
{
for (i=0; i<8; i++)
{
[[suitCardPileViews[i] delegate]setDoubleClickCheck];
if ([[suitCardPileViews[i] delegate] canAcceptPile:cardPile
from:aCardPileView
in:suitCardPileViews[i]])
{
[[suitCardPileViews[i] cardPile]
addCard:[cardPile cardAt:CS_TOP]];
[cardPile removeCard:[cardPile cardAt:CS_TOP]];
[aCardPileView display];
[suitCardPileViews[i] display];
[SolGameController() checkForWin];
break;
}
}
}
return self;
}
- (BOOL)draggedPile:aCardPile from:aCardPileView
{
id cardPile = [aCardPileView cardPile];
id theCard = [aCardPile cardAt:CS_TOP];
// only move the top card
if([cardPile cardAt:CS_TOP] == theCard)
{
return YES;
}
return NO;
}
- (BOOL)canAcceptPile:aCardPile from:sender in:aCardPileView
{
id droppingCard = [aCardPile cardAt:CS_BOTTOM];
id targetCard = [[aCardPileView cardPile] cardAt:CS_TOP];
if (targetCard)
{
if (([targetCard value] == [droppingCard value] + 1) &&
([targetCard suit] == [droppingCard suit]))
{
return YES;
}
}
else
{
return YES;
}
return NO;
}
- getOffset:(float *) xOffset :(float *) yOffset forSize:(CardSize)aSize
{
*xOffset = 0.0;
if (aSize == CS_SMALL)
*yOffset = 20.0;
else
*yOffset = 25.0;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.