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.