// // JumpGameMode.m // Cart Collect // // Created by Starla Insigna on 8/17/11. // Copyright 2011 Four Island. All rights reserved. // #import "JumpGameMode.h" #import "SimpleAudioEngine.h" #import "FallingObject.h" #import "Cherry.h" #import "Bottle.h" #import "OneUp.h" #import "Rock.h" #import "GameOverScene.h" #define kMinimumGestureLength 25 @interface LedgeFactory : NSObject { UIImage* leftSprite; UIImage* midSprite; UIImage* rightSprite; UIImage* singleSprite; } - (id)init; - (UIImage*)createLedgeWithWidth:(int)width height:(int)height; @end @implementation JumpGameMode - (id)init { self = [super init]; if (nil != self) { CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"]; backgroundImage.position = ccp(240, 160); [self addChild:backgroundImage z:-1]; water = [CCSprite spriteWithFile:@"water.png"]; water.position = ccp(240, -60); [self addChild:water]; cart.sprite.position = ccp(120, 22+64); //86 cart.falling = YES; cart.delegate = self; self.isTouchEnabled = YES; waterTick = 0; wave = NO; factory = [[LedgeFactory alloc] init]; ledges = [[NSMutableSet alloc] init]; CCSprite* ledge = [CCSprite spriteWithTexture:[[CCTexture2D alloc] initWithImage:[factory createLedgeWithWidth:6 height:2]]]; ledge.position = ccp(80, 32); [self addChild:ledge]; [ledges addObject:ledge]; ledgeScrollSpeed = 0; ledgeAccelerationRate = 20.0f; addSpeed = 2.5f; } return self; } - (void)onEnterTransitionDidFinish { [super onEnterTransitionDidFinish]; [self schedule:@selector(accelerateLedgeScrolling) interval:ledgeAccelerationRate]; [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; [self schedule:@selector(incrementScore) interval:1.0f]; [self scheduleDelayedAction:^{ wave = YES; } delay:60.0f]; } - (void)tick:(ccTime)dt { NSMutableSet* discardedSet = [NSMutableSet set]; int rightmost = 0; int rightwidth = 0; for (CCSprite* sprite in ledges) { sprite.position = ccp(sprite.position.x - ledgeScrollSpeed, sprite.position.y); if ((sprite.position.x + sprite.boundingBox.size.width/2) < 0) { [discardedSet addObject:sprite]; [self removeChild:sprite cleanup:YES]; } if (sprite.position.x > rightmost) { rightmost = sprite.position.x; rightwidth = sprite.boundingBox.size.width/2; } } for (FallingObject* object in objects) { if (waterTick > 0) { object.sprite.position = ccp(object.sprite.position.x, MAX(object.sprite.position.y, water.position.y+80+11)); } else { object.sprite.position = ccp(object.sprite.position.x-ledgeScrollSpeed, object.sprite.position.y); } } [ledges minusSet:discardedSet]; if (rightmost <= 480) { CCSprite* ledge = [CCSprite spriteWithTexture:[[CCTexture2D alloc] initWithImage:[factory createLedgeWithWidth:(arc4random() % 10) height:2]]]; ledge.position = ccp(rightmost + rightwidth + ledge.boundingBox.size.width/2+64, 32); [self addChild:ledge]; [ledges addObject:ledge]; } if ([self cartIsObstructed:cart]) { cart.sprite.position = ccp(cart.sprite.position.x-ledgeScrollSpeed, cart.sprite.position.y); } int lastScore = score; [super tick:dt]; if (cart.sprite.position.y == (0-cart.sprite.boundingBox.size.height/2)) { [self setLives:self.lives-1]; [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]]; cart.sprite.position = ccp(cart.sprite.position.x, 320 + cart.sprite.boundingBox.size.height/2); } if (lives == 0) { [self unscheduleAllSelectors]; [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:@"Jump"]]]; } else if (score > lastScore) { if ((lastScore < 240) && (score >= 240)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.6f]; addSpeed = 0.6f; } else if ((lastScore < 180) && (score >= 180)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.7f]; addSpeed = 0.7f; } else if ((lastScore < 120) && (score >= 120)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.8f]; addSpeed = 0.8f; } else if ((lastScore < 90) && (score >= 90)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.9f]; addSpeed = 0.9f; } else if ((lastScore < 60) && (score >= 60)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:1.0f]; addSpeed = 1.0f; } else if ((lastScore < 30) && (score >= 30)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:2.0f]; addSpeed = 2.0f; } } if (wave) { waterTick++; water.position = ccp(240, 140 * sin(waterTick / (36 * M_PI)) - 60); if (waterTick == 180) { wave = NO;
name: "Back Room"
panels {
  name: "COURSE"
  path: "Panels/Rhymes/panel_1"
  clue: "course"
  answer: "horse"
  symbols: ZERO
}
panels {
  name: "WEIGH (1)"
  path: "Panels/Rhymes/panel_2"
  clue: "weigh"
  answer: "neigh"
  symbols: ZERO
}
panels {
  name: "WEIGH (2)"
  path: "Panels/Rhymes/panel_3"
  clue: "weigh"
  answer: "hay"
  symbols: ZERO
}
panels {
  name: "BUYER"
  path: "Panels/Rhymes/panel_4"
  clue: "buyer"
  answer: "hire"
  symbols: ZERO
}
panels {
  name: "GNASH"
  path: "Panels/Rhymes/panel_5"
  clue: "gnash"
  answer: "cash"
  symbols: ZERO
}
panels {
  name: "LIMB"
  path: "Panels/Rhymes/panel_6"
  clue: "limb"
  answer: "him"
  symbols: ZERO
}
panels {
  name: "SPARE"
  path: "Panels/Rhymes/panel_7"
  clue: "spare"
  answer: "flare"
  symbols: ZERO
}