summary refs log tree commit diff stats
path: root/Classes
diff options
context:
space:
mode:
Diffstat (limited to 'Classes')
-rwxr-xr-xClasses/Bottle.h19
-rwxr-xr-xClasses/Bottle.m32
-rwxr-xr-xClasses/Cart_CollectAppDelegate.h23
-rwxr-xr-xClasses/Cart_CollectAppDelegate.m212
-rwxr-xr-xClasses/Cherry.h19
-rwxr-xr-xClasses/Cherry.m32
-rwxr-xr-xClasses/FallingObject.h21
-rwxr-xr-xClasses/FallingObject.m34
-rwxr-xr-xClasses/GameConfig.h45
-rwxr-xr-xClasses/GameLayer.h38
-rwxr-xr-xClasses/GameLayer.m301
-rwxr-xr-xClasses/GameOverLayer.h32
-rwxr-xr-xClasses/GameOverLayer.m196
-rwxr-xr-xClasses/Highscore.h25
-rwxr-xr-xClasses/Highscore.m37
-rwxr-xr-xClasses/HighscoreListController.h32
-rwxr-xr-xClasses/HighscoreListController.m371
-rwxr-xr-xClasses/MainMenuLayer.h24
-rwxr-xr-xClasses/MainMenuLayer.m68
-rwxr-xr-xClasses/OneUp.h18
-rwxr-xr-xClasses/OneUp.m27
-rwxr-xr-xClasses/PauseLayer.h22
-rwxr-xr-xClasses/PauseLayer.m68
-rwxr-xr-xClasses/Rock.h18
-rwxr-xr-xClasses/Rock.m27
-rwxr-xr-xClasses/RootViewController.h16
-rwxr-xr-xClasses/RootViewController.m152
-rwxr-xr-xClasses/ValuableObject.h15
28 files changed, 1924 insertions, 0 deletions
diff --git a/Classes/Bottle.h b/Classes/Bottle.h new file mode 100755 index 0000000..37c41d5 --- /dev/null +++ b/Classes/Bottle.h
@@ -0,0 +1,19 @@
1//
2// Bottle.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "FallingObject.h"
11#import "ValuableObject.h"
12
13@interface Bottle : FallingObject <ValuableObject> {
14
15}
16
17- (id)init;
18
19@end
diff --git a/Classes/Bottle.m b/Classes/Bottle.m new file mode 100755 index 0000000..bae2716 --- /dev/null +++ b/Classes/Bottle.m
@@ -0,0 +1,32 @@
1//
2// Bottle.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "Bottle.h"
10
11
12@implementation Bottle
13
14- (id)init
15{
16 self = [super init];
17
18 if (nil != self)
19 {
20 sprite = [CCSprite spriteWithFile:@"bottle.png"];
21 weight = 6;
22 }
23
24 return self;
25}
26
27- (int)pointValue
28{
29 return 25;
30}
31
32@end
diff --git a/Classes/Cart_CollectAppDelegate.h b/Classes/Cart_CollectAppDelegate.h new file mode 100755 index 0000000..0ef23a7 --- /dev/null +++ b/Classes/Cart_CollectAppDelegate.h
@@ -0,0 +1,23 @@
1//
2// Cart_CollectAppDelegate.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/18/11.
6// Copyright __MyCompanyName__ 2011. All rights reserved.
7//
8
9#import <UIKit/UIKit.h>
10#import <sqlite3.h>
11
12@class RootViewController;
13
14@interface Cart_CollectAppDelegate : NSObject <UIApplicationDelegate> {
15 UIWindow *window;
16 RootViewController *viewController;
17}
18
19@property (nonatomic, retain) UIWindow *window;
20@property (nonatomic, retain) RootViewController* viewController;
21+ (sqlite3*)database;
22
23@end
diff --git a/Classes/Cart_CollectAppDelegate.m b/Classes/Cart_CollectAppDelegate.m new file mode 100755 index 0000000..201422f --- /dev/null +++ b/Classes/Cart_CollectAppDelegate.m
@@ -0,0 +1,212 @@
1//
2// Cart_CollectAppDelegate.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/18/11.
6// Copyright __MyCompanyName__ 2011. All rights reserved.
7//
8
9#import "cocos2d.h"
10
11#import "Cart_CollectAppDelegate.h"
12#import "GameConfig.h"
13#import "GameLayer.h"
14#import "RootViewController.h"
15#import "MainMenuLayer.h"
16
17@implementation Cart_CollectAppDelegate
18
19@synthesize window, viewController;
20
21- (void) removeStartupFlicker
22{
23 //
24 // THIS CODE REMOVES THE STARTUP FLICKER
25 //
26 // Uncomment the following code if you Application only supports landscape mode
27 //
28#if GAME_AUTOROTATION == kGameAutorotationUIViewController
29
30 // CC_ENABLE_DEFAULT_GL_STATES();
31 // CCDirector *director = [CCDirector sharedDirector];
32 // CGSize size = [director winSize];
33 // CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"];
34 // sprite.position = ccp(size.width/2, size.height/2);
35 // sprite.rotation = -90;
36 // [sprite visit];
37 // [[director openGLView] swapBuffers];
38 // CC_ENABLE_DEFAULT_GL_STATES();
39
40#endif // GAME_AUTOROTATION == kGameAutorotationUIViewController
41}
42
43- (void) applicationDidFinishLaunching:(UIApplication*)application
44{
45 [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
46
47 NSMutableDictionary* registerDefaults = [NSMutableDictionary dictionaryWithObjectsAndKeys:
48 @"", @"username",
49 [NSNumber numberWithBool:YES], @"submitScore",
50 nil];
51 [[NSUserDefaults standardUserDefaults] registerDefaults:registerDefaults];
52
53 // Init the window
54 window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
55
56 // Try to use CADisplayLink director
57 // if it fails (SDK < 3.1) use the default director
58 if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
59 [CCDirector setDirectorType:kCCDirectorTypeDefault];
60
61
62 CCDirector *director = [CCDirector sharedDirector];
63
64 // Init the View Controller
65 viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
66 viewController.wantsFullScreenLayout = YES;
67
68 //
69 // Create the EAGLView manually
70 // 1. Create a RGB565 format. Alternative: RGBA8
71 // 2. depth format of 0 bit. Use 16 or 24 bit for 3d effects, like CCPageTurnTransition
72 //
73 //
74 EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
75 pixelFormat:kEAGLColorFormatRGB565 // kEAGLColorFormatRGBA8
76 depthFormat:0 // GL_DEPTH_COMPONENT16_OES
77 ];
78
79 // attach the openglView to the director
80 [director setOpenGLView:glView];
81
82// // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
83 //if( ! [director enableRetinaDisplay:YES] )
84 // CCLOG(@"Retina Display Not supported");
85
86 //
87 // VERY IMPORTANT:
88 // If the rotation is going to be controlled by a UIViewController
89 // then the device orientation should be "Portrait".
90 //
91 // IMPORTANT:
92 // By default, this template only supports Landscape orientations.
93 // Edit the RootViewController.m file to edit the supported orientations.
94 //
95#if GAME_AUTOROTATION == kGameAutorotationUIViewController
96 [director setDeviceOrientation:kCCDeviceOrientationPortrait];
97#else
98 [director setDeviceOrientation:kCCDeviceOrientationPortrait];
99#endif
100
101 [director setAnimationInterval:1.0/60];
102 //[director setDisplayFPS:YES];
103
104
105 // make the OpenGLView a child of the view controller
106 [viewController setView:glView];
107
108 // make the View Controller a child of the main window
109 [window addSubview: viewController.view];
110
111 [window makeKeyAndVisible];
112
113 // Default texture format for PNG/BMP/TIFF/JPEG/GIF images
114 // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
115 // You can change anytime.
116 [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
117
118
119 // Removes the startup flicker
120 [self removeStartupFlicker];
121
122 // Run the intro Scene
123 [[CCDirector sharedDirector] runWithScene: [MainMenuLayer scene]];
124}
125
126
127- (void)applicationWillResignActive:(UIApplication *)application {
128 [[CCDirector sharedDirector] pause];
129}
130
131- (void)applicationDidBecomeActive:(UIApplication *)application {
132 [[CCDirector sharedDirector] resume];
133}
134
135- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
136 [[CCDirector sharedDirector] purgeCachedData];
137}
138
139-(void) applicationDidEnterBackground:(UIApplication*)application {
140 [[CCDirector sharedDirector] stopAnimation];
141
142 if ([[CCDirector sharedDirector] runningScene].tag == 436)
143 {
144 [[CCDirector sharedDirector] replaceScene:[PauseLayer sceneWithScene:[[CCDirector sharedDirector] runningScene]]];
145 }
146}
147
148-(void) applicationWillEnterForeground:(UIApplication*)application {
149 [[CCDirector sharedDirector] startAnimation];
150}
151
152- (void)applicationWillTerminate:(UIApplication *)application {
153 CCDirector *director = [CCDirector sharedDirector];
154
155 sqlite3_close([Cart_CollectAppDelegate database]);
156
157 [[director openGLView] removeFromSuperview];
158
159 [viewController release];
160
161 [window release];
162
163 [director end];
164}
165
166- (void)applicationSignificantTimeChange:(UIApplication *)application {
167 [[CCDirector sharedDirector] setNextDeltaTimeZero:YES];
168}
169
170- (void)dealloc {
171 //[[CCDirector sharedDirector] release];
172 [window release];
173 [super dealloc];
174}
175
176+ (sqlite3*)database
177{
178 static sqlite3* database = nil;
179
180 if (database == nil)
181 {
182 NSString* databaseName = @"cartdata.sqlite3";
183 NSArray* documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
184 NSString* documentsDir = [documentPaths objectAtIndex:0];
185 NSString* databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
186 NSFileManager* fileManager = [NSFileManager defaultManager];
187 NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
188
189 if (![fileManager fileExistsAtPath:databasePath])
190 {
191 NSString* databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
192 [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
193 //[fileManager release];
194
195 [userDefaults setInteger:1 forKey:@"databaseVersion"];
196 }
197
198 if ([userDefaults integerForKey:@"databaseVersion"] < 1)
199 {
200 // Upgrade the database to version 1, which is completely unnecessary as no prior version exists
201 }
202
203 if (sqlite3_open([databasePath UTF8String], &database) != SQLITE_OK)
204 {
205 NSLog(@"Failed to open database");
206 }
207 }
208
209 return database;
210}
211
212@end
diff --git a/Classes/Cherry.h b/Classes/Cherry.h new file mode 100755 index 0000000..65437f5 --- /dev/null +++ b/Classes/Cherry.h
@@ -0,0 +1,19 @@
1//
2// Cherry.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "FallingObject.h"
11#import "ValuableObject.h"
12
13@interface Cherry : FallingObject <ValuableObject> {
14
15}
16
17- (id)init;
18
19@end
diff --git a/Classes/Cherry.m b/Classes/Cherry.m new file mode 100755 index 0000000..f53c86e --- /dev/null +++ b/Classes/Cherry.m
@@ -0,0 +1,32 @@
1//
2// Cherry.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "Cherry.h"
10
11
12@implementation Cherry
13
14- (id)init
15{
16 self = [super init];
17
18 if (nil != self)
19 {
20 sprite = [CCSprite spriteWithFile:@"cherry.png"];
21 weight = 5;
22 }
23
24 return self;
25}
26
27- (int)pointValue
28{
29 return 10;
30}
31
32@end
diff --git a/Classes/FallingObject.h b/Classes/FallingObject.h new file mode 100755 index 0000000..a1ac56e --- /dev/null +++ b/Classes/FallingObject.h
@@ -0,0 +1,21 @@
1//
2// GameObject.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "cocos2d.h"
11
12@interface FallingObject : NSObject {
13 CCSprite* sprite;
14 int weight;
15}
16
17@property (readonly) CCSprite* sprite;
18@property (readonly) int weight;
19- (id)init;
20
21@end
diff --git a/Classes/FallingObject.m b/Classes/FallingObject.m new file mode 100755 index 0000000..297b426 --- /dev/null +++ b/Classes/FallingObject.m
@@ -0,0 +1,34 @@
1//
2// GameObject.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "FallingObject.h"
10
11
12@implementation FallingObject
13
14@synthesize sprite, weight;
15
16- (id)init
17{
18 self = [super init];
19
20 if (nil != self)
21 {
22
23 }
24
25 return self;
26}
27
28- (void)dealloc
29{
30 [sprite release];
31 [super dealloc];
32}
33
34@end \ No newline at end of file
diff --git a/Classes/GameConfig.h b/Classes/GameConfig.h new file mode 100755 index 0000000..1dd3e99 --- /dev/null +++ b/Classes/GameConfig.h
@@ -0,0 +1,45 @@
1//
2// GameConfig.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/18/11.
6// Copyright __MyCompanyName__ 2011. All rights reserved.
7//
8
9#ifndef __GAME_CONFIG_H
10#define __GAME_CONFIG_H
11
12//
13// Supported Autorotations:
14// None,
15// UIViewController,
16// CCDirector
17//
18#define kGameAutorotationNone 0
19#define kGameAutorotationCCDirector 1
20#define kGameAutorotationUIViewController 2
21
22//
23// Define here the type of autorotation that you want for your game
24//
25
26// 3rd generation and newer devices: Rotate using UIViewController. Rotation should be supported on iPad apps.
27// TIP:
28// To improve the performance, you should set this value to "kGameAutorotationNone" or "kGameAutorotationCCDirector"
29#if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR
30#define GAME_AUTOROTATION kGameAutorotationUIViewController
31
32// ARMv6 (1st and 2nd generation devices): Don't rotate. It is very expensive
33#elif __arm__
34#define GAME_AUTOROTATION kGameAutorotationNone
35
36
37// Ignore this value on Mac
38#elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED)
39
40#else
41#error(unknown architecture)
42#endif
43
44#endif // __GAME_CONFIG_H
45
diff --git a/Classes/GameLayer.h b/Classes/GameLayer.h new file mode 100755 index 0000000..88a1406 --- /dev/null +++ b/Classes/GameLayer.h
@@ -0,0 +1,38 @@
1//
2// GameLayer.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/18/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "cocos2d.h"
11#import "FallingObject.h"
12#import "Cherry.h"
13#import "Bottle.h"
14#import "OneUp.h"
15#import "Rock.h"
16#import "GameOverLayer.h"
17#import "ValuableObject.h"
18#import "PauseLayer.h"
19#import "CocosDenshion.h"
20#import "SimpleAudioEngine.h"
21
22@interface GameLayer : CCLayer {
23 NSMutableSet* objects;
24 float accelX;
25 CCLabelBMFont* scoreLabel;
26 CCLabelBMFont* livesLabel;
27 int score;
28 int lives;
29 float addSpeed;
30 CCSprite* cartSprite;
31}
32
33+ (CCScene*)scene;
34- (id)init;
35- (void)updateLabels;
36- (void)pause;
37
38@end
diff --git a/Classes/GameLayer.m b/Classes/GameLayer.m new file mode 100755 index 0000000..32ca483 --- /dev/null +++ b/Classes/GameLayer.m
@@ -0,0 +1,301 @@
1//
2// GameLayer.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/18/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "GameLayer.h"
10
11
12@implementation GameLayer
13
14+ (CCScene*)scene
15{
16 CCScene* scene = [CCScene node];
17
18 CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)];
19 [scene addChild:backgroundLayer];
20
21 GameLayer* layer = [GameLayer node];
22 [scene addChild:layer];
23
24 scene.tag = 436;
25
26 return scene;
27}
28
29- (void)tick:(ccTime)dt
30{
31 // Move the cart based on acceleration gathered from accelerometer
32 cartSprite.position = ccp(MIN(MAX(cartSprite.position.x+accelX, 16),464), cartSprite.position.y);
33
34 int lastScore = score;
35
36 for (FallingObject* object in objects)
37 {
38 // Move objects down
39 object.sprite.position = ccp(object.sprite.position.x, object.sprite.position.y-object.weight);
40
41 // Cart collision detection
42 CGSize first = [cartSprite boundingBox].size;
43 CGSize second = [object.sprite boundingBox].size;
44
45 if (cartSprite.position.x > (object.sprite.position.x - second.width/2 - first.width/2))
46 {
47 if (cartSprite.position.x < (object.sprite.position.x + second.width/2 + first.width/2))
48 {
49 if (cartSprite.position.y > (object.sprite.position.y - second.height/2 - first.height/2))
50 {
51 if (cartSprite.position.y < (object.sprite.position.y + second.height/2 + first.height/2))
52 {
53 [object retain];
54 [objects removeObject:object];
55
56 // If a cart collides with an object, it's going to vanish no matter what
57 [object.sprite.parent removeChild:object.sprite cleanup:YES];
58
59 NSString* audioFile = nil;
60 if ([object isKindOfClass:[OneUp class]])
61 {
62 audioFile = [[NSBundle mainBundle] pathForResource:@"1up" ofType:@"wav"];
63 lives++;
64 } else if ([object isKindOfClass:[Rock class]])
65 {
66 audioFile = [[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"];
67 lives--;
68 } else if ([object conformsToProtocol:@protocol(ValuableObject)]) {
69 audioFile = [[NSBundle mainBundle] pathForResource:@"Item1" ofType:@"wav"];
70 score += [((FallingObject<ValuableObject>*)object) pointValue];
71 }
72
73 if (audioFile != nil)
74 {
75 [[SimpleAudioEngine sharedEngine] playEffect:audioFile];
76 }
77
78 [self updateLabels];
79
80 continue; // Don't check for collision with floor
81 }
82 }
83 }
84 }
85
86 // Collision detection with floor
87 if (object.sprite.position.y - (object.sprite.contentSize.height/2) < 0)
88 {
89 [object retain];
90 [objects removeObject:object];
91
92 [object.sprite.parent removeChild:object.sprite cleanup:YES];
93
94 if ([object conformsToProtocol:@protocol(ValuableObject)])
95 {
96 NSString* audioFile = [[NSBundle mainBundle] pathForResource:@"Damage1" ofType:@"wav"];
97 [[SimpleAudioEngine sharedEngine] playEffect:audioFile];
98
99 lives--;
100
101 [self updateLabels];
102 }
103 }
104 }
105
106 if (lives == 0)
107 {
108 [self unschedule:@selector(randomlyAddObject:)];
109 [self unschedule:@selector(tick:)];
110 [[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInT transitionWithDuration:1.5f scene:[GameOverLayer sceneWithScore:score]]];
111 } else if (score > lastScore)
112 {
113 if ((lastScore < 6500) && (score >= 6500))
114 {
115 [self unschedule:@selector(randomlyAddObject:)];
116 [self schedule:@selector(randomlyAddObject:) interval:0.6f];
117 addSpeed = 0.6f;
118 } else if ((lastScore < 4500) && (score >= 4500))
119 {
120 [self unschedule:@selector(randomlyAddObject:)];
121 [self schedule:@selector(randomlyAddObject:) interval:0.7f];
122 addSpeed = 0.7f;
123 } else if ((lastScore < 2500) && (score >= 2500))
124 {
125 [self unschedule:@selector(randomlyAddObject:)];
126 [self schedule:@selector(randomlyAddObject:) interval:0.8f];
127 addSpeed = 0.8f;
128 } else if ((lastScore < 1500) && (score >= 1500))
129 {
130 [self unschedule:@selector(randomlyAddObject:)];
131 [self schedule:@selector(randomlyAddObject:) interval:0.9f];
132 addSpeed = 0.9f;
133 } else if ((lastScore < 500) && (score >= 500))
134 {
135 [self unschedule:@selector(randomlyAddObject:)];
136 [self schedule:@selector(randomlyAddObject:) interval:1.0f];
137 addSpeed = 1.0f;
138 } else if ((lastScore < 150) && (score >= 150))
139 {
140 [self unschedule:@selector(randomlyAddObject:)];
141 [self schedule:@selector(randomlyAddObject:) interval:2.0f];
142 addSpeed = 2.0f;
143 }
144 }
145}
146
147- (void)randomlyAddObject:(ccTime)dt
148{
149 FallingObject* object;
150 int oneuppercent = 98 - (lives == 1 ? 1 : 0);
151
152 if (score < 1000)
153 {
154 int randomval = arc4random()%100;
155
156 if (randomval < 65)
157 {
158 object = [[Cherry alloc] init];
159 } else if (randomval < oneuppercent)
160 {
161 object = [[Bottle alloc] init];
162 } else {
163 object = [[OneUp alloc] init];
164 }
165 } else {
166 int randomval = arc4random()%100;
167
168 if (randomval < 40)
169 {
170 object = [[Cherry alloc] init];
171 } else if (randomval < 70)
172 {
173 object = [[Rock alloc] init];
174 } else if (randomval < oneuppercent)
175 {
176 object = [[Bottle alloc] init];
177 } else {
178 object = [[OneUp alloc] init];
179 }
180 }
181
182 int objectX = arc4random()%448+16;
183 object.sprite.position = ccp(objectX, 360);
184 object.sprite.scale = 1;
185 [self addChild:object.sprite];
186
187 [objects addObject:object];
188 [object release];
189
190 if (score >= 2000)
191 {
192 if (arc4random() % 100 > 80)
193 {
194 object = [[Rock alloc] init];
195
196 objectX = arc4random()%448+16;
197 object.sprite.position = ccp(objectX, 360);
198 object.sprite.scale = 1;
199 [self addChild:object.sprite];
200
201 [objects addObject:object];
202 [object release];
203 }
204 }
205
206 if (score >= 4000)
207 {
208 if (arc4random() % 100 > 80)
209 {
210 object = [[Rock alloc] init];
211
212 objectX = arc4random()%448+16;
213 object.sprite.position = ccp(objectX, 360);
214 object.sprite.scale = 1;
215 [self addChild:object.sprite];
216
217 [objects addObject:object];
218 [object release];
219 }
220 }
221}
222
223- (id)init
224{
225 self = [super init];
226
227 int winWidth = [CCDirector sharedDirector].winSize.width;
228 //int winHeight = [CCDirector sharedDirector].winSize.height;
229 int cartScale = 2;
230
231 if (self != nil)
232 {
233 CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"];
234 backgroundImage.position = ccp(240, 160);
235 [self addChild:backgroundImage z:0];
236
237 isAccelerometerEnabled_ = YES;
238
239 //cart = [[Cart alloc] init];
240 cartSprite = [CCSprite spriteWithFile:@"cart.png"];
241 cartSprite.position = ccp(winWidth/2, 22);
242 cartSprite.scale = cartScale;
243 [self addChild:cartSprite];
244
245 objects = [[NSMutableSet alloc] init];
246
247 score = 0;
248 lives = 3;
249
250 scoreLabel = [CCLabelBMFont labelWithString:@"Score: 0" fntFile:@"helvetica2.fnt"];
251 scoreLabel.position = ccp(50, 300);
252 [self addChild:scoreLabel];
253
254 livesLabel = [CCLabelBMFont labelWithString:@"Lives: 3" fntFile:@"helvetica2.fnt"];
255 livesLabel.position = ccp(50, 280);
256 [self addChild:livesLabel];
257
258 CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(pause)];
259 CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil];
260 [pauseMenu setPosition:ccp(480-8-16, 320-8-16)];
261 [self addChild:pauseMenu];
262
263 addSpeed = 2.5f;
264 }
265
266 return self;
267}
268
269-(void) onEnter
270{
271 [super onEnter];
272
273 [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 60)];
274 [self schedule:@selector(tick:) interval:1.0f/60.0f];
275 [self schedule:@selector(randomlyAddObject:) interval:addSpeed];
276}
277
278- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
279{
280 static float prevY=0;
281
282#define kFilterFactor 0.05f
283
284 float accelY = -((float) acceleration.y * kFilterFactor + (1- kFilterFactor)*prevY);
285
286 prevY = accelY;
287 accelX = accelY * 750;
288}
289
290- (void)updateLabels
291{
292 [scoreLabel setString:[NSString stringWithFormat:@"Score: %d", score]];
293 [livesLabel setString:[NSString stringWithFormat:@"Lives: %d", lives]];
294}
295
296- (void)pause
297{
298 [[CCDirector sharedDirector] replaceScene:[PauseLayer sceneWithScene:[[CCDirector sharedDirector] runningScene]]];
299}
300
301@end
diff --git a/Classes/GameOverLayer.h b/Classes/GameOverLayer.h new file mode 100755 index 0000000..ea533ac --- /dev/null +++ b/Classes/GameOverLayer.h
@@ -0,0 +1,32 @@
1//
2// GameOverLayer.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "cocos2d.h"
11#import "Cart_CollectAppDelegate.h"
12#import <sqlite3.h>
13#import "cocoslive.h"
14
15@class MainMenuLayer;
16
17@interface GameOverLayer : CCLayer <UITextFieldDelegate, UIAlertViewDelegate> {
18 UILabel* scoreField;
19 UITextField* textField;
20 UISwitch* submitSwitch;
21 UIActivityIndicatorView* activityIndicator;
22 UIButton* backButton;
23 int score;
24}
25
26+ (CCScene*)sceneWithScore:(int)score;
27- (id)initWithScore:(int)score;
28- (void)newgame;
29- (void)submitScore;
30- (void)exit;
31
32@end
diff --git a/Classes/GameOverLayer.m b/Classes/GameOverLayer.m new file mode 100755 index 0000000..65b11e1 --- /dev/null +++ b/Classes/GameOverLayer.m
@@ -0,0 +1,196 @@
1//
2// GameOverLayer.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "GameOverLayer.h"
10
11
12@implementation GameOverLayer
13
14+ (CCScene*)sceneWithScore:(int)score
15{
16 CCScene* scene = [CCScene node];
17
18 CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)];
19 [scene addChild:backgroundLayer];
20
21 GameOverLayer* layer = [[[GameOverLayer alloc] initWithScore:score] autorelease];
22 [scene addChild:layer];
23
24 return scene;
25}
26
27- (id)initWithScore:(int)score2
28{
29 self = [super init];
30
31 if (nil != self)
32 {
33 CCSprite* backgroundImage = [CCSprite spriteWithFile:@"Morning1.png"];
34 backgroundImage.position = ccp(240, 160);
35 [self addChild:backgroundImage z:0];
36
37 score = score2;
38
39 scoreField = [[UILabel alloc] initWithFrame:CGRectMake(205, 320-200-320, 0, 0)];
40 [scoreField setFont:[UIFont systemFontOfSize:20.0f]];
41 [scoreField setBackgroundColor:[UIColor clearColor]];
42 [scoreField setText:[NSString stringWithFormat:@"%d", score2]];
43 CGSize labelSize = [scoreField.text sizeWithFont:scoreField.font constrainedToSize:CGSizeMake(160, 31) lineBreakMode:UILineBreakModeClip];
44 [scoreField setFrame:CGRectMake(scoreField.frame.origin.x, scoreField.frame.origin.y, labelSize.width, labelSize.height)];
45 [[[CCDirector sharedDirector] openGLView] addSubview:scoreField];
46
47 textField = [[UITextField alloc] initWithFrame:CGRectMake(205, 320-247-320, 216, 31)];
48 [textField setFont:[UIFont systemFontOfSize:20.0f]];
49 [textField setBackgroundColor:[UIColor clearColor]];
50 [textField setDelegate:self];
51 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
52 [textField setText:[defaults objectForKey:@"username"]];
53 [[[CCDirector sharedDirector] openGLView] addSubview:textField];
54
55 submitSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(211, 320-161-320, 0, 0)];
56 [submitSwitch setOn:[defaults boolForKey:@"submitScore"]];
57 [[[CCDirector sharedDirector] openGLView] addSubview:submitSwitch];
58
59 activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(480-20-10, 320-20-10, 20, 20)];
60 [[[CCDirector sharedDirector] openGLView] addSubview:activityIndicator];
61
62 backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
63 [backButton setFrame:CGRectMake(240-154/2, 320-60-15-320, 154, 31)];
64 [backButton setTitle:@"Back to Main Menu" forState:UIControlStateNormal];
65 [backButton addTarget:self action:@selector(newgame) forControlEvents:UIControlEventTouchUpInside];
66 [backButton.titleLabel setFont:[UIFont systemFontOfSize:16.0]];
67 [backButton.titleLabel setTextColor:[UIColor blackColor]];
68
69 [[[CCDirector sharedDirector] openGLView] addSubview:backButton];
70 }
71
72 return self;
73}
74
75- (void)onEnter
76{
77 [UIView beginAnimations:nil context:NULL];
78 [UIView setAnimationDuration:1.5f];
79 [UIView setAnimationCurve:UIViewAnimationCurveLinear];
80 scoreField.transform = CGAffineTransformMakeTranslation(0, 320);
81 textField.transform = CGAffineTransformMakeTranslation(0, 320);
82 submitSwitch.transform = CGAffineTransformMakeTranslation(0, 320);
83 backButton.transform = CGAffineTransformMakeTranslation(0, 320);
84 [UIView commitAnimations];
85}
86
87- (void)newgame
88{
89 backButton.enabled = NO;
90 textField.enabled = NO;
91 submitSwitch.enabled = NO;
92
93 const char* sqlQuery = [[NSString stringWithFormat:@"INSERT INTO highscores (name, score) VALUES (\"%@\",%d)", [textField text], score] UTF8String];
94 sqlite3_stmt* compiled_statement;
95
96 if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK)
97 {
98 sqlite3_step(compiled_statement);
99 NSLog(@"awesome, %@", [textField text]);
100 } else {
101 NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg([Cart_CollectAppDelegate database]));
102 }
103
104 if (submitSwitch.on)
105 {
106 [self submitScore];
107 } else {
108 [self exit];
109 }
110}
111
112- (void)submitScore
113{
114 [activityIndicator startAnimating];
115
116 CLScoreServerPost* server = [[CLScoreServerPost alloc] initWithGameName:@"Cart Collect" gameKey:@"38f440a074b3264386455a36b2706d8f" delegate:self];
117 NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
118 [dict setObject:@"Classic" forKey:@"cc_category"];
119 [dict setObject:[textField text] forKey:@"cc_playername"];
120 [dict setObject:[NSNumber numberWithInt:score] forKey:@"cc_score"];
121 [server sendScore:dict];
122 [server release];
123 [dict release];
124}
125
126- (BOOL)textFieldShouldReturn:(UITextField *)m_textField
127{
128 [m_textField resignFirstResponder];
129
130 return YES;
131}
132
133- (void)scorePostOk:(id)sender
134{
135 [activityIndicator stopAnimating];
136
137 // Score post successful
138 [self exit];
139}
140
141- (void)scorePostFail:(id)sender
142{
143 [activityIndicator stopAnimating];
144
145 // score post failed
146 tPostStatus status = [sender postStatus];
147 if( status == kPostStatusPostFailed ) {
148 NSLog(@"SERVER ERROR");
149 // an error with the server ?
150 // try again
151 }else if( status == kPostStatusConnectionFailed ) {
152 NSLog(@"CONNECTION FAILURE");
153 // a error establishing the connection ?
154 // turn-on wifi, and then try again
155 }
156
157 UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Whoops" message:@"There was an error posting your score. Please make sure you have Internet access." delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Cancel", nil];
158 [alertView show];
159 [alertView release];
160}
161
162- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
163{
164 if (buttonIndex == 0)
165 {
166 [self submitScore];
167 } else if (buttonIndex == 1)
168 {
169 [self exit];
170 }
171}
172
173- (void)exit
174{
175 NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
176 [defaults setObject:[textField text] forKey:@"username"];
177 [defaults setBool:submitSwitch.on forKey:@"submitScore"];
178
179 [submitSwitch removeFromSuperview];
180 [submitSwitch release];
181
182 [textField removeFromSuperview];
183 [textField release];
184
185 [scoreField removeFromSuperview];
186 [scoreField release];
187
188 [activityIndicator removeFromSuperview];
189 [activityIndicator release];
190
191 [backButton removeFromSuperview];
192
193 [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]];
194}
195
196@end
diff --git a/Classes/Highscore.h b/Classes/Highscore.h new file mode 100755 index 0000000..4cab75f --- /dev/null +++ b/Classes/Highscore.h
@@ -0,0 +1,25 @@
1//
2// Highscore.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import <sqlite3.h>
11#import "Cart_CollectAppDelegate.h"
12#import "cocoslive.h"
13
14@interface Highscore : NSObject {
15 NSString* name;
16 int score;
17 NSDate* date;
18}
19
20@property (readonly) NSString* name;
21@property (readonly) int score;
22@property (readonly) NSDate* date;
23- (id)initWithName:(NSString*)name score:(int)score date:(NSDate*)date;
24
25@end
diff --git a/Classes/Highscore.m b/Classes/Highscore.m new file mode 100755 index 0000000..7239cca --- /dev/null +++ b/Classes/Highscore.m
@@ -0,0 +1,37 @@
1//
2// Highscore.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "Highscore.h"
10
11
12@implementation Highscore
13
14@synthesize name, score, date;
15
16- (id)initWithName:(NSString*)m_name score:(int)m_score date:(NSDate*)m_date
17{
18 self = [super init];
19
20 if (nil != self)
21 {
22 name = [m_name retain];
23 score = m_score;
24 date = [m_date retain];
25 }
26
27 return self;
28}
29
30- (void)dealloc
31{
32 [name release];
33 [date release];
34 [super dealloc];
35}
36
37@end
diff --git a/Classes/HighscoreListController.h b/Classes/HighscoreListController.h new file mode 100755 index 0000000..f673609 --- /dev/null +++ b/Classes/HighscoreListController.h
@@ -0,0 +1,32 @@
1//
2// HighscoreListController.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <UIKit/UIKit.h>
10#import "Highscore.h"
11#import "cocoslive.h"
12#import "RootViewController.h"
13
14@interface HighscoreListController : UITableViewController {
15 UINavigationBar* navigationBar;
16 UINavigationItem* myNavigationItem;
17 NSArray* localHighscores;
18 NSArray* globalHighscores;
19 BOOL showGlobal;
20 BOOL loadingGlobal;
21 UIView* loadingView;
22 UIActivityIndicatorView* activity;
23 UILabel* statusText;
24 UITableView* tableView;
25}
26
27- (void)back;
28- (void)switchLists:(id)sender;
29- (void)scoreRequestOk:(id)sender;
30- (void)scoreRequestFail:(id)sender;
31
32@end
diff --git a/Classes/HighscoreListController.m b/Classes/HighscoreListController.m new file mode 100755 index 0000000..9980727 --- /dev/null +++ b/Classes/HighscoreListController.m
@@ -0,0 +1,371 @@
1//
2// HighscoreListController.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "HighscoreListController.h"
10
11
12@implementation HighscoreListController
13
14
15#pragma mark -
16#pragma mark Initialization
17
18- (id)initWithStyle:(UITableViewStyle)style {
19 // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
20 self = [super initWithStyle:style];
21 if (self) {
22 NSMutableArray* highscores = [NSMutableArray arrayWithCapacity:15];
23 const char* sqlQuery = "SELECT * FROM highscores ORDER BY score DESC LIMIT 15";
24 sqlite3_stmt* compiled_statement;
25
26 if (sqlite3_prepare_v2([Cart_CollectAppDelegate database], sqlQuery, -1, &compiled_statement, NULL) == SQLITE_OK)
27 {
28 while (sqlite3_step(compiled_statement) == SQLITE_ROW)
29 {
30 NSString* name = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiled_statement, 1)];
31 int score = sqlite3_column_int(compiled_statement, 2);
32
33 NSDate* date = nil;
34 char* dateStr = (char*)sqlite3_column_text(compiled_statement, 3);
35 if (dateStr != NULL)
36 {
37 NSString* theDate = [NSString stringWithUTF8String:dateStr];
38 NSDateComponents* comps = [[NSDateComponents alloc] init];
39 [comps setYear:[[theDate substringToIndex:4] intValue]];
40 [comps setMonth:[[theDate substringWithRange:NSMakeRange(5, 2)] intValue]];
41 [comps setDay:[[theDate substringWithRange:NSMakeRange(8, 2)] intValue]];
42 [comps setHour:[[theDate substringWithRange:NSMakeRange(11, 2)] intValue]];
43 [comps setMinute:[[theDate substringWithRange:NSMakeRange(14, 2)] intValue]];
44 [comps setSecond:[[theDate substringWithRange:NSMakeRange(17, 2)] intValue]];
45 date = [[NSCalendar currentCalendar] dateFromComponents:comps];
46 date = [date dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]];
47 [comps release];
48 }
49
50 Highscore* highscore = [[Highscore alloc] initWithName:name score:score date:date];
51 [highscores addObject:highscore];
52 [highscore release];
53 }
54 }
55
56 localHighscores = [highscores copy];
57
58 navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
59 myNavigationItem = [[UINavigationItem alloc] initWithTitle:@"Highscores"];
60 UIBarButtonItem* barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(back)];
61 myNavigationItem.leftBarButtonItem = barButton;
62 [barButton release];
63
64 UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Local", @"Global", nil]];
65 segmentedControl.selectedSegmentIndex = 0;
66 segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
67 [segmentedControl addTarget:self action:@selector(switchLists:) forControlEvents:UIControlEventValueChanged];
68 UIBarButtonItem* barButton2 = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
69 [segmentedControl release];
70 myNavigationItem.rightBarButtonItem = barButton2;
71 [barButton2 release];
72
73 [navigationBar pushNavigationItem:myNavigationItem animated:NO];
74
75 showGlobal = NO;
76 loadingGlobal = NO;
77
78 tableView = [(UITableView*)self.view retain];
79 UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
80 [tableView setFrame:CGRectMake(0, 44, 320, 480-44)];
81 [parentView addSubview:navigationBar];
82 [parentView addSubview:tableView];
83 self.view = parentView;
84 [parentView release];
85 }
86 return self;
87}
88
89
90#pragma mark -
91#pragma mark View lifecycle
92
93/*
94- (void)viewDidLoad {
95 [super viewDidLoad];
96
97 // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
98 // self.navigationItem.rightBarButtonItem = self.editButtonItem;
99}
100*/
101
102/*
103- (void)viewWillAppear:(BOOL)animated {
104 [super viewWillAppear:animated];
105}
106*/
107/*
108- (void)viewDidAppear:(BOOL)animated {
109 [super viewDidAppear:animated];
110}
111*/
112/*
113- (void)viewWillDisappear:(BOOL)animated {
114 [super viewWillDisappear:animated];
115}
116*/
117/*
118- (void)viewDidDisappear:(BOOL)animated {
119 [super viewDidDisappear:animated];
120}
121*/
122/*
123// Override to allow orientations other than the default portrait orientation.
124- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
125 // Return YES for supported orientations.
126 return YES;
127}
128*/
129
130
131#pragma mark -
132#pragma mark Table view data source
133
134- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
135 // Return the number of sections.
136 return 1;
137}
138
139
140- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
141 // Return the number of rows in the section.
142 if (showGlobal)
143 {
144 return [globalHighscores count];
145 } else {
146 return [localHighscores count];
147 }
148}
149
150
151// Customize the appearance of table view cells.
152- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
153{
154 NSString* cellIdentifier;
155 Highscore* highscore;
156
157 // Configure the cell...
158 if (showGlobal)
159 {
160 cellIdentifier = [NSString stringWithFormat:@"Global %d", [indexPath row]];
161 highscore = [globalHighscores objectAtIndex:[indexPath row]];
162 } else {
163 cellIdentifier = [NSString stringWithFormat:@"Local %d", [indexPath row]];
164 highscore = [localHighscores objectAtIndex:[indexPath row]];
165 }
166
167 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
168 if (cell == nil) {
169 cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease];
170 }
171
172 cell.textLabel.text = highscore.name;
173
174 if (highscore.date != nil)
175 {
176 NSDate* todayDate = [NSDate date];
177 double ti = [highscore.date timeIntervalSinceDate:todayDate];
178 ti = ti * -1;
179
180 if (ti < 1)
181 {
182 cell.detailTextLabel.text = @"What is this I don't even";
183 } else if (ti < 60)
184 {
185 cell.detailTextLabel.text = @"Less than a minute ago";
186 } else if (ti < 3600)
187 {
188 int diff = round(ti / 60);
189 cell.detailTextLabel.text = [NSString stringWithFormat:@"%d minutes ago", diff];
190 } else if (ti < 86400)
191 {
192 int diff = round(ti / 60 / 60);
193 cell.detailTextLabel.text = [NSString stringWithFormat:@"%d hours ago", diff];
194 } else {
195 NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
196 [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
197 [dateFormatter setDateStyle:NSDateFormatterLongStyle];
198 cell.detailTextLabel.text = [dateFormatter stringFromDate:highscore.date];
199 [dateFormatter release];
200 }
201 }
202
203 UILabel* scoreLabel = [[UILabel alloc] init];
204 scoreLabel.text = [NSString stringWithFormat:@"%d", highscore.score];
205 CGSize labelSize = [scoreLabel.text sizeWithFont:scoreLabel.font constrainedToSize:CGSizeMake(160, 44) lineBreakMode:UILineBreakModeClip];
206 scoreLabel.frame = CGRectMake(320-10-labelSize.width, 22-labelSize.height/2, labelSize.width, labelSize.height);
207 [cell addSubview:scoreLabel];
208 [scoreLabel release];
209
210 cell.selectionStyle = UITableViewCellSelectionStyleNone;
211
212 return cell;
213}
214
215
216/*
217// Override to support conditional editing of the table view.
218- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
219 // Return NO if you do not want the specified item to be editable.
220 return YES;
221}
222*/
223
224
225/*
226// Override to support editing the table view.
227- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
228
229 if (editingStyle == UITableViewCellEditingStyleDelete) {
230 // Delete the row from the data source.
231 [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
232 }
233 else if (editingStyle == UITableViewCellEditingStyleInsert) {
234 // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
235 }
236}
237*/
238
239
240/*
241// Override to support rearranging the table view.
242- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
243}
244*/
245
246
247/*
248// Override to support conditional rearranging of the table view.
249- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
250 // Return NO if you do not want the item to be re-orderable.
251 return YES;
252}
253*/
254
255
256#pragma mark -
257#pragma mark Table view delegate
258
259- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
260 // Navigation logic may go here. Create and push another view controller.
261 /*
262 <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
263 // ...
264 // Pass the selected object to the new view controller.
265 [self.navigationController pushViewController:detailViewController animated:YES];
266 [detailViewController release];
267 */
268}
269
270
271#pragma mark -
272#pragma mark Memory management
273
274- (void)didReceiveMemoryWarning {
275 // Releases the view if it doesn't have a superview.
276 [super didReceiveMemoryWarning];
277
278 // Relinquish ownership any cached data, images, etc. that aren't in use.
279}
280
281- (void)viewDidUnload {
282 // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
283 // For example: self.myOutlet = nil;
284}
285
286
287- (void)dealloc {
288 [super dealloc];
289}
290
291- (void)back
292{
293 RootViewController* viewController = [[[UIApplication sharedApplication] delegate] viewController];
294 [[[[UIApplication sharedApplication] delegate] window] setRootViewController:viewController];
295}
296
297- (void)switchLists:(id)sender
298{
299 if ([(UISegmentedControl*)sender selectedSegmentIndex] == 0)
300 {
301 if (loadingGlobal)
302 {
303 [loadingView removeFromSuperview];
304 [self.view addSubview:tableView];
305 }
306
307 showGlobal = NO;
308 [tableView reloadData];
309 } else {
310 if (globalHighscores == nil)
311 {
312 loadingGlobal = YES;
313
314 loadingView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, 320, 480-44)];
315 activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150, 228-44, 20, 20)];
316 activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
317 statusText = [[UILabel alloc] initWithFrame:CGRectMake(0, 256-44, 320, 21)];
318 statusText.text = @"Downloading highscores...";
319 statusText.textAlignment = UITextAlignmentCenter;
320
321 [loadingView addSubview:activity];
322 [loadingView addSubview:statusText];
323 [loadingView setBackgroundColor:[UIColor whiteColor]];
324 [activity startAnimating];
325 [tableView removeFromSuperview];
326 [self.view addSubview:loadingView];
327
328 CLScoreServerRequest* request = [[CLScoreServerRequest alloc] initWithGameName:@"Cart Collect" delegate:self];
329 tQueryFlags flags = kQueryFlagIgnore;
330 [request requestScores:kQueryAllTime limit:15 offset:0 flags:flags category:@"Classic"];
331 [request release];
332 } else {
333 showGlobal = YES;
334 [tableView reloadData];
335 }
336 }
337}
338
339- (void)scoreRequestOk:(id)sender
340{
341 NSArray* highscores = [sender parseScores];
342 NSMutableArray* highscoreTemp = [[NSMutableArray alloc] init];
343
344 for (NSDictionary* data in highscores)
345 {
346 NSString* name = [data objectForKey:@"cc_playername"];
347 int score = [[data objectForKey:@"cc_score"] intValue];
348 NSDate* date = [NSDate dateWithTimeIntervalSince1970:[[data objectForKey:@"cc_when"] intValue]];
349 Highscore* highscore = [[Highscore alloc] initWithName:name score:score date:date];
350 [highscoreTemp addObject:highscore];
351 [highscore release];
352 }
353
354 globalHighscores = [highscoreTemp copy];
355 [highscoreTemp release];
356
357 loadingGlobal = NO;
358 [loadingView removeFromSuperview];
359 [self.view addSubview:tableView];
360 showGlobal = YES;
361 [tableView reloadData];
362}
363
364- (void)scoreRequestFail:(id)sender
365{
366 [activity stopAnimating];
367 [statusText setText:@"Unable to download highscores."];
368}
369
370@end
371
diff --git a/Classes/MainMenuLayer.h b/Classes/MainMenuLayer.h new file mode 100755 index 0000000..fc4f82f --- /dev/null +++ b/Classes/MainMenuLayer.h
@@ -0,0 +1,24 @@
1//
2// MainMenuLayer.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "cocos2d.h"
11#import "HighscoreListController.h"
12
13@class GameLayer;
14
15@interface MainMenuLayer : CCLayer {
16
17}
18
19+ (CCScene*)scene;
20- (id)init;
21- (void)newgame;
22- (void)highscores;
23
24@end
diff --git a/Classes/MainMenuLayer.m b/Classes/MainMenuLayer.m new file mode 100755 index 0000000..ac7f4a7 --- /dev/null +++ b/Classes/MainMenuLayer.m
@@ -0,0 +1,68 @@
1//
2// MainMenuLayer.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "MainMenuLayer.h"
10
11
12@implementation MainMenuLayer
13
14+ (CCScene*)scene
15{
16 CCScene* scene = [CCScene node];
17
18 MainMenuLayer* layer = [MainMenuLayer node];
19 [scene addChild:layer];
20
21 return scene;
22}
23
24- (id)init
25{
26 self = [super init];
27
28 if (nil != self)
29 {
30 CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"];
31 backgroundImage.position = ccp(240,160);
32 [self addChild:backgroundImage];
33
34 CCLabelBMFont* titleText = [CCLabelBMFont labelWithString:@"Cart Collect - The Game!" fntFile:@"getoffthatboatrightnowyounglady.fnt"];
35 titleText.position = ccp(240, 320-64);
36 [self addChild:titleText];
37
38 //CCLabelBMFont* menuItemLabel1 = [CCLabelBMFont labelWithString:@"New Game" fntFile:@"getoffthatboatrightnowyounglady.fnt"];
39 //CCMenuItemLabel* menuItem1 = [CCMenuItemLabel itemWithLabel:menuItemLabel1 target:self selector:@selector(newgame)];
40
41 //CCLabelBMFont* menuItemLabel2 = [CCLabelBMFont labelWithString:@"Highscores" fntFile:@"getoffthatboatrightnowyounglady.fnt"];
42 //CCMenuItemLabel* menuItem2 = [CCMenuItemLabel itemWithLabel:menuItemLabel2 target:self selector:@selector(highscores)];
43
44 CCMenuItemImage* menuItem1 = [CCMenuItemImage itemFromNormalImage:@"newgame.png" selectedImage:@"newgame2.png" target:self selector:@selector(newgame)];
45 CCMenuItemImage* menuItem2 = [CCMenuItemImage itemFromNormalImage:@"highscores.png" selectedImage:@"highscores2.png" target:self selector:@selector(highscores)];
46
47 CCMenu* menu = [CCMenu menuWithItems:menuItem1, menuItem2, nil];
48 [menu alignItemsVertically];
49 menu.position = ccp(240, 100);
50 [self addChild:menu];
51 }
52
53 return self;
54}
55
56- (void)newgame
57{
58 [[CCDirector sharedDirector] replaceScene:[GameLayer scene]];
59}
60
61- (void)highscores
62{
63 HighscoreListController* listController = [[HighscoreListController alloc] initWithStyle:UITableViewStylePlain];
64 [[[[UIApplication sharedApplication] delegate] window] setRootViewController:listController];
65 [listController release];
66}
67
68@end
diff --git a/Classes/OneUp.h b/Classes/OneUp.h new file mode 100755 index 0000000..8bd4c66 --- /dev/null +++ b/Classes/OneUp.h
@@ -0,0 +1,18 @@
1//
2// OneUp.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "FallingObject.h"
11
12@interface OneUp : FallingObject {
13
14}
15
16- (id)init;
17
18@end
diff --git a/Classes/OneUp.m b/Classes/OneUp.m new file mode 100755 index 0000000..e09935c --- /dev/null +++ b/Classes/OneUp.m
@@ -0,0 +1,27 @@
1//
2// OneUp.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "OneUp.h"
10
11
12@implementation OneUp
13
14- (id)init
15{
16 self = [super init];
17
18 if (nil != self)
19 {
20 sprite = [CCSprite spriteWithFile:@"oneup.png"];
21 weight = 10;
22 }
23
24 return self;
25}
26
27@end
diff --git a/Classes/PauseLayer.h b/Classes/PauseLayer.h new file mode 100755 index 0000000..aae5d6c --- /dev/null +++ b/Classes/PauseLayer.h
@@ -0,0 +1,22 @@
1//
2// PauseLayer.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "cocos2d.h"
11#import "GameLayer.h"
12
13@interface PauseLayer : CCLayer {
14 CCScene* game;
15}
16
17+ (CCScene*)sceneWithScene:(CCScene*)scene;
18- (id)initWithScene:(CCScene*)scene;
19- (void)unpause;
20- (void)newgame;
21
22@end
diff --git a/Classes/PauseLayer.m b/Classes/PauseLayer.m new file mode 100755 index 0000000..53574b2 --- /dev/null +++ b/Classes/PauseLayer.m
@@ -0,0 +1,68 @@
1//
2// PauseLayer.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "PauseLayer.h"
10
11@implementation PauseLayer
12
13+ (CCScene*)sceneWithScene:(CCScene*)scene2
14{
15 CCScene* scene = [CCScene node];
16
17 CCLayerColor* backgroundLayer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)];
18 CCSprite* backgroundImage = [CCSprite spriteWithFile:@"SeaBeach.png"];
19 backgroundImage.position = ccp(240,160);
20 [backgroundLayer addChild:backgroundImage];
21 [scene addChild:backgroundLayer];
22
23 CCLayerColor* backgroundLayer2 = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)];
24 [scene addChild:backgroundLayer2];
25
26 PauseLayer* layer = [[[PauseLayer alloc] initWithScene:scene2] autorelease];
27 [scene addChild:layer];
28
29 return scene;
30}
31
32- (id)initWithScene:(CCScene*)scene
33{
34 self = [super init];
35
36 if (nil != self)
37 {
38 game = [scene retain];
39
40 CCLabelBMFont* scoreLabel = [CCLabelBMFont labelWithString:@"PAUSE" fntFile:@"helvetica.fnt"];
41 scoreLabel.position = ccp(240,90);
42 [self addChild:scoreLabel];
43
44 CCMenuItemImage* pauseButton = [CCMenuItemImage itemFromNormalImage:@"pause2.png" selectedImage:@"pause.png" target:self selector:@selector(unpause)];
45 CCMenu* pauseMenu = [CCMenu menuWithItems:pauseButton, nil];
46 [pauseMenu setPosition:ccp(480-8-16, 320-8-16)];
47 [self addChild:pauseMenu];
48
49 CCMenuItemImage* newgameMenuItem = [CCMenuItemImage itemFromNormalImage:@"back.png" selectedImage:@"back2.png" target:self selector:@selector(newgame)];
50 CCMenu* myMenu = [CCMenu menuWithItems:newgameMenuItem, nil];
51 myMenu.position = ccp(240, 60);
52 [self addChild:myMenu];
53 }
54
55 return self;
56}
57
58- (void)unpause
59{
60 [[CCDirector sharedDirector] replaceScene:game];
61}
62
63- (void)newgame
64{
65 [[CCDirector sharedDirector] replaceScene:[MainMenuLayer scene]];
66}
67
68@end
diff --git a/Classes/Rock.h b/Classes/Rock.h new file mode 100755 index 0000000..7382d99 --- /dev/null +++ b/Classes/Rock.h
@@ -0,0 +1,18 @@
1//
2// Rock.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10#import "FallingObject.h"
11
12@interface Rock : FallingObject {
13
14}
15
16- (id)init;
17
18@end
diff --git a/Classes/Rock.m b/Classes/Rock.m new file mode 100755 index 0000000..a3b3b9e --- /dev/null +++ b/Classes/Rock.m
@@ -0,0 +1,27 @@
1//
2// Rock.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/19/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import "Rock.h"
10
11
12@implementation Rock
13
14- (id)init
15{
16 self = [super init];
17
18 if (nil != self)
19 {
20 sprite = [CCSprite spriteWithFile:@"rock.png"];
21 weight = 7;
22 }
23
24 return self;
25}
26
27@end
diff --git a/Classes/RootViewController.h b/Classes/RootViewController.h new file mode 100755 index 0000000..956c133 --- /dev/null +++ b/Classes/RootViewController.h
@@ -0,0 +1,16 @@
1//
2// RootViewController.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/18/11.
6// Copyright __MyCompanyName__ 2011. All rights reserved.
7//
8
9#import <UIKit/UIKit.h>
10
11
12@interface RootViewController : UIViewController {
13
14}
15
16@end
diff --git a/Classes/RootViewController.m b/Classes/RootViewController.m new file mode 100755 index 0000000..edd67cb --- /dev/null +++ b/Classes/RootViewController.m
@@ -0,0 +1,152 @@
1//
2// RootViewController.m
3// Cart Collect
4//
5// Created by iD Student Account on 7/18/11.
6// Copyright __MyCompanyName__ 2011. All rights reserved.
7//
8
9//
10// RootViewController + iAd
11// If you want to support iAd, use this class as the controller of your iAd
12//
13
14#import "cocos2d.h"
15
16#import "RootViewController.h"
17#import "GameConfig.h"
18
19@implementation RootViewController
20
21/*
22 // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
23 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
24 if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
25 // Custom initialization
26 }
27 return self;
28 }
29 */
30
31/*
32 // Implement loadView to create a view hierarchy programmatically, without using a nib.
33 - (void)loadView {
34 }
35 */
36
37/*
38 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
39 - (void)viewDidLoad {
40 [super viewDidLoad];
41 }
42 */
43
44
45// Override to allow orientations other than the default portrait orientation.
46- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
47
48 //
49 // There are 2 ways to support auto-rotation:
50 // - The OpenGL / cocos2d way
51 // - Faster, but doesn't rotate the UIKit objects
52 // - The ViewController way
53 // - A bit slower, but the UiKit objects are placed in the right place
54 //
55
56#if GAME_AUTOROTATION==kGameAutorotationNone
57 //
58 // EAGLView won't be autorotated.
59 // Since this method should return YES in at least 1 orientation,
60 // we return YES only in the Portrait orientation
61 //
62 return ( interfaceOrientation == kCCDeviceOrientationLandscapeLeft );
63
64#elif GAME_AUTOROTATION==kGameAutorotationCCDirector
65 //
66 // EAGLView will be rotated by cocos2d
67 //
68 // Sample: Autorotate only in landscape mode
69 //
70 if( interfaceOrientation == UIInterfaceOrientationLandscapeLeft ) {
71 [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeRight];
72 } else if( interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
73 [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeLeft];
74 }
75
76 // Since this method should return YES in at least 1 orientation,
77 // we return YES only in the Portrait orientation
78 return ( interfaceOrientation == UIInterfaceOrientationPortrait );
79
80#elif GAME_AUTOROTATION == kGameAutorotationUIViewController
81 //
82 // EAGLView will be rotated by the UIViewController
83 //
84 // Sample: Autorotate only in landscpe mode
85 //
86 // return YES for the supported orientations
87
88 return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) );
89
90#else
91#error Unknown value in GAME_AUTOROTATION
92
93#endif // GAME_AUTOROTATION
94
95
96 // Shold not happen
97 return NO;
98}
99
100//
101// This callback only will be called when GAME_AUTOROTATION == kGameAutorotationUIViewController
102//
103#if GAME_AUTOROTATION == kGameAutorotationUIViewController
104-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
105{
106 //
107 // Assuming that the main window has the size of the screen
108 // BUG: This won't work if the EAGLView is not fullscreen
109 ///
110 CGRect screenRect = [[UIScreen mainScreen] bounds];
111 CGRect rect;
112
113 if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
114 rect = screenRect;
115
116 else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
117 rect.size = CGSizeMake( screenRect.size.height, screenRect.size.width );
118
119 CCDirector *director = [CCDirector sharedDirector];
120 EAGLView *glView = [director openGLView];
121 float contentScaleFactor = [director contentScaleFactor];
122
123 if( contentScaleFactor != 1 ) {
124 rect.size.width *= contentScaleFactor;
125 rect.size.height *= contentScaleFactor;
126 }
127 glView.frame = rect;
128}
129#endif // GAME_AUTOROTATION == kGameAutorotationUIViewController
130
131
132- (void)didReceiveMemoryWarning {
133 // Releases the view if it doesn't have a superview.
134 [super didReceiveMemoryWarning];
135
136 // Release any cached data, images, etc that aren't in use.
137}
138
139- (void)viewDidUnload {
140 [super viewDidUnload];
141 // Release any retained subviews of the main view.
142 // e.g. self.myOutlet = nil;
143}
144
145
146- (void)dealloc {
147 [super dealloc];
148}
149
150
151@end
152
diff --git a/Classes/ValuableObject.h b/Classes/ValuableObject.h new file mode 100755 index 0000000..ccefbbd --- /dev/null +++ b/Classes/ValuableObject.h
@@ -0,0 +1,15 @@
1//
2// ValuableObject.h
3// Cart Collect
4//
5// Created by iD Student Account on 7/20/11.
6// Copyright 2011 __MyCompanyName__. All rights reserved.
7//
8
9#import <Foundation/Foundation.h>
10
11@protocol ValuableObject
12
13- (int)pointValue;
14
15@end