This is ErgoApp.m in view mode; [Download] [Up]
#import "ErgoApp.h"
#import <appkit/Panel.h> /* for NXRunAlertPanel() */
#import <appkit/View.h> /* for subviews message */
#import <appkit/nextstd.h> /* for sleep() */
#import <objc/List.h> /* for makeObjectsPerform: messages */
@implementation ErgoApp
- allowOtherColorMove {
++numberThatAllowed;
return self;
}
- gameOverDueTo: (short) type winner: (short) winType {
[self makeSquaresPerform: @selector(gameOver)];
[boardWindow display];
NXPing(); /* this and below make final results visible to user */
sleep(1); /* ties v only occur with even #s of takable squares */
NXRunAlertPanel(winType == GAME_TIED ? "Tie Game!" : winType == WHITE_WINS
? "White Wins" : "Black Wins",
type == BOARD_FILLED ? "The board is filled." : type == NO_OPPONENTS
? "Complete and total victory!" : "The timer ran out.",
NULL, NULL, NULL);
return [self terminate: self];
}
- highlightedSquare {
return highlightedSquare;
}
- (BOOL) isSomeoneSelected {
return isSomeoneSelected;
}
- (BOOL) isWhiteMove {
return isWhiteMove;
}
- letOtherColorMove { /* someone else will check if other side can move */
numberThatAllowed = 0;
[self makeSquaresPerform: @selector(letOtherColorMove)];
if (numberThatAllowed > 1) { /* at least 1 if ScoreView returned to us */
[self setIsWhiteMove: ![self isWhiteMove]];
[self makeSquaresPerform: @selector(startOfNewMove)];
} /* else, don't let the other color move! */
return [boardWindow display];
} /* maybe re-highlight current square if no side-switch? */
/* (and on null move pull to different square?) */
- makeSquaresPerform: (SEL) aMessage {
return [[self viewList] makeObjectsPerform: aMessage];
}
- makeSquaresPerform: (SEL) aMessage with: sender {
return [[self viewList] makeObjectsPerform: aMessage with: sender];
}
- setHighlightedSquare: aSquare {
highlightedSquare = aSquare;
return self;
}
- setIsSomeoneSelected: (BOOL) state {
isSomeoneSelected = state;
return self;
}
- setIsWhiteMove: (BOOL) state {
isWhiteMove = state;
return self;
}
/* Private methods: */
- appDidInit: sender { /* our return value is ignored, so any is OK */
isWhiteMove = YES;
return [self makeSquaresPerform: @selector(appDidInit)];
}
- viewList {
return [[boardWindow contentView] subviews];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.