This is SpaxeWars.m in view mode; [Download] [Up]
#import "SpaxeWars.h" #import "BackView.h" #import "Ship.h" #import "ActorMgr.h" #import "SoundMgr.h" #import "SWBullet.h" #import "SWShip.h" #import "SWSpaceGen.h" #import "SWSun.h" #import "SWMeteor.h" #import "GOLetter.h" #import "Explosion.h" #import "Thinker.h" int xx_swbullet, xx_swship, xx_swspace; float sw_gravity; int sw_bulletSpeed, sw_bounce, sw_meteors, sw_nastyShots; int sw_bulletMass; @implementation SpaxeWars - newGame { dartKills = clawKills = 0; [[clawKillsText setIntValue:clawKills] display]; [[dartKillsText setIntValue:dartKills] display]; return self; } // invoked only by the actor manager - _createLevel:(int)lev { int i; NXRect r; char title[40]; goToNextLevel = explosionCount = goodBullets = badBullets = 0; goodShip = [actorMgr newActor:xx_swship for:self tag:GOOD]; badShip = [actorMgr newActor:xx_swship for:self tag:EVIL]; space = [actorMgr newActor:xx_swspace for:self tag:0]; if (sun) sun = [actorMgr newActor:(int)[SWSun class] for:self tag:0]; for (i=0; i<sw_meteors; i++) [actorMgr newActor:(int)[SWMeteor class] for:self tag:0]; [mainView getBounds:&r]; [space newSize:&r.size]; sprintf(title,"Spaxe Wars"); [[mainView window] setTitle:title]; return self; } - infoView { return infoView; } - didActivate:(Actor *)theActor { if(theActor->actorType == xx_explosion) explosionCount++; else if(theActor->actorType == xx_swbullet) { (theActor->theta == 0.) ? goodBullets++ : badBullets++; } else { } return self; } - didRetire:(Actor *)theActor { if(theActor->actorType == xx_swship) { if (theActor->alliance == GOOD) { [[clawKillsText setIntValue:++clawKills] display]; } else { [[dartKillsText setIntValue:++dartKills] display]; } if (dartKills >= 10 || clawKills >= 10) { if ([actorMgr gameStatus] != GAME_DYING) [GOLetter gameOver:self]; [actorMgr setGameStatus: GAME_DYING]; goToNextLevel = 0; } else goToNextLevel = 1; } else if(theActor->actorType == xx_explosion) { if ((--explosionCount <= 0) && goToNextLevel) { [actorMgr requestLevel: 1]; } } else if(theActor->actorType == xx_swbullet) { (theActor->theta == 0.) ? goodBullets-- : badBullets--; } else { } return self; } - keyDown:(NXEvent *)theEvent { if (theEvent->data.key.repeat > 0) return self; switch(theEvent->data.key.charCode) { case 'z': // rotate left [goodShip setTurning:LEFT down:YES time:theEvent->time]; break; case 'x': // rotate right [goodShip setTurning:RIGHT down:YES time:theEvent->time]; break; case '.': // fire [goodShip fire]; break; case ',': // thrust [goodShip setThrusting:YES time:theEvent->time]; break; case ' ': // shields [goodShip setShields:1]; break; case '1': // rotate left [badShip setTurning:LEFT down:YES time:theEvent->time]; break; case '2': // rotate right [badShip setTurning:RIGHT down:YES time:theEvent->time]; break; case '9': // fire [badShip fire]; break; case '6': // thrust [badShip setThrusting:YES time:theEvent->time]; break; case '\003': // shields [badShip setShields:1]; break; } return self; } - keyUp:(NXEvent *)theEvent { switch(theEvent->data.key.charCode) { case 'z': // rotate left [goodShip setTurning:LEFT down:NO time:theEvent->time]; break; case 'x': // rotate right [goodShip setTurning:RIGHT down:NO time:theEvent->time]; break; case ',': // thrust [goodShip setThrusting:NO time:theEvent->time]; break; case ' ': // shields [goodShip setShields:0]; break; case '1': // rotate left [badShip setTurning:LEFT down:NO time:theEvent->time]; break; case '2': // rotate right [badShip setTurning:RIGHT down:NO time:theEvent->time]; break; case '6': // thrust [badShip setThrusting:NO time:theEvent->time]; break; case '\003': // shields [badShip setShields:0]; break; } return self; } - scenarioSelected { goodShip = [actorMgr newActor:xx_swship for:self tag:GOOD]; badShip = [actorMgr newActor:xx_swship for:self tag:EVIL]; [goodShip scenarioSelected]; [badShip scenarioSelected]; return self; } - scenarioDeselected { return self; } - newSize:(NXSize *)s { [space newSize:s]; return self; } - (COLLISION_PARADIGM)collisionParadigm { return GOOD_V_EVIL; } - init { char path[256]; id cv, subviews; [super init]; if ([[NXBundle bundleForClass:[self class]] getPath:path forResource:"spaxewars" ofType:"nib"]) { [NXApp loadNibFile:path owner:self withNames:NO fromZone:[self zone]]; cv = [uselessBox contentView]; subviews = [cv subviews]; while ([subviews count] > 0) [scoreView addSubview:[subviews objectAt:0]]; } xx_swbullet = (int)[SWBullet class]; xx_swship = (int)[SWShip class]; xx_swspace = (int)[SWSpaceGen class]; [self adjustSettings:self]; [[NXApp delegate] addImageResource:"explosionM" for: [Explosion class]]; [[NXApp delegate] addImageResource:"explosionS" for: [Explosion class]]; [[NXApp delegate] addSoundResource: SHIPSND]; return self; } - tile { NXRect r; float f; [gcontentView getBounds:&r]; r.size.width -= 60; f = r.size.width; [abackView setFrame:&r]; [gcontentView getBounds:&r]; r.size.width = 60; r.origin.x = f; [scoreView setFrame:&r]; [gcontentView addSubview:abackView]; [gcontentView addSubview:scoreView]; return abackView; } - (int) bullets : (int) type { return (type == GOOD) ? goodBullets : badBullets; } - adjustSettings:sender { switch([gravityMatrix selectedRow]) { case 0: sw_gravity = 30000; break; case 1: sw_gravity = 0; break; case 2: sw_gravity = -30000; break; case 3: sw_gravity = -66000; break; } switch([bulletMatrix selectedRow]) { case 0: sw_bulletSpeed = 13; break; case 1: sw_bulletSpeed = 22; break; case 2: sw_bulletSpeed = 34; break; } if ([[settingsMatrix cellAt:0:0] state]) { // sun enabled if (!sun) sun = [actorMgr newActor:(int)[SWSun class] for:self tag:0]; } else { if (sun) [actorMgr destroyActor:sun]; sun = nil; } sw_bounce = ([[settingsMatrix cellAt:1:0] state]); sw_nastyShots = ([[settingsMatrix cellAt:2:0] state]); sw_bulletMass = ([[settingsMatrix cellAt:3:0] state]); sw_meteors = ([meteorsSlider intValue]); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.