This is Diagnostic.m in view mode; [Download] [Up]
// Diagnostic.m
// Part of Risk by Mike Ferris
#import "Diagnostic.h"
#import <appkit/Application.h>
#import <appkit/Form.h>
#import <appkit/Button.h>
#import <appkit/Text.h>
#import <appkit/ScrollView.h>
#import <appkit/Panel.h>
#import <objc/List.h>
#import <appkit/publicWraps.h>
#define NIBFILE "Diagnostic.cp/Diagnostic.nib"
@implementation Diagnostic
+ initialize
{
if (self = [Diagnostic class]) {
[self setVersion:1];
}
return self;
}
- initPlayerNum:(int)pnum mover:mover gameSetup:gamesetup mapView:mapview
cardManager:cardmanager
{
[super initPlayerNum:pnum mover:mover gameSetup:gamesetup mapView:mapview
cardManager:cardmanager];
[NXApp loadNibSection:NIBFILE owner:self];
[myPlayerNumForm setIntValue:myPlayerNum at:0];
[diagnosticPanel setBecomeKeyOnlyIfNeeded:YES];
[diagnosticPanel orderFront:self];
return self;
}
- free
{
[diagnosticPanel free];
return [super free];
}
// *****************subclass responsibilities*********************
- yourChooseCountry
{
// choose a random country
id unoccList = [self unoccupiedCountries];
id country;
if ([unoccList count]==0) {
return nil;
}
country = [unoccList objectAt:[rng randMax:[unoccList count]-1]];
[self setNotes:"sent by -yourChooseCountry. "
"yourChooseCountry chose a country at random."];
[self occupyCountry:country];
[unoccList free];
return self;
}
- yourInitialPlaceArmies:(int)numArmies
{
id mycountries = [self myCountries];
id country;
if ([mycountries count]==0) {
return nil;
}
country = [mycountries objectAt:[rng randMax:[mycountries count]-1]];
[self setNotes:"sent by -yourInitialPlaceArmies:. "
"yourInitialPlaceArmies placed all armies in a random "
"country"];
[self placeArmies:numArmies inCountry:country];
[mycountries free];
return self;
}
- yourTurnWithArmies:(int)numArmies andCards:(int)numCards
{
id mycountries = [self myCountries];
id country;
if ([mycountries count]==0) {
return nil;
}
country = [mycountries objectAt:[rng randMax:[mycountries count]-1]];
[self setNotes:"sent by -yourTurnWithArmies: andCards:. "
"yourTurnWithArmies placed all armies in a random "
"country, and didn't deal with cards."];
[self placeArmies:numArmies inCountry:country];
[mycountries free];
return self;
}
- youWereAttacked:country by:(int)player
{
// do nothing. these methods are for advanced players only.
// but we do set the notes and pause if we should.
[self setNotes:"-youWereAttacked: by: was called."];
[self clearArgForms];
[functionCalledForm setStringValue:""];
[returnValueForm setStringValue:""];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return self;
}
- youLostCountry:country to:(int)player
{
// do nothing. these methods are for advanced players only.
// but we do set the notes and pause if we should.
[self setNotes:"-youLostCountry: to: was called."];
[self clearArgForms];
[functionCalledForm setStringValue:""];
[returnValueForm setStringValue:""];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return self;
}
// *****************country utilities*********************
- (BOOL)occupyCountry:country
{
BOOL retVal;
retVal = [super occupyCountry:country];
[self clearArgForms];
[functionCalledForm setStringValue:"(BOOL)occupyCountry:" at:0];
[args1Form setTitle:"country" at:0];
if (country == nil) {
[args1Form setStringValue:"nil" at:0];
} else {
[args1Form setStringValue:[country name] at:0];
}
if (retVal) {
[returnValueForm setStringValue:"YES" at:0];
} else {
[returnValueForm setStringValue:"NO" at:0];
}
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
// *****************card utilities*********************
- (int)playCards:cardList
{
int retVal;
retVal = [super playCards:cardList];
[self clearArgForms];
[functionCalledForm setStringValue:"(int)playCards:" at:0];
[args1Form setTitle:"cardList" at:0];
if (cardList == nil) {
[args1Form setStringValue:"nil" at:0];
} else {
[args1Form setStringValue:"list of cards" at:0];
}
[returnValueForm setIntValue:retVal at:0];
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
// *****************place army utilities*********************
- (BOOL)placeArmies:(int)numArmies inCountry:country
{
BOOL retVal;
retVal = [super placeArmies:numArmies inCountry:country];
[self clearArgForms];
[functionCalledForm setStringValue:"(BOOL)placeArmies: inCountry:" at:0];
[args1Form setTitle:"numArmies" at:0];
[args1Form setIntValue:numArmies at:0];
[args1Form setTitle:"country" at:1];
if (country == nil) {
[args1Form setStringValue:"nil" at:1];
} else {
[args1Form setStringValue:[country name] at:1];
}
if (retVal) {
[returnValueForm setStringValue:"YES" at:0];
} else {
[returnValueForm setStringValue:"NO" at:0];
}
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
// *****************attack utilities*********************
- (BOOL)attackOnceFrom:fromCountry to:toCountry
victory:(BOOL *)victory fromArmies:(int *)fromArmies
toArmies:(int *)toArmies vanquished:(BOOL *)vanquished
weWin:(BOOL *)wewin
{
BOOL retVal;
retVal = [super attackOnceFrom:fromCountry to:toCountry
victory:victory fromArmies:fromArmies
toArmies:toArmies vanquished:vanquished
weWin:wewin];
[self clearArgForms];
[functionCalledForm setStringValue:"(BOOL)attackOnceFrom: to: victory: "
"fromArmies: toArmies: vanquished: weWin:" at:0];
[args1Form setTitle:"fromCountry" at:0];
if (fromCountry == nil) {
[args1Form setStringValue:"nil" at:0];
} else {
[args1Form setStringValue:[fromCountry name] at:0];
}
[args1Form setTitle:"toCountry" at:1];
if (toCountry == nil) {
[args1Form setStringValue:"nil" at:1];
} else {
[args1Form setStringValue:[toCountry name] at:1];
}
[args1Form setTitle:"victory" at:2];
if (*victory) {
[args1Form setStringValue:"YES" at:2];
} else {
[args1Form setStringValue:"NO" at:2];
}
[args1Form setTitle:"fromArmies" at:3];
[args1Form setIntValue:*fromArmies at:3];
[args2Form setTitle:"toArmies" at:0];
[args2Form setIntValue:*toArmies at:0];
[args2Form setTitle:"vanquished" at:1];
if (*vanquished) {
[args2Form setStringValue:"YES" at:1];
} else {
[args2Form setStringValue:"NO" at:1];
}
[args2Form setTitle:"weWin" at:2];
if (*wewin) {
[args2Form setStringValue:"YES" at:2];
} else {
[args2Form setStringValue:"NO" at:2];
}
if (retVal) {
[returnValueForm setStringValue:"YES" at:0];
} else {
[returnValueForm setStringValue:"NO" at:0];
}
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
- (BOOL)attackTimes:(int)times from:fromCountry to:toCountry
victory:(BOOL *)victory fromArmies:(int *)fromArmies
toArmies:(int *)toArmies vanquished:(BOOL *)vanquished
weWin:(BOOL *)wewin
{
BOOL retVal;
retVal = [super attackTimes:times from:fromCountry to:toCountry
victory:victory fromArmies:fromArmies
toArmies:toArmies vanquished:vanquished
weWin:wewin];
[self clearArgForms];
[functionCalledForm setStringValue:"(BOOL)attackTimes: from: to: victory: "
"fromArmies: toArmies: vanquished: weWin:" at:0];
[args1Form setTitle:"times" at:0];
[args1Form setIntValue:times at:0];
[args1Form setTitle:"fromCountry" at:1];
if (fromCountry == nil) {
[args1Form setStringValue:"nil" at:1];
} else {
[args1Form setStringValue:[fromCountry name] at:1];
}
[args1Form setTitle:"toCountry" at:2];
if (toCountry == nil) {
[args1Form setStringValue:"nil" at:2];
} else {
[args1Form setStringValue:[toCountry name] at:2];
}
[args1Form setTitle:"victory" at:3];
if (*victory) {
[args1Form setStringValue:"YES" at:3];
} else {
[args1Form setStringValue:"NO" at:3];
}
[args2Form setTitle:"fromArmies" at:0];
[args2Form setIntValue:*fromArmies at:0];
[args2Form setTitle:"toArmies" at:1];
[args2Form setIntValue:*toArmies at:1];
[args2Form setTitle:"vanquished" at:2];
if (*vanquished) {
[args2Form setStringValue:"YES" at:2];
} else {
[args2Form setStringValue:"NO" at:2];
}
[args2Form setTitle:"weWin" at:3];
if (*wewin) {
[args2Form setStringValue:"YES" at:3];
} else {
[args2Form setStringValue:"NO" at:3];
}
if (retVal) {
[returnValueForm setStringValue:"YES" at:0];
} else {
[returnValueForm setStringValue:"NO" at:0];
}
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
- (BOOL)attackUntilLeft:(int)untilLeft from:fromCountry to:toCountry
victory:(BOOL *)victory fromArmies:(int *)fromArmies
toArmies:(int *)toArmies vanquished:(BOOL *)vanquished
weWin:(BOOL *)wewin
{
BOOL retVal;
retVal = [super attackUntilLeft:untilLeft from:fromCountry to:toCountry
victory:victory fromArmies:fromArmies
toArmies:toArmies vanquished:vanquished
weWin:wewin];
[self clearArgForms];
[functionCalledForm setStringValue:"(BOOL)attackUntilLeft: from: to: "
"victory: fromArmies: toArmies: vanquished: weWin:" at:0];
[args1Form setTitle:"untilLeft" at:0];
[args1Form setIntValue:untilLeft at:0];
[args1Form setTitle:"fromCountry" at:1];
if (fromCountry == nil) {
[args1Form setStringValue:"nil" at:1];
} else {
[args1Form setStringValue:[fromCountry name] at:1];
}
[args1Form setTitle:"toCountry" at:2];
if (toCountry == nil) {
[args1Form setStringValue:"nil" at:2];
} else {
[args1Form setStringValue:[toCountry name] at:2];
}
[args1Form setTitle:"victory" at:3];
if (*victory) {
[args1Form setStringValue:"YES" at:3];
} else {
[args1Form setStringValue:"NO" at:3];
}
[args2Form setTitle:"fromArmies" at:0];
[args2Form setIntValue:*fromArmies at:0];
[args2Form setTitle:"toArmies" at:1];
[args2Form setIntValue:*toArmies at:1];
[args2Form setTitle:"vanquished" at:2];
if (*vanquished) {
[args2Form setStringValue:"YES" at:2];
} else {
[args2Form setStringValue:"NO" at:2];
}
[args2Form setTitle:"weWin" at:3];
if (*wewin) {
[args2Form setStringValue:"YES" at:3];
} else {
[args2Form setStringValue:"NO" at:3];
}
if (retVal) {
[returnValueForm setStringValue:"YES" at:0];
} else {
[returnValueForm setStringValue:"NO" at:0];
}
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
- (BOOL)attackUntilCantFrom:fromCountry to:toCountry
victory:(BOOL *)victory fromArmies:(int *)fromArmies
toArmies:(int *)toArmies vanquished:(BOOL *)vanquished
weWin:(BOOL *)wewin
{
BOOL retVal;
retVal = [super attackUntilCantFrom:fromCountry to:toCountry
victory:victory fromArmies:fromArmies
toArmies:toArmies vanquished:vanquished
weWin:wewin];
[self clearArgForms];
[functionCalledForm setStringValue:"(BOOL)attackUntilCantFrom: to: "
"victory: fromArmies: toArmies: vanquished: weWin:" at:0];
[args1Form setTitle:"fromCountry" at:0];
if (fromCountry == nil) {
[args1Form setStringValue:"nil" at:0];
} else {
[args1Form setStringValue:[fromCountry name] at:0];
}
[args1Form setTitle:"toCountry" at:1];
if (toCountry == nil) {
[args1Form setStringValue:"nil" at:1];
} else {
[args1Form setStringValue:[toCountry name] at:1];
}
[args1Form setTitle:"victory" at:2];
if (*victory) {
[args1Form setStringValue:"YES" at:2];
} else {
[args1Form setStringValue:"NO" at:2];
}
[args1Form setTitle:"fromArmies" at:3];
[args1Form setIntValue:*fromArmies at:3];
[args2Form setTitle:"toArmies" at:0];
[args2Form setIntValue:*toArmies at:0];
[args2Form setTitle:"vanquished" at:1];
if (*vanquished) {
[args2Form setStringValue:"YES" at:1];
} else {
[args2Form setStringValue:"NO" at:1];
}
[args2Form setTitle:"weWin" at:2];
if (*wewin) {
[args2Form setStringValue:"YES" at:2];
} else {
[args2Form setStringValue:"NO" at:2];
}
if (retVal) {
[returnValueForm setStringValue:"YES" at:0];
} else {
[returnValueForm setStringValue:"NO" at:0];
}
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
// *****************post-attack & fortify utilities*********************
- (BOOL)moveArmies:(int)numArmies from:fromCountry to:toCountry
{
BOOL retVal;
retVal = [super moveArmies:numArmies from:fromCountry to:toCountry];
[self clearArgForms];
[functionCalledForm setStringValue:"(BOOL)moveArmies: from: to:" at:0];
[args1Form setTitle:"numArmies" at:0];
[args1Form setIntValue:numArmies at:0];
[args1Form setTitle:"fromCountry" at:1];
if (fromCountry == nil) {
[args1Form setStringValue:"nil" at:1];
} else {
[args1Form setStringValue:[fromCountry name] at:1];
}
[args1Form setTitle:"toCountry" at:1];
if (toCountry == nil) {
[args1Form setStringValue:"nil" at:1];
} else {
[args1Form setStringValue:[toCountry name] at:1];
}
if (retVal) {
[returnValueForm setStringValue:"YES" at:0];
} else {
[returnValueForm setStringValue:"NO" at:0];
}
[diagnosticPanel orderFront:self];
if ([pauseContinueButton state] == 1) {
[self waitForContinue];
}
return retVal;
}
// *****************special diagnostic methods*********************
- waitForContinue
{
int retVal;
NXBeep();
if (![diagnosticPanel isVisible]) [diagnosticPanel orderFront:self];
[pauseContinueButton setEnabled:NO];
retVal = [NXApp runModalFor:diagnosticPanel];
return self;
}
- continueAction:sender
{
[NXApp stopModal];
[pauseContinueButton setEnabled:YES];
return self;
}
- checkAction:sender
{
if ([sender state] == 1) {
[continueButton setEnabled:YES];
} else {
[continueButton setEnabled:NO];
}
return self;
}
- clearArgForms
{
[args1Form setTitle:"arg1:" at:0];
[args1Form setTitle:"arg2:" at:1];
[args1Form setTitle:"arg3:" at:2];
[args1Form setTitle:"arg4:" at:3];
[args2Form setTitle:"arg5:" at:0];
[args2Form setTitle:"arg6:" at:1];
[args2Form setTitle:"arg7:" at:2];
[args2Form setTitle:"arg8:" at:3];
[args1Form setStringValue:"" at:0];
[args1Form setStringValue:"" at:1];
[args1Form setStringValue:"" at:2];
[args1Form setStringValue:"" at:3];
[args2Form setStringValue:"" at:0];
[args2Form setStringValue:"" at:1];
[args2Form setStringValue:"" at:2];
[args2Form setStringValue:"" at:3];
return self;
}
- setNotes:(const char *)noteText
{
[[notesScrollText docView] setText:noteText];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.