This is FishBrain.m in view mode; [Download] [Up]
#import "FishBrain.h" #import "RotImage.h" #ifndef NS3x #import "Thinker.h" #else #import "Thinker3.h" #endif #import <libc.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 { body = mybody; WIDTH = mysize->width; HEIGHT = mysize->height; sizeOfAquar = *drawingSize; srandom(currentTimeInMs()); xspeed = (float)(random() % MAX_X_SPEED) / 10.0 + .1; yspeed = (float)(random() % MAX_Y_SPEED) / 10.0 + .1; xpos = random() % (int)(sizeOfAquar.width-WIDTH); ypos = random() % (int)(sizeOfAquar.height-HEIGHT); 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 + (MAX_X_SPEED/2)))) { xpos = sizeOfAquar.width - (WIDTH + (MAX_X_SPEED/2)); [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 + (MAX_Y_SPEED/2)))) { ypos = sizeOfAquar.height - (HEIGHT + (MAX_Y_SPEED/2)); [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.