This is Table.m in view mode; [Download] [Up]
// Table.m
// Project: Cribbage
// Stephan Wacker
// 93-06-21
#import "deck.h"
#import "cribbage.h"
#import "Table.h"
@implementation Table
- initFrame: (const NXRect *) frameRect
//
// Background is transparent.
//
{
[super initFrame: frameRect];
[self setOpaque: NO];
return self;
}
- clearSum
{
sum = 0;
[sumField setIntValue: sum];
goCards = nCards;
return self;
}
- empty
{
nCards = 0;
[self clearSum];
[self displayFromOpaqueAncestor: &bounds : 1 : NO];
return self;
}
- (int) playCard: (CARD) aCard
{
int result = [self score: aCard];
cards[nCards++] = aCard;
[self lockFocus];
[self displayCardAt: nCards-1];
[self unlockFocus];
sum += VAL( aCard.rank );
[sumField setIntValue: sum];
return result;
}
- (int) score: (CARD) aCard
{
return pegscore( aCard, cards+goCards, nCards-goCards, sum );
}
- (int) sumPlayed
{
return sum;
}
////////////////////////////////////////////////////////////////////////
- drawSelf: (const NXRect *) rects: (int) rectCount
//
// Display all cards played so far.
//
{
int i;
for( i = 0; i < nCards; i++ ) {
[self displayCardAt: i];
}
return self;
}
- displayCardAt: (int) i
//
// Draw one played card. All cards must have the same size!
//
{
const char *iconName;
NXSize size;
NXPoint point;
NXImage *image;
iconName = [self iconOf: cards[i]];
image = [NXImage findImageNamed: iconName];
[image getSize: &size];
point.x = i * (bounds.size.width - size.width) / (2*CINHAND-1);
point.y = i * (bounds.size.height - size.height) / (2*CINHAND-1);
point.y = bounds.size.height - point.y - size.height;
[image composite: NX_SOVER toPoint: &point];
return self;
}
////////////////////////////////////////////////////////////////////////
- hideCards: matrix
{
[matrix setEnabled: NO];
[[matrix cellList] makeObjectsPerform: @selector(setTransparent:) with: (id) (int) YES];
[matrix display];
return self;
}
- hideCard: buttonCell
//
// Make the buttonCell invisible.
// The argument buttonCell may be a ButtonCell or a Button.
//
{
id cell = ( [buttonCell isKindOf: [Cell class]]
? buttonCell : [buttonCell cell] );
[cell setEnabled: NO];
[cell setTransparent: YES];
[[cell controlView] display];
return self;
}
- downCard: buttonCell
{
id cell = ( [buttonCell isKindOf: [Cell class]]
? buttonCell : [buttonCell cell] );
[cell setIntValue: 1];
[cell setTransparent: NO];
// [[cell controlView] display];
return self;
}
- upCard: buttonCell card: (CARD) card
{
id cell = ( [buttonCell isKindOf: [Cell class]]
? buttonCell : [buttonCell cell] );
[cell setIcon: [self iconOf: card]];
[cell setIntValue: 0];
[cell setTransparent: NO];
// [[cell controlView] display];
return self;
}
- (const char *) iconOf: (CARD) card
{
static char buf[ 40 ];
switch( card.rank ) {
case ACE : strcpy( buf, "ace" ); break;
case TWO : strcpy( buf, "two" ); break;
case THREE : strcpy( buf, "three" ); break;
case FOUR : strcpy( buf, "four" ); break;
case FIVE : strcpy( buf, "five" ); break;
case SIX : strcpy( buf, "six" ); break;
case SEVEN : strcpy( buf, "seven" ); break;
case EIGHT : strcpy( buf, "eight" ); break;
case NINE : strcpy( buf, "nine" ); break;
case TEN : strcpy( buf, "ten" ); break;
case JACK : strcpy( buf, "jack" ); break;
case QUEEN : strcpy( buf, "queen" ); break;
case KING : strcpy( buf, "king" ); break;
default : return "illegal Rank";
}
strcat( buf, "Of" );
switch( card.suit ) {
case SPADES : strcat( buf, "Spades" ); break;
case HEARTS : strcat( buf, "Hearts" ); break;
case DIAMONDS : strcat( buf, "Diamonds" ); break;
case CLUBS : strcat( buf, "Clubs" ); break;
default : return "illegal Suit";
}
return buf;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.