diff options
Diffstat (limited to 'Classes/ClassicGameMode.m')
-rwxr-xr-x | Classes/ClassicGameMode.m | 111 |
1 files changed, 80 insertions, 31 deletions
diff --git a/Classes/ClassicGameMode.m b/Classes/ClassicGameMode.m index 46ad337..00bf049 100755 --- a/Classes/ClassicGameMode.m +++ b/Classes/ClassicGameMode.m | |||
@@ -8,17 +8,36 @@ | |||
8 | 8 | ||
9 | #import "ClassicGameMode.h" | 9 | #import "ClassicGameMode.h" |
10 | #import "FallingObject.h" | 10 | #import "FallingObject.h" |
11 | #import "Cherry.h" | ||
12 | #import "Bottle.h" | ||
13 | #import "OneUp.h" | ||
14 | #import "Rock.h" | ||
15 | #import "GameOverScene.h" | 11 | #import "GameOverScene.h" |
16 | #import "SimpleAudioEngine.h" | 12 | #import "SimpleAudioEngine.h" |
17 | #import "CCNotifications.h" | ||
18 | #import "TestFlight.h" | ||
19 | 13 | ||
20 | @implementation ClassicGameMode | 14 | @implementation ClassicGameMode |
21 | 15 | ||
16 | typedef enum { | ||
17 | kCherryObject = 0, | ||
18 | kEnergyDrinkObject, | ||
19 | kOneUpObject, | ||
20 | kRockObject | ||
21 | } FallingObjects; | ||
22 | |||
23 | static GameModeInfo* info; | ||
24 | |||
25 | + (GameModeInfo*)info | ||
26 | { | ||
27 | if (info == nil) | ||
28 | { | ||
29 | info = [[GameModeInfo alloc] initWithName:@"Collect" | ||
30 | location:@"Paris" | ||
31 | numOfStars:3 | ||
32 | imageFilename:[[NSBundle mainBundle] pathForResource:@"paris" ofType:@"png"] | ||
33 | unlocked:YES | ||
34 | gameClass:[ClassicGameMode class] | ||
35 | globalHighscoreKey:@"Classic"]; | ||
36 | } | ||
37 | |||
38 | return info; | ||
39 | } | ||
40 | |||
22 | - (void)tick:(ccTime)dt | 41 | - (void)tick:(ccTime)dt |
23 | { | 42 | { |
24 | int lastScore = score; | 43 | int lastScore = score; |
@@ -29,7 +48,7 @@ | |||
29 | { | 48 | { |
30 | [self unscheduleAllSelectors]; | 49 | [self unscheduleAllSelectors]; |
31 | 50 | ||
32 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:@"Collect"]]]; | 51 | [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverScene sceneWithScore:score gameMode:[ClassicGameMode info]]]]; |
33 | } else if (score > lastScore) | 52 | } else if (score > lastScore) |
34 | { | 53 | { |
35 | if ((lastScore < 6500) && (score >= 6500)) | 54 | if ((lastScore < 6500) && (score >= 6500)) |
@@ -42,24 +61,14 @@ | |||
42 | [self unschedule:@selector(randomlyAddObject:)]; | 61 | [self unschedule:@selector(randomlyAddObject:)]; |
43 | [self schedule:@selector(randomlyAddObject:) interval:0.7f]; | 62 | [self schedule:@selector(randomlyAddObject:) interval:0.7f]; |
44 | addSpeed = 0.7f; | 63 | addSpeed = 0.7f; |
45 | } else if ((lastScore < 3000) && (score >= 3000)) | ||
46 | { | ||
47 | NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; | ||
48 | |||
49 | if (![defaults boolForKey:@"unlockedJumpMode"]) | ||
50 | { | ||
51 | [[CCNotifications sharedManager] addWithTitle:@"Jump" message:@"You've unlocked a new game mode!" image:@"venice.png"]; | ||
52 | |||
53 | [defaults setBool:YES forKey:@"unlockedJumpMode"]; | ||
54 | [defaults synchronize]; | ||
55 | |||
56 | [TestFlight passCheckpoint:@"Unlocked Jump Mode"]; | ||
57 | } | ||
58 | } else if ((lastScore < 2500) && (score >= 2500)) | 64 | } else if ((lastScore < 2500) && (score >= 2500)) |
59 | { | 65 | { |
60 | [self unschedule:@selector(randomlyAddObject:)]; | 66 | [self unschedule:@selector(randomlyAddObject:)]; |
61 | [self schedule:@selector(randomlyAddObject:) interval:0.8f]; | 67 | [self schedule:@selector(randomlyAddObject:) interval:0.8f]; |
62 | addSpeed = 0.8f; | 68 | addSpeed = 0.8f; |
69 | } else if ((lastScore < 2000) && (score >= 2000)) | ||
70 | { | ||
71 | [[ClassicGameMode info] setStar:1 withMessage:@"Get 2000 points"]; | ||
63 | } else if ((lastScore < 1500) && (score >= 1500)) | 72 | } else if ((lastScore < 1500) && (score >= 1500)) |
64 | { | 73 | { |
65 | [self unschedule:@selector(randomlyAddObject:)]; | 74 | [self unschedule:@selector(randomlyAddObject:)]; |
@@ -70,6 +79,8 @@ | |||
70 | [self unschedule:@selector(randomlyAddObject:)]; | 79 | [self unschedule:@selector(randomlyAddObject:)]; |
71 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; | 80 | [self schedule:@selector(randomlyAddObject:) interval:1.0f]; |
72 | addSpeed = 1.0f; | 81 | addSpeed = 1.0f; |
82 | |||
83 | [[ClassicGameMode info] setStar:0 withMessage:@"Get 500 points"]; | ||
73 | } else if ((lastScore < 150) && (score >= 150)) | 84 | } else if ((lastScore < 150) && (score >= 150)) |
74 | { | 85 | { |
75 | [self unschedule:@selector(randomlyAddObject:)]; | 86 | [self unschedule:@selector(randomlyAddObject:)]; |
@@ -83,6 +94,7 @@ | |||
83 | { | 94 | { |
84 | FallingObject* object; | 95 | FallingObject* object; |
85 | int oneuppercent = 98 - (lives == 1 ? 1 : 0); | 96 | int oneuppercent = 98 - (lives == 1 ? 1 : 0); |
97 | int recipeIdentifier; | ||
86 | 98 | ||
87 | if (score < 1000) | 99 | if (score < 1000) |
88 | { | 100 | { |
@@ -90,31 +102,33 @@ | |||
90 | 102 | ||
91 | if (randomval < 65) | 103 | if (randomval < 65) |
92 | { | 104 | { |
93 | object = [[Cherry alloc] init]; | 105 | recipeIdentifier = kCherryObject; |
94 | } else if (randomval < oneuppercent) | 106 | } else if (randomval < oneuppercent) |
95 | { | 107 | { |
96 | object = [[Bottle alloc] init]; | 108 | recipeIdentifier = kEnergyDrinkObject; |
97 | } else { | 109 | } else { |
98 | object = [[OneUp alloc] init]; | 110 | recipeIdentifier = kOneUpObject; |
99 | } | 111 | } |
100 | } else { | 112 | } else { |
101 | int randomval = arc4random()%100; | 113 | int randomval = arc4random()%100; |
102 | 114 | ||
103 | if (randomval < 40) | 115 | if (randomval < 40) |
104 | { | 116 | { |
105 | object = [[Cherry alloc] init]; | 117 | recipeIdentifier = kCherryObject; |
106 | } else if (randomval < 70) | 118 | } else if (randomval < 70) |
107 | { | 119 | { |
108 | object = [[Rock alloc] init]; | 120 | recipeIdentifier = kRockObject; |
109 | } else if (randomval < oneuppercent) | 121 | } else if (randomval < oneuppercent) |
110 | { | 122 | { |
111 | object = [[Bottle alloc] init]; | 123 | recipeIdentifier = kEnergyDrinkObject; |
112 | } else { | 124 | } else { |
113 | object = [[OneUp alloc] init]; | 125 | recipeIdentifier = kOneUpObject; |
114 | } | 126 | } |
115 | } | 127 | } |
116 | 128 | ||
117 | int objectX = arc4random()%448+16; | 129 | int objectX = arc4random()%448+16; |
130 | object = [[objectFactory buildFallingObjectWithRecipeIdentifier:recipeIdentifier] retain]; | ||
131 | object.delegate = self; | ||
118 | object.sprite.position = ccp(objectX, 360); | 132 | object.sprite.position = ccp(objectX, 360); |
119 | object.sprite.scale = 1; | 133 | object.sprite.scale = 1; |
120 | [self addChild:object.sprite]; | 134 | [self addChild:object.sprite]; |
@@ -126,8 +140,8 @@ | |||
126 | { | 140 | { |
127 | if (arc4random() % 100 > 80) | 141 | if (arc4random() % 100 > 80) |
128 | { | 142 | { |
129 | object = [[Rock alloc] init]; | 143 | object = [[objectFactory buildFallingObjectWithRecipeIdentifier:kRockObject] retain]; |
130 | 144 | object.delegate = self; | |
131 | objectX = arc4random()%448+16; | 145 | objectX = arc4random()%448+16; |
132 | object.sprite.position = ccp(objectX, 360); | 146 | object.sprite.position = ccp(objectX, 360); |
133 | object.sprite.scale = 1; | 147 | object.sprite.scale = 1; |
@@ -142,8 +156,8 @@ | |||
142 | { | 156 | { |
143 | if (arc4random() % 100 > 80) | 157 | if (arc4random() % 100 > 80) |
144 | { | 158 | { |
145 | object = [[Rock alloc] init]; | 159 | object = [[objectFactory buildFallingObjectWithRecipeIdentifier:kRockObject] retain]; |
146 | 160 | object.delegate = self; | |
147 | objectX = arc4random()%448+16; | 161 | objectX = arc4random()%448+16; |
148 | object.sprite.position = ccp(objectX, 360); | 162 | object.sprite.position = ccp(objectX, 360); |
149 | object.sprite.scale = 1; | 163 | object.sprite.scale = 1; |
@@ -166,6 +180,11 @@ | |||
166 | [self addChild:backgroundImage z:-1]; | 180 | [self addChild:backgroundImage z:-1]; |
167 | 181 | ||
168 | addSpeed = 2.5f; | 182 | addSpeed = 2.5f; |
183 | |||
184 | [objectFactory createRecipeWithIdentifier:kCherryObject spriteFilename:@"cherry.png" weight:5]; | ||
185 | [objectFactory createRecipeWithIdentifier:kEnergyDrinkObject spriteFilename:@"bottle.png" weight:6]; | ||
186 | [objectFactory createRecipeWithIdentifier:kOneUpObject spriteFilename:@"oneup.png" weight:10]; | ||
187 | [objectFactory createRecipeWithIdentifier:kRockObject spriteFilename:@"rock.png" weight:7]; | ||
169 | } | 188 | } |
170 | 189 | ||
171 | return self; | 190 | return self; |
@@ -178,4 +197,34 @@ | |||
178 | [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; | 197 | [self schedule:@selector(randomlyAddObject:) interval:addSpeed]; |
179 | } | 198 | } |
180 | 199 | ||
200 | - (void)didCatchItem:(FallingObject *)item | ||
201 | { | ||
202 | if (item.objectType == kCherryObject) | ||
203 | { | ||
204 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]]; | ||
205 | self.score += 10; | ||
206 | } else if (item.objectType == kEnergyDrinkObject) | ||
207 | { | ||
208 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"]]; | ||
209 | self.score += 25; | ||
210 | } else if (item.objectType == kOneUpObject) | ||
211 | { | ||
212 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"1up" ofType:@"wav"]]; | ||
213 | self.lives++; | ||
214 | } else if (item.objectType == kRockObject) | ||
215 | { | ||
216 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]]; | ||
217 | self.lives--; | ||
218 | } | ||
219 | } | ||
220 | |||
221 | - (void)didMissItem:(FallingObject *)item | ||
222 | { | ||
223 | if ((item.objectType == kCherryObject) || (item.objectType == kEnergyDrinkObject)) | ||
224 | { | ||
225 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]]; | ||
226 | self.lives--; | ||
227 | } | ||
228 | } | ||
229 | |||
181 | @end | 230 | @end |