This is ComputerLogic.m in view mode; [Download] [Up]
// ComputerLogic.m
// Part of Risk by Mike Ferris
#import "ComputerLogic.h"
#import "MapView.h"
#import "Mover.h"
#import "RiskController.h"
#import "GameSetup.h"
#import "Country.h"
#import "Random.h"
#import <objc/List.h>
#import <sys/time.h>
#import <libc.h>
#import <math.h>
@implementation ComputerLogic
+ initialize
{
if (self == [ComputerLogic class]) {
[self setVersion:1];
}
return self;
}
- init
{
self = [super init];
rng = [[Random allocFromZone:[self zone]] init];
return self;
}
- free
{
[rng free];
return [super free];
}
- randomCountries:sender
{
id cl;
long int i;
int pl=0;
while ([theGameSetup strategyOfPlayer:pl] == S_NOTPLAYING) {
pl = (pl+1)%6;
}
cl = [[theMapView countryList] copy];
for (i=0; i<[cl count]; ) {
if ([[cl objectAt:i] player] != -1) {
// take it out of the list and don't advance the counter
[cl removeObjectAt:i];
} else {
// leave it and advance the counter
i++;
}
}
while ([cl count]>0) {
i = [rng randMax:[cl count]-1];
[[cl removeObjectAt:i] setPlayer:pl andArmies:1];
pl = (pl+1)%6;
while ([theGameSetup strategyOfPlayer:pl] == S_NOTPLAYING) {
pl = (pl+1)%6;
}
}
[cl free];
return self;
}
-rollDiceAttacker:(int *)aDice :(int)aNumDice
defender:(int *)dDice :(int)dNumDice
// aDice will be three ints big, dDice will be 2 ints big
{
int i;
int temp1=0, temp2=0, temp3=0;
// fill the arrays
for (i=0;i<aNumDice;i++) {
aDice[i]=[rng rollDie:6];
}
for (i=aNumDice;i<3;i++) {
aDice[i]=0;
}
for (i=0;i<dNumDice;i++) {
dDice[i]=[rng rollDie:6];
}
for (i=dNumDice;i<2;i++) {
dDice[i]=0;
}
// sort the arrays
if ((aDice[0]>=aDice[1]) && (aDice[0]>=aDice[2])) {
temp1 = aDice[0];
if (aDice[1]>=aDice[2]) {
temp2 = aDice[1];
temp3 = aDice[2];
} else {
temp2 = aDice[2];
temp3 = aDice[1];
}
} else if ((aDice[1]>=aDice[0]) && (aDice[1]>=aDice[2])) {
temp1 = aDice[1];
if (aDice[0]>=aDice[2]) {
temp2 = aDice[0];
temp3 = aDice[2];
} else {
temp2 = aDice[2];
temp3 = aDice[0];
}
} else if ((aDice[2]>=aDice[0]) && (aDice[2]>=aDice[1])) {
temp1 = aDice[2];
if (aDice[0]>=aDice[1]) {
temp2 = aDice[0];
temp3 = aDice[1];
} else {
temp2 = aDice[1];
temp3 = aDice[0];
}
}
aDice[0]=temp1; aDice[1]=temp2; aDice[2]=temp3;
if (dDice[1]>dDice[0]) {
temp1 = dDice[1];
dDice[1]=dDice[0];
dDice[0]=temp1;
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.