diff options
Diffstat (limited to 'Classes/JumpGameMode.m')
-rw-r--r-- | Classes/JumpGameMode.m | 58 |
1 files changed, 41 insertions, 17 deletions
diff --git a/Classes/JumpGameMode.m b/Classes/JumpGameMode.m index 15b0e16..a5c2b8f 100644 --- a/Classes/JumpGameMode.m +++ b/Classes/JumpGameMode.m | |||
@@ -9,12 +9,7 @@ | |||
9 | #import "JumpGameMode.h" | 9 | #import "JumpGameMode.h" |
10 | #import "SimpleAudioEngine.h" | 10 | #import "SimpleAudioEngine.h" |
11 | #import "FallingObject.h" | 11 | #import "FallingObject.h" |
12 | #import "Cherry.h" | ||
13 | #import "Bottle.h" | ||
14 | #import "OneUp.h" | ||
15 | #import "Rock.h" | ||
16 | #import "GameOverScene.h" | 12 | #import "GameOverScene.h" |
17 | #import "PointMultiplier.h" | ||
18 | 13 | ||
19 | #define kMinimumGestureLength 25 | 14 | #define kMinimumGestureLength 25 |
20 | 15 | ||
@@ -34,6 +29,12 @@ | |||
34 | 29 | ||
35 | @implementation JumpGameMode | 30 | @implementation JumpGameMode |
36 | 31 | ||
32 | typedef enum { | ||
33 | kRockObject = 0, | ||
34 | kOneUpObject, | ||
35 | kPointMultiplierObject | ||
36 | } FallingObjects; | ||
37 | |||
37 | - (id)init | 38 | - (id)init |
38 | { | 39 | { |
39 | self = [super init]; | 40 | self = [super init]; |
@@ -57,9 +58,9 @@ | |||
57 | waterTick = 0; | 58 | waterTick = 0; |
58 | wave = NO; | 59 | wave = NO; |
59 | 60 | ||
60 | factory = [[LedgeFactory alloc] init]; | 61 | ledgeFactory = [[LedgeFactory alloc] init]; |
61 | ledges = [[NSMutableSet alloc] init]; | 62 | ledges = [[NSMutableSet alloc] init]; |
62 | CCTexture2D* texture = [[CCTexture2D alloc] initWithImage:[factory createLedgeWithWidth:6 height:2]]; | 63 | CCTexture2D* texture = [[CCTexture2D alloc] initWithImage:[ledgeFactory createLedgeWithWidth:6 height:2]]; |
63 | CCSprite* ledge = [CCSprite spriteWithTexture:texture]; | 64 | CCSprite* ledge = [CCSprite spriteWithTexture:texture]; |
64 | ledge.position = ccp(80, 32); | 65 | ledge.position = ccp(80, 32); |
65 | [self addChild:ledge]; | 66 | [self addChild:ledge]; |
@@ -67,7 +68,7 @@ | |||
67 | [texture release]; | 68 | [texture release]; |
68 | 69 | ||
69 | CCSprite* firstLedge = ledge; | 70 | CCSprite* firstLedge = ledge; |
70 | texture = [[CCTexture2D alloc] initWithImage:[factory createLedgeWithWidth:10 height:2]]; | 71 | texture = [[CCTexture2D alloc] initWithImage:[ledgeFactory createLedgeWithWidth:10 height:2]]; |
71 | ledge = [CCSprite spriteWithTexture:texture]; | 72 | ledge = [CCSprite spriteWithTexture:texture]; |
72 | ledge.position = ccp(80 + firstLedge.boundingBox.size.width/2 + ledge.boundingBox.size.width/2+64, 32); | 73 | ledge.position = ccp(80 + firstLedge.boundingBox.size.width/2 + ledge.boundingBox.size.width/2+64, 32); |
73 | [self addChild:ledge]; | 74 | [self addChild:ledge]; |
@@ -77,6 +78,10 @@ | |||
77 | ledgeScrollSpeed = 0; | 78 | ledgeScrollSpeed = 0; |
78 | ledgeAccelerationRate = 20.0f; | 79 | ledgeAccelerationRate = 20.0f; |
79 | addSpeed = 2.5f; | 80 | addSpeed = 2.5f; |
81 | |||
82 | [objectFactory createRecipeWithIdentifier:kRockObject spriteFilename:@"rock.png" weight:7]; | ||
83 | [objectFactory createRecipeWithIdentifier:kOneUpObject spriteFilename:@"oneup.png" weight:10]; | ||
84 | [objectFactory createRecipeWithIdentifier:kPointMultiplierObject spriteFilename:@"multiplier.png" weight:8]; | ||
80 | } | 85 | } |
81 | 86 | ||
82 | return self; | 87 | return self; |
@@ -164,7 +169,7 @@ | |||
164 | { | 169 | { |
165 | int ledgeWidth = arc4random() % 9 + 1; | 170 | int ledgeWidth = arc4random() % 9 + 1; |
166 | int ledgeDistance = arc4random() % (ledgeScrollSpeed*ledgeScrollSpeed+1)*3/2; | 171 | int ledgeDistance = arc4random() % (ledgeScrollSpeed*ledgeScrollSpeed+1)*3/2; |
167 | CCTexture2D* texture = [[CCTexture2D alloc] initWithImage:[factory createLedgeWithWidth:ledgeWidth height:2]]; | 172 | CCTexture2D* texture = [[CCTexture2D alloc] initWithImage:[ledgeFactory createLedgeWithWidth:ledgeWidth height:2]]; |
168 | CCSprite* ledge = [CCSprite spriteWithTexture:texture]; | 173 | CCSprite* ledge = [CCSprite spriteWithTexture:texture]; |
169 | ledge.position = ccp(rightmost + rightwidth + ledge.boundingBox.size.width/2+64+ledgeDistance, 32); | 174 | ledge.position = ccp(rightmost + rightwidth + ledge.boundingBox.size.width/2+64+ledgeDistance, 32); |
170 | [self addChild:ledge]; | 175 | [self addChild:ledge]; |
@@ -351,23 +356,22 @@ | |||
351 | 356 | ||
352 | - (void)randomlyAddObject:(ccTime)dt | 357 | - (void)randomlyAddObject:(ccTime)dt |
353 | { | 358 | { |
354 | FallingObject* object; | 359 | int recipeIdentifier; |
355 | |||
356 | int randomval = arc4random()%100; | 360 | int randomval = arc4random()%100; |
357 | int pmChance = (5-pointMultiplier)*5 + 30; | 361 | int pmChance = (5-pointMultiplier)*5 + 30; |
358 | 362 | ||
359 | if (randomval < 30) | 363 | if (randomval < 30) |
360 | { | 364 | { |
361 | object = [[OneUp alloc] init]; | 365 | recipeIdentifier = kOneUpObject; |
362 | } else if (randomval < pmChance) | 366 | } else if (randomval < pmChance) |
363 | { | 367 | { |
364 | object = [[PointMultiplier alloc] init]; | 368 | recipeIdentifier = kPointMultiplierObject; |
365 | } else { | 369 | } else { |
366 | object = [[Rock alloc] init]; | 370 | recipeIdentifier = kRockObject; |
367 | } | 371 | } |
368 | 372 | ||
373 | FallingObject* object = [[objectFactory buildFallingObjectWithRecipeIdentifier:recipeIdentifier] retain]; | ||
369 | int objectX; | 374 | int objectX; |
370 | |||
371 | CGSize first = [cart.sprite boundingBox].size; | 375 | CGSize first = [cart.sprite boundingBox].size; |
372 | CGSize second = [object.sprite boundingBox].size; | 376 | CGSize second = [object.sprite boundingBox].size; |
373 | 377 | ||
@@ -391,6 +395,7 @@ | |||
391 | break; | 395 | break; |
392 | } | 396 | } |
393 | 397 | ||
398 | object.delegate = self; | ||
394 | object.sprite.position = ccp(objectX, 360); | 399 | object.sprite.position = ccp(objectX, 360); |
395 | object.sprite.scale = 1; | 400 | object.sprite.scale = 1; |
396 | [self addChild:object.sprite]; | 401 | [self addChild:object.sprite]; |
@@ -402,7 +407,7 @@ | |||
402 | { | 407 | { |
403 | if (arc4random() % 100 > 80) | 408 | if (arc4random() % 100 > 80) |
404 | { | 409 | { |
405 | object = [[Rock alloc] init]; | 410 | object = [[objectFactory buildFallingObjectWithRecipeIdentifier:kRockObject] retain]; |
406 | 411 | ||
407 | for (;;) | 412 | for (;;) |
408 | { | 413 | { |
@@ -424,6 +429,7 @@ | |||
424 | break; | 429 | break; |
425 | } | 430 | } |
426 | 431 | ||
432 | object.delegate = self; | ||
427 | object.sprite.position = ccp(objectX, 360); | 433 | object.sprite.position = ccp(objectX, 360); |
428 | object.sprite.scale = 1; | 434 | object.sprite.scale = 1; |
429 | [self addChild:object.sprite]; | 435 | [self addChild:object.sprite]; |
@@ -437,7 +443,7 @@ | |||
437 | { | 443 | { |
438 | if (arc4random() % 100 > 80) | 444 | if (arc4random() % 100 > 80) |
439 | { | 445 | { |
440 | object = [[Rock alloc] init]; | 446 | object = [[objectFactory buildFallingObjectWithRecipeIdentifier:kRockObject] retain]; |
441 | 447 | ||
442 | for (;;) | 448 | for (;;) |
443 | { | 449 | { |
@@ -459,6 +465,7 @@ | |||
459 | break; | 465 | break; |
460 | } | 466 | } |
461 | 467 | ||
468 | object.delegate = self; | ||
462 | object.sprite.position = ccp(objectX, 360); | 469 | object.sprite.position = ccp(objectX, 360); |
463 | object.sprite.scale = 1; | 470 | object.sprite.scale = 1; |
464 | [self addChild:object.sprite]; | 471 | [self addChild:object.sprite]; |
@@ -486,6 +493,23 @@ | |||
486 | } | 493 | } |
487 | } | 494 | } |
488 | 495 | ||
496 | - (void)didCatchItem:(FallingObject *)item | ||
497 | { | ||
498 | if (item.objectType == kRockObject) | ||
499 | { | ||
500 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"]]; | ||
501 | self.lives--; | ||
502 | } else if (item.objectType == kOneUpObject) | ||
503 | { | ||
504 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"1up" ofType:@"wav"]]; | ||
505 | self.lives++; | ||
506 | } else if (item.objectType == kPointMultiplierObject) | ||
507 | { | ||
508 | [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:@"Absorption2" ofType:@"wav"]]; | ||
509 | self.pointMultiplier++; | ||
510 | } | ||
511 | } | ||
512 | |||
489 | @end | 513 | @end |
490 | 514 | ||
491 | @implementation LedgeFactory | 515 | @implementation LedgeFactory |