This is FishBrain.m in view mode; [Download] [Up]
#import "FishBrain.h"
#import "DuoImage.h"
#import "Thinker.h"
#import <libc.h>
#import <streams/streams.h>
@implementation FishBrain
- changeXDirection
{
direction = direction ^
(((direction & RIGHT) == RIGHT) ? RIGHT : LEFT);
xspeed = (float)(random() % max_X_Speed) / 10.0 + .1;
[body flip:HORIZONTAL];
return self;
}
- changeYDirection
{
direction = direction ^ (((direction & UP) == UP) ? UP : DOWN);
yspeed = (float)(random() % max_Y_Speed) / 10.0 + .1;
return self;
}
-init:(NXSize *)drawingSize fishSize:(NXSize *)mysize owner:mybody
{
const char *ptr;
int fishSpeed = 10;
ptr = NXGetDefaultValue([NXApp appName], "AquariumFishSpeed");
if (ptr) sscanf (ptr, "%d", &fishSpeed);
max_X_Speed = fishSpeed * 5;
max_Y_Speed = fishSpeed * 3;
body = mybody;
sizeOfBody = *mysize;
sizeOfAquar = *drawingSize;
WIDTH = sizeOfBody.width;
HEIGHT = sizeOfBody.height;
srandom(currentTimeInMs());
xspeed = (random() % max_X_Speed) / 10.0 + .1;
yspeed = (random() % max_Y_Speed) / 10.0 + .1;
xpos = (random() % 100) * (sizeOfAquar.width - WIDTH) / 100.0;
ypos = (random() % 100) * (sizeOfAquar.height - HEIGHT) / 100.0;
direction = direction ^ (random() % 2) ? RIGHT : LEFT;
direction = direction ^ (random() % 2) ? UP : DOWN;
if ((direction & LEFT) == LEFT) [self changeXDirection];
return self;
}
-(float)getXPos
{
if ((direction & LEFT) == LEFT) {
if (xpos < 0.0) {
xpos = 0.0;
[self changeXDirection];
return (xpos += xspeed);
} else {
return (xpos -= xspeed);
}
} else {
if (xpos > (sizeOfAquar.width - WIDTH) ) {
xpos = sizeOfAquar.width - WIDTH;
[self changeXDirection];
return (xpos -= xspeed);
} else {
return (xpos += xspeed);
}
}
return xpos;
}
-(float)getYPos
{
if ((direction & DOWN) == DOWN) {
if (ypos < 0.0) {
ypos = 0.0;
[self changeYDirection];
} else {
return (ypos -= yspeed);
}
} else {
if (ypos > (sizeOfAquar.height - HEIGHT) ) {
ypos = sizeOfAquar.height - HEIGHT;
[self changeYDirection];
} else {
return (ypos += yspeed);
}
}
return ypos;
}
-(float)getXSpeed
{
return xspeed;
}
-(float)getYSpeed
{
return yspeed;
}
-(float)getAngle
{
return angle;
}
-(int)getDirection
{
return direction;
}
-viewDidResize:(NXSize *)newSize
{
sizeOfAquar = *newSize;
return self;
}
-(NXPoint)getCurrentPoint
{
NXPoint tmp;
tmp.x = xpos;
tmp.y = ypos;
return tmp;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.