Advertisement
julong

Game Center complete !!!

Mar 11th, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //  Afro Penguin
  3. //
  4. //  Created by julong on 2/21/14.
  5. //  Copyright julong 2014. All rights reserved.
  6. //
  7. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  8. 1) .h
  9. #import <GameKit/GameKit.h>
  10. <GKLeaderboardViewControllerDelegate,GKAchievementViewControllerDelegate>
  11. uint64_t context;
  12.     bool enableGameCenter;
  13.     NSLock *writeLock;
  14. @property(nonatomic)bool enableGameCenter;
  15. @property (readonly, nonatomic) NSMutableArray * storedScores;
  16. @property (readonly, nonatomic) NSString *storedScoresFilename;
  17.  
  18. -(void)storeScore:(GKScore *)score ;
  19. -(void)resubmitStoredScores;
  20. -(void)authenticateLocalPlayer;
  21. -(void)showLeaderboardNSString:(NSString *)leaderboard ;
  22. -(void)insertCurrentTimeIntoLeaderboard:(NSString*)leaderboard ;
  23. -(void)enableGameCenter:(BOOL)enableGameCenter ;
  24.  
  25. 2).m
  26. ///////////////////////////////////////
  27. //        Game Center
  28.          NSString * leaderboardCategory = @"LeaderID";
  29.         //[self enableGameCenter:NO];
  30.         [self authenticateLocalPlayer];
  31.        // [self showLeaderboardNSString:leaderboardCategory];
  32.         //[self insertCurrentTimeIntoLeaderboard:leaderboardCategory];
  33.        
  34.         __block id copy_self = self;
  35.         // Leaderboard Menu Item using blocks
  36.         CCMenuItem *itemLeaderboard = [CCMenuItemFont itemWithString:@"Leaderboard" block:^(id sender) {
  37.            
  38.            
  39.             GKLeaderboardViewController *leaderboardViewController = [[GKLeaderboardViewController alloc] init];
  40.             leaderboardViewController.leaderboardDelegate = copy_self;
  41.            
  42.             AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
  43.            
  44.             [[app navController] presentModalViewController:leaderboardViewController animated:YES];
  45.            
  46.             [leaderboardViewController release];
  47.         }];
  48.         CCMenuItem *sendScore = [CCMenuItemFont itemWithString:@"send score" block:^(id sender)
  49.                                  {
  50.                                      
  51.                                      NSString * leaderboardCategory2 = @"LeaderID";
  52.                                      [self insertCurrentTimeIntoLeaderboard:leaderboardCategory2];
  53.  
  54.                                  }
  55.                                  ];
  56.         CCMenu *menu = [CCMenu menuWithItems:itemLeaderboard,sendScore,nil];
  57.        
  58.         [menu alignItemsHorizontallyWithPadding:20];
  59.         [menu setPosition:ccp( size.width/2, size.height/2 - 50)];
  60.        
  61.         // Add the menu to the layer
  62.         [self addChild:menu z:9999];
  63.        
  64.  
  65. ///////////////////////////////////////
  66. //////////////////////////////////////////////////////////
  67. //    SCORE
  68. //////////////////////////////////////////////////////////
  69. - (void)insertCurrentTimeIntoLeaderboard:(NSString*)leaderboard{
  70.     NSLog(@"current time state");
  71.    
  72.     int khighScore = [[NSUserDefaults standardUserDefaults] integerForKey:kHighScoreKey];
  73.    
  74.     int64_t score =khighScore;
  75.     NSLog(@"iับค่าจาก KhighScore int64 %lld",khighScore);
  76.  
  77.     GKScore * submitScore = [[[GKScore alloc] initWithCategory:leaderboard] autorelease];
  78.    
  79.     NSLog(@"set submitscore value state!");
  80.     [submitScore setValue:score];
  81.     NSLog(@"after set submitscore value is %lld",submitScore.value);
  82.    
  83.    latest score submitted.
  84.     [submitScore setShouldSetDefaultLeaderboard:YES];
  85.    
  86.  
  87.     [submitScore setContext:context++];
  88.    
  89.     [self submitScore:submitScore];
  90.     [submitScore release];
  91. }
  92. - (void)submitScore:(GKScore *)score{
  93.     if ([GKLocalPlayer localPlayer].authenticated) {
  94.         if (!score.value) {
  95.             // Unable to validate data.
  96.             NSLog(@"No data from score.value %lld",score.value);
  97.             return;
  98.         }
  99.        
  100.         // Store the scores if there is an error.
  101.        
  102.         [score reportScoreWithCompletionHandler:^(NSError *error){
  103.             if (!error || (![error code] && ![error domain])) {
  104.                 // Score submitted correctly. Resubmit others
  105.                 NSLog(@"resubmit");
  106.                 [self resubmitStoredScores];
  107.             } else {
  108.                 // Store score for next authentication.
  109.                 NSLog(@"Store score");
  110.                 [self storeScore:score];
  111.             }
  112.         }];
  113.     }
  114. }
  115. // Attempt to resubmit the scores.
  116. - (void)resubmitStoredScores
  117. {
  118.     NSLog(@"resubmit state");
  119.     if (storedScores) {
  120.         // Keeping an index prevents new entries to be added when the network is down
  121.         int index = [storedScores count]-1;
  122.         while( index >= 0 ) {
  123.             GKScore * score = [storedScores objectAtIndex:index];
  124.             [self submitScore:score];
  125.             [storedScores removeObjectAtIndex:index];
  126.             index--;
  127.         }
  128.         [self writeStoredScore];
  129.     }
  130. }
  131. // Store score for submission at a later time.
  132. - (void)storeScore:(GKScore *)score
  133. {
  134.     NSLog(@"store state");
  135.     [storedScores addObject:score];
  136.     [self writeStoredScore];
  137. }
  138. // Save stored scores to file.
  139. - (void)writeStoredScore
  140. {
  141.     [writeLock lock];
  142.     NSData * archivedScore = [NSKeyedArchiver archivedDataWithRootObject:storedScores];
  143.     NSError * error;
  144.     [archivedScore writeToFile:storedScoresFilename options:NSDataWritingFileProtectionNone error:&error];
  145.     if (error) {
  146.         //  Error saving file, handle accordingly
  147.     }
  148.     [writeLock unlock];
  149. }
  150.  
  151.  
  152. ///////////////////////
  153. #pragma mark GameKit delegate
  154. ///////////////////////////////////////
  155. //  Game Center
  156. -(void)authenticateLocalPlayer{
  157.     GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
  158.    
  159.     localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
  160.         /*if (viewController != nil) {
  161.             [self presentViewController:viewController animated:YES completion:nil];
  162.         }
  163.         else{
  164.          */
  165.             if ([GKLocalPlayer localPlayer].authenticated) {
  166.                 //enableGameCenter = YES;
  167.                
  168.                 // Get the default leaderboard identifier.
  169.                 [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {
  170.                    
  171.                     if (error != nil) {
  172.                         NSLog(@"%@", [error localizedDescription]);
  173.                     }
  174.                     else{
  175.                         leaderboardIdentifier = leaderboardIdentifier;
  176.                         NSLog(@" รับค่า  leaderboard %@",leaderboardIdentifier);
  177.                     }
  178.                 }];
  179.             /*}
  180.            
  181.             else{
  182.                 enableGameCenter = NO;
  183.             }*/
  184.         }
  185.     };
  186.    
  187. }
  188.  
  189. - (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
  190. {
  191.     AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
  192.     [[app navController] dismissModalViewControllerAnimated:YES];
  193. }
  194. //////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement