This is HumanPlayer.m in view mode; [Download] [Up]
// HumanPlayer.m
// Project: Cribbage
// Stephan Wacker
// 93-09-16
#import "deck.h"
#import "cribbage.h"
#import "HumanPlayer.h"
#import "Cribbage.h"
#import "Deck.h"
#import "Score.h"
#import "LocalizableStrings.h"
@implementation HumanPlayer
- setScoreMgr: aMgr
{
scoreMgr = aMgr;
return self;
}
- (char *) pronoun
{
return "You";
}
- (char *) possessivePronoun
{
return "your";
}
- (char *) reflexivePronoun
{
return "you";
}
- prepareForDiscarding
{
[self enableHand: @selector(markForDiscard:) type: NX_TOGGLE];
foldedCards = 0;
// msg( ">> clearing foldedCards: %d", foldedCards );
return self;
}
- markForDiscard: sender
{
id cell = [sender selectedCell];
int state = [cell intValue];
if( cell == nil ) {
// ignore this message
} else {
foldedCards += (state == 1 ? +1 : -1);
// msg( ">> card[%d] changes state to %d, foldedCards = %d",
// [cell tag], state, foldedCards );
[discardButton setEnabled: (foldedCards == (FULLHAND - CINHAND))];
}
return self;
}
- discard
{
int i;
for( i = FULLHAND-1; i >= 0; i-- ) { /* COUNT BACKWARDS !!! */
if( [[cardsInHand findCellWithTag: i] intValue] == 1 ) {
// [self displayCardAt: i];
[deck putIntoCrib: hand[i]];
face[i] = FACE_NONE;
hand[i].rank = hand[i].suit = EMPTY;
}
}
[self sortHand];
[self displayHand];
return self;
}
- prepareForPegging
{
[self enableHand: @selector(play:) type: NX_MOMENTARYPUSH];
return [super prepareForPegging];
}
- playOneCard
//
// The player should select a card or press the GO button.
// If there are no more cards, he will go automatically.
//
{
if( ! [self anyCards] ) {
[self go];
} else {
if( !quiet ) {
msg( PLAY_A_CARD_OR_GO );
}
}
return self;
}
- play: sender
{
id cell = [sender selectedCell];
int tag = [cell tag];
if( cell == nil ) {
// ignore this message
} else if( [self validCardAt: tag] ) {
[self playCardAt: tag];
} else {
NXBeep();
msg( TOTAL_EXCEEDS_31 );
}
return self;
}
- go: sender
{
if( [self canPlay] ) {
NXBeep();
} else {
[self go];
}
return self;
}
////////////////////////////////////////////////////////////////////////
- doScoring: (char *) what points: (int) points
{
correctScore = points;
scoreWhat = what;
[scoreMgr doScoring: what for: self];
return self;
}
- manualScore: (int) score
{
if( score == correctScore ) {
[super doScoring: scoreWhat points: score];
} else {
// It's a case for the referee...
[cribbage wrongScore: self correct: correctScore incorrect: score];
}
return self;
}
////////////////////////////////////////////////////////////////////////
- enableHand: (SEL) anAction type: (int) aButtonType
{
int i;
for( i = 0; i < FULLHAND; i++ ) {
id cell = [cardsInHand findCellWithTag: i];
[cell setType: aButtonType];
[cell setHighlightsBy: [cell highlightsBy]
& ~(NX_CHANGEGRAY|NX_CHANGEBACKGROUND)];
[cell setEnabled: (face[i] != FACE_NONE)];
}
[cardsInHand setAction: anAction];
[cardsInHand setTarget: self];
[self displayHand];
return self;
}
- disableHand
{
[cardsInHand setEnabled: NO];
return self;
}
@end // HumanPlayer
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.