// // GameLayer.m // Cart Collect // // Created by iD Student Account on 7/18/11. // Copyright 2011 __MyCompanyName__. All rights reserved. // #import "ClassicGameMode.h" #import "FallingObject.h" #import "GameOverScene.h" #import "SimpleAudioEngine.h" #import "ScoreBarLayer.h" @implementation ClassicGameMode @synthesize score, lives; typedef enum { kCherryObject = 0, kEnergyDrinkObject, kOneUpObject, kRockObject } FallingObjects; static GameModeInfo* info; + (GameModeInfo*)info { if (info == nil) { info = [[GameModeInfo alloc] initWithName:@"Collect" location:@"Paris" numOfStars:3 imageFilename:[[NSBundle mainBundle] pathForResource:@"paris" ofType:@"png"] unlocked:YES gameClass:[ClassicGameMode class] globalHighscoreKey:@"Classic"]; } return info; } - (void)tick:(ccTime)dt { int lastScore = score; [super tick:dt]; if (lives <= 0) { [self unscheduleAllSelectors]; [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:[ClassicGameMode info]]]]; } else if (score > lastScore) { if ((lastScore < 10000) && (score >= 10000)) { [[ClassicGameMode info] setStar:2 withMessage:@"Get 10000 points"]; } else if ((lastScore < 6500) && (score >= 6500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.6f]; addSpeed = 0.6f; } else if ((lastScore < 4500) && (score >= 4500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.7f]; addSpeed = 0.7f; } else if ((lastScore < 2500) && (score >= 2500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.8f]; addSpeed = 0.8f; } else if ((lastScore < 2000) && (score >= 2000)) { [[ClassicGameMode info] setStar:1 withMessage:@"Get 2000 points"]; } else if ((lastScore < 1500) && (score >= 1500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:0.9f]; addSpeed = 0.9f; } else if ((lastScore < 500) && (score >= 500)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:1.0f]; addSpeed = 1.0f; [[ClassicGameMode info] setStar:0 withMessage:@"Get 500 points"]; } else if ((lastScore < 150) && (score >= 150)) { [self unschedule:@selector(randomlyAddObject:)]; [self schedule:@selector(randomlyAddObject:) interval:2.0f]; addSpeed = 2.0f; } } } - (void)randomlyAddObject:(ccTime)dt { FallingObject* object; int oneuppercent = 98 - (lives == 1 ? 1 : 0); int recipeIdentifier; if (score < 1000) { int randomval = arc4random()%100; if (randomval < 65) { recipeIdentifier = kCherryObject; } else if (randomval < oneuppercent) { recipeIdentifier = kEnergyDrinkObject; } else { recipeIdentifier = kOneUpObject; } } else { int randomval = arc4random()%100; if (randomval < 40) { recipeIdentifier = kCherryObject; } else if (randomval < 70) { recipeIdentifier = kRockObject; } else if (randomval < oneuppercent) { recipeIdentifier = kEnergyDrinkObject; } else { recipeIdentifier = kOneUpObject; } } int objectX = arc4random()%448+16; object = [[objectFactory buildFallingObjectWithRecipeIdentifier:recipeIdentifier] retain]; object.delegate = self; object.sprite.position = ccp(objectX, 360); object.sprite.scale = 1; [self addChild:object.sprite]; [objects addObject:object]; [object release]; if (score >= 2000) { if (arc4random() % 100 > 80) { object = [[objectFactory buildFallingObjectWithRecipeIdentifier:kRockObject] retain]; object.delegate = self; objectX = arc4random()%448+16; object.sprite.position = ccp(objectX, 360); object.sprite.scale = 1; [self addChild:object.sprite]; [objects addObject:object]; [object release]; } } if (score >= 4000) { if (arc4random() % 100 > 80) { object = [[objectFactory buildFallingObjectWithRecipeIdentifier:kRockObject] retain]; object.delegate = self; objectX = arc4random()%448+16; object.sprite.position = ccp(objectX, 360); object.sprite.scale = 1; [self addChild:object.sprite]; [objects addObject:object]; [object release]; } } } - (id)init { self = [super init]; if (nil != self) { CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"]; backgroundImage.position = ccp(240, 160); [self addChild:backgroundImage z:-1]; score = 0; lives = 3; addSpeed = 2.5f; ScoreBarLayer* scoreBar = [ScoreBarLayer scoreBar]; [self addChild:scoreBar]; scoreLabel = [CCLabelBMFont labelWithString:@"0" fntFile:@"helvetica2.fnt"]; scoreLabel.position = ccp(30,20); [scoreBar addChild:scoreLabel]; CCSprite* livesImage = [CCSprite spriteWithFile:@"oneup.png"]; livesImage.position = ccp(110, 20); [scoreBar addChild:livesImage]; livesLabel = [CCLabelBMFont labelWithString:@"x3" fntFile:@"helvetica2.fnt"]; livesLabel.position = ccp(142,20); [scoreBar addChild:livesLabel]; [objectFactory createRecipeWithIdentifier:kCherryObject spriteFilename:@"cherry.png" weight:5]; [objectFactory createRecipeWithIdentifier:kEnergyDrinkObject spriteFilename:@"bottle.png" weight:6]; [objectFactory createRecipeWithIdentifier:kOneUpObject spriteFilename:@"oneup.png" weight:10]; [objectFactory createRecipeWithIdentifier:kRockObject spriteFilename:@"rock.png" weight:7]; } return self; } - (void)onEnterTransitionDidFinish { [super onEnterTransitionDidFinish]; [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; } - (void)didCatchItem:(FallingObject *)item { if (item.objectType == kCherryObject) { [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]]; self.score += 10; } else if (item.objectType == kEnergyDrinkObject) { [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]]; self.score += 25; } else if (item.objectType == kOneUpObject) { [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"1up" ofType:@"wav"]]; self.lives++; } else if (item.objectType == kRockObject) { [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]]; self.lives--; } } - (void)didMissItem:(FallingObject *)item { if ((item.objectType == kCherryObject) || (item.objectType == kEnergyDrinkObject)) { [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]]; self.lives--; } } - (void)setScore:(int)m_score { score = m_score; [scoreLabel setString:[NSString stringWithFormat:@"%d", score]]; } - (void)setLives:(int)m_lives { lives = m_lives; [livesLabel setString:[NSString stringWithFormat:@"x%d", lives]]; } @end