Advertisement
Guest User

Untitled

a guest
Jun 13th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //
  2. //  GamePlay.m
  3. //  Game
  4. //
  5. //  Created by Myself on 20/08/10.
  6. //  Copyright 2010 __MyCompanyName__. All rights reserved.
  7. //
  8.  
  9. #import "GamePlay.h"
  10. #import "GameOver.h"
  11. #import "HelloWorldScene.h"
  12. #import "cocos2d.h"
  13. // OpenFeint
  14. #import "OFHighScoreService.h"
  15. #import "OFHighScore.h"
  16. #import "OFAchievementService.h"
  17. #import "OFAchievement.h"
  18.  
  19. // Constantes
  20. #define kGraviteMultiplieur 20
  21. #define kGravite 0.195
  22.  
  23. #define SMELLS_GOOD__ @"550802"
  24. #define ONE_MORE_KILO__ @"550812"
  25. #define BRAND_BAG__ @"550822"
  26. #define CRAZY_SHOES__ @"550832"
  27. #define HOT_LIPS__ @"550842"
  28. #define EXPERIENCER__ @"552042"
  29.  
  30.  
  31. //Ici on crée les éléments qu'on pourra utiliser partout dans helloworldScene.m
  32. //-----------------------------------------------------------------------------
  33. // Tags besoin pour collision
  34. enum  {
  35.     kTagPerso,
  36.     kTagGateau,
  37.     kTagRougeL,
  38.     kTagSac,
  39.     kTagChaussure,
  40.     kTagParfum,
  41.     kTagSoucoupe,
  42.     //
  43.     kbothSacAction,
  44.     kbothChaussureAction,
  45.     kbothRougeLAction,
  46.     kbothGateauAction,
  47.     kbothParfumAction
  48. };
  49.  
  50. //On déclare les CCSprites
  51. CCSprite *fond;
  52. CCSprite *fond2;
  53. CCSprite *perso;
  54. CCSprite *gateau;
  55. CCSprite *sac;
  56. CCSprite *chaussure;
  57. CCSprite *parfum;
  58. CCSprite *rougeLevres;
  59. CCSprite *soucoupe;
  60.  
  61. //menu reprendre, bouton pause
  62. CCMenu *pauseMenu;
  63. CCMenuItem *pauseBtn;
  64.  
  65. //On déclare la gravité
  66. CGPoint gravite;
  67.  
  68. //On crée le (int)score et (NSString) score et (font)score
  69. int score;
  70. NSString *scoreString;
  71. CCBitmapFontAtlas *scoreFont;
  72.  
  73. // Texte d'animation (3,2,1 Go) du début
  74. CCBitmapFontAtlas *texteMotiv;
  75.  
  76. //On crée une variable qui contient les données de la taille de la vue
  77. CGSize size;
  78.  
  79. //On crée les booléens
  80. BOOL fondAutoriz; // Si les fonds peuvent bouger
  81. BOOL accelAutoriz; // Si l'accéléromètre peut être utilisé
  82. BOOL targetsAutoriz; // Si les targets(gateaux, etc)peuvent être crées
  83. BOOL scoreAutoriz; // Si le score peut être augmenté
  84. BOOL blockSuprMenuBtn; // Pour qu'on supprime une seule fois le bouton Pause
  85. BOOL appuiBoutonPause; // Pour pas qu'on appuie sur le BtnPause lors du Menu
  86. BOOL peutPauser; // Pour pas pauser avant la fin du 1,2,3 GO !
  87.  
  88. // Autorisations de collision
  89. BOOL soucoupeAutoriz;
  90.  
  91. // AutorizCollide
  92. BOOL peutCollideAnim;
  93.  
  94. //On crée le int qui fera décaler les fonds
  95. int decalFonds = 4;
  96.  
  97. //On crée le int qui limitera les pauses
  98. int nombrePauses;
  99.  
  100. //Floats utilisés par les actions communes (effets)
  101. float durationFading = 0.2; // temps pour le fondu
  102. float durationScaling = 1.0; // en combien de temps l'objet changera de taille
  103. float scalingMod = 1.5; // par combien sera multiplié la taille de l'objet
  104.  
  105. // int decal soucoupe X
  106. int decalSoucX = 3;
  107.  
  108. // int decal soucoupe Y
  109. int decalSoucY = 3;
  110.  
  111. //Init des actions utilisées à la collision
  112. id actionFading;
  113. id actionScaling;
  114. id bothActions;
  115. id actionMoveDone;
  116.  
  117. //-----------------------------------------------------------------------------
  118.  
  119. @implementation GamePlay
  120.  
  121.  
  122. +(id) scene
  123. {
  124.     // 'scene' is an autorelease object.
  125.     CCScene *scene = [CCScene node];
  126.    
  127.     // 'layer' is an autorelease object.
  128.     GamePlay *layer = [GamePlay node];
  129.    
  130.     // add layer as a child to scene
  131.     [scene addChild: layer];
  132.    
  133.     // return the scene
  134.     return scene;
  135. }
  136.  
  137. // on "init" you need to initialize your instance
  138. -(id) init
  139. {
  140.     if( (self=[super init] )) {
  141.        
  142.         //Activer les paramètres de l'accéléromètre
  143.         [UIAccelerometer sharedAccelerometer].updateInterval = 0.01;
  144.         [UIAccelerometer sharedAccelerometer].delegate = self;
  145.        
  146.         // On initialise le score
  147.         score = 0;
  148.         scoreString = [NSString stringWithFormat:@"%d", score];
  149.        
  150.         // Dans la variable size mettre la valeur de taille de la vue
  151.         size = [[CCDirector sharedDirector] winSize];
  152.        
  153.         // On definit la gravité à nulle
  154.         gravite = CGPointMake(0,0);
  155.        
  156.         // On initialise le nombre de pauses à 0
  157.         nombrePauses = 0;
  158.        
  159.         //On init les booléens
  160.         fondAutoriz = NO; // Si les fonds peuvent bouger
  161.         accelAutoriz = NO; // Si l'accéléromètre peut être utilisé
  162.         targetsAutoriz = NO; // Si les targets(gateaux, etc)peuvent être crées
  163.         scoreAutoriz = NO; // Si le score peut être augmenté
  164.         peutPauser = NO; // Pour pas qu'on puisse pauser avant la fin du 1,2,3 GO !
  165.         blockSuprMenuBtn = YES; // Pour qu'on supprime une seule fois le bouton Pause
  166.         appuiBoutonPause = YES; // Pour pas qu'on appuie sur le BtnPause lors du Menu
  167.        
  168.         // Autorisations de collision
  169.         soucoupeAutoriz = YES;
  170.         peutCollideAnim = YES;
  171.        
  172.         if (peutCollideAnim) {
  173.         NSLog(@"peutCollideAnim = true");
  174.         }
  175.         if (peutCollideAnim == NO) {
  176.         NSLog(@"peutCollideAnim = false");
  177.         }
  178.        
  179.         //On définit l'image utilisée par nos différents CCSprites
  180.         perso = [CCSprite spriteWithFile:@"Perso.png"];
  181.         fond = [CCSprite spriteWithFile:@"fond-jeu.jpg"];
  182.         fond2 = [CCSprite spriteWithFile:@"fond-jeu.jpg"];
  183.        
  184.         //On positionne nos CCSprites
  185.         perso.position = ccp(size.width/2, 530);
  186.         fond.position = ccp (size.width/2, 960);
  187.         fond2.position = ccp(size.width/2, 0);
  188.        
  189.         //On ajoute nos CCSprites à la scène
  190.         [self addChild:fond];
  191.         [self addChild:fond2];
  192.         [self addChild:perso z:0 tag:kTagPerso];
  193.        
  194.         //On crée le bouton pause
  195.         pauseBtn = [CCMenuItemImage itemFromNormalImage:@"pauseBtn.png" selectedImage:@"pauseBtn.png" target:self selector:@selector(pauseGame:)];
  196.         [pauseBtn setAnchorPoint:ccp(1,1)];
  197.         pauseBtn.position = ccp(315, 475);
  198.         pauseMenu = [CCMenu menuWithItems:pauseBtn, nil];
  199.         pauseMenu.position = CGPointZero;
  200.         [self addChild:pauseMenu];
  201.        
  202.         //On initialise le texte score
  203.         scoreFont = [CCBitmapFontAtlas bitmapFontAtlasWithString:scoreString fntFile:@"Police.fnt"];
  204.         scoreFont.position = ccp(scoreFont.contentSize.width/2, size.height-scoreFont.contentSize.height/2+10);
  205.         [scoreFont setAnchorPoint:ccp(0,1)];
  206.         [self addChild:scoreFont];
  207.        
  208.         //Init des actions utilisées à la collision
  209.         actionFading = [CCFadeOut actionWithDuration:durationFading];
  210.         actionScaling = [CCScaleBy actionWithDuration:durationScaling scale:scalingMod];
  211.         bothActions = [[CCSpawn actions:actionFading, actionScaling, nil] retain];
  212.         actionMoveDone = [[CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)] retain];
  213.                        
  214.         //On dit au personnage de se déplacer au début du jeu pour faire +cool que 1sec après pour que
  215.         //la transition ait le temps de se faire
  216.         [self runAction:[CCSequence actions:
  217.                          [CCDelayTime actionWithDuration:1],
  218.                          [CCCallFunc actionWithTarget:self selector:@selector(initPerso)],
  219.                          nil]];
  220.        
  221.         // On crée l'animation
  222.         texteMotiv = [CCBitmapFontAtlas bitmapFontAtlasWithString:@"3" fntFile:@"Police.fnt"];
  223.         texteMotiv.position = ccp(size.width/2, size.height/2);
  224.         [self addChild:texteMotiv];
  225.        
  226.         [self runAction:[CCSequence actions:
  227.                          [CCDelayTime actionWithDuration:2],
  228.                          [CCCallFunc actionWithTarget:self selector:@selector(texteMotivAnim)], nil]];
  229.        
  230.         // schedule a repeating callback on every frame
  231.         [self schedule:@selector(nextFrame:)];
  232.         // On actualise le texte on every frame
  233.         [self schedule:@selector(actualizeText:)];
  234.         // Toutes les secondes on ajoute un objet à bouffer
  235.         [self schedule:@selector(ajoutElements:) interval:1.0];
  236.         // Toutes les 5.5 sec on ajoute une soucoupe
  237.         [self schedule:@selector(ajoutSoucoupe:) interval:5.5];
  238.         // Toutes les secondes on vérifie si on peut appuyer sur le bouton pause ou non
  239.         [self schedule:@selector(verifyPauseMenu:) interval:1.0];
  240.        
  241.     }
  242.     return self;
  243. }
  244.  
  245. // On lance le 2
  246. -(void)texteMotivAnim {
  247.     [texteMotiv setString:@"2"];
  248.     [self runAction:[CCSequence actions:
  249.                      [CCDelayTime actionWithDuration:1],
  250.                      [CCCallFunc actionWithTarget:self selector:@selector(texteMotivAnim2)],
  251.                      nil]];
  252. }
  253.  
  254. // On lance le 1
  255. -(void)texteMotivAnim2 {
  256.     [texteMotiv setString:@"1"];
  257.     [self runAction:[CCSequence actions:
  258.                      [CCDelayTime actionWithDuration:1],
  259.                      [CCCallFunc actionWithTarget:self selector:@selector(texteMotivAnim3)],
  260.                      nil]];
  261.     [texteMotiv runAction:[CCSequence actions:[CCDelayTime actionWithDuration:1],[CCFadeOut actionWithDuration:0], nil]];
  262. }
  263.  
  264. // On lance le Go !
  265. -(void)texteMotivAnim3 {
  266.     [texteMotiv setString:@"Go"];
  267.     id fadeActionIn = [CCFadeIn actionWithDuration:0.5];
  268.     id fadeActionOut = [CCFadeOut actionWithDuration:0.3];
  269.     id scaleAction = [CCScaleBy actionWithDuration:0.5 scale:1.8f];
  270.    
  271.     id scaleAndFadeIn = [CCSpawn actions:fadeActionIn, scaleAction, nil];
  272.     id scaleAndFadeOut = [CCSpawn actions:fadeActionOut, scaleAction, nil];
  273.    
  274.     [texteMotiv runAction:[CCSequence actions:scaleAndFadeIn, scaleAndFadeOut,[CCCallFuncN actionWithTarget:self selector:@selector(AutorizationPause:)], nil]];
  275.    
  276. }
  277.  
  278. // on initialise le perso
  279. -(void)initPerso {
  280.    
  281.     [perso runAction: [CCMoveTo actionWithDuration:0.5 position:ccp(size.width/2, 300)]];
  282.     fondAutoriz = YES;  //On autorise la mouvence des fonds
  283.     //Puis on attend deux secondes avant d'autoriser l'utilisation de l'accéléromètre
  284.     [self runAction:[CCSequence actions:
  285.                      [CCDelayTime actionWithDuration:3],
  286.                      [CCCallFunc actionWithTarget:self selector:@selector(Autorizations)],
  287.                      nil]];
  288. }
  289.  
  290. // on autorise l'accelerometre, score, ajoutelments
  291. -(void)Autorizations {
  292.     accelAutoriz = YES; //Lorsque la méthode Autorizations est appelée on autorise l'utilisation de l'accéléromètre
  293.     targetsAutoriz = YES; //Lorsque la méthode Autorizations est appelée on autorise la creation d'éléments
  294.     scoreAutoriz = YES; // On autorise l'augmentation de scores
  295. }
  296.  
  297. -(void)AutorizationPause:(id)sender {
  298.     peutPauser = YES;
  299. }
  300.  
  301. // on prépare l'ajout d'éléments
  302. -(void)addTarget {
  303.    
  304.     // Definition des images utilisees
  305.     gateau = [CCSprite spriteWithFile:@"Gateau.png"];
  306.     sac = [CCSprite spriteWithFile:@"Sac.png"];
  307.     chaussure = [CCSprite spriteWithFile:@"Chaussure.png"];
  308.     parfum = [CCSprite spriteWithFile:@"Parfum.png"];
  309.     rougeLevres = [CCSprite spriteWithFile:@"Rouge-Levres.png"];
  310.    
  311.     int nombreMinPourcentage = 1;
  312.     int nombreMaxPourcentage = 100;
  313.     int range = nombreMaxPourcentage - nombreMinPourcentage;
  314.     int nombreAleatoire = (arc4random() % range) + nombreMinPourcentage;
  315.    
  316.     // SAC
  317.     if (nombreAleatoire >= 2 && nombreAleatoire <= 51) {
  318.        
  319.         // On détermine où on va être afficher l'élément sur l'axe X
  320.         int minX = 0+sac.contentSize.width/2;
  321.         int maxX = 320-sac.contentSize.width/2;
  322.         int rangeX = maxX - minX;
  323.         int actualX = (arc4random() % rangeX) + minX;
  324.        
  325.         // On positionne l'élément sur l'axe X calculé ci-dessus et en dessous de la limite infer. de l'écran
  326.         sac.position = ccp(actualX, size.height-480-sac.contentSize.height/2);
  327.         [self addChild:sac z:0 tag:kTagSac]; // On ajoute l'élément à la vue
  328.        
  329.         // On détermine la vitesse de l'élément
  330.         int minDuration = 2.0;
  331.         int maxDuration = 3.0;
  332.         int rangeDuration = maxDuration - minDuration;
  333.         int actualDuration = (arc4random() % rangeDuration) + minDuration;
  334.        
  335.         // Cree les actions liées à l'élément
  336.         id actionMove = [CCMoveTo actionWithDuration:actualDuration
  337.                                             position:ccp(actualX, size.height+25)];
  338.         id actionMoveDone = [CCCallFuncN actionWithTarget:self
  339.                                                  selector:@selector(spriteMoveFinished:)];
  340.         [sac runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
  341.        
  342.     }
  343.    
  344.     // GATEAU
  345.     if (nombreAleatoire >= 52 && nombreAleatoire <= 77) {
  346.        
  347.         // On détermine où on va être afficher l'élément sur l'axe X
  348.         int minX = 0+gateau.contentSize.width/2;
  349.         int maxX = 320-gateau.contentSize.width/2;
  350.         int rangeX = maxX - minX;
  351.         int actualX = (arc4random() % rangeX) + minX;
  352.        
  353.         // On positionne l'élément sur l'axe X calculé ci-dessus et en dessous de la limite infer. de l'écran
  354.         gateau.position = ccp(actualX, size.height-480-gateau.contentSize.height/2);
  355.         [self addChild:gateau z:0 tag:kTagGateau]; // On ajoute l'élément à la vue
  356.        
  357.         // On détermine la vitesse de l'élément
  358.         int minDuration = 2.0;
  359.         int maxDuration = 3.0;
  360.         int rangeDuration = maxDuration - minDuration;
  361.         int actualDuration = (arc4random() % rangeDuration) + minDuration;
  362.        
  363.         // Cree les actions liées à l'élément
  364.         id actionMove = [CCMoveTo actionWithDuration:actualDuration
  365.                                             position:ccp(actualX, size.height+25)];
  366.         id actionMoveDone = [CCCallFuncN actionWithTarget:self
  367.                                                  selector:@selector(spriteMoveFinished:)];
  368.         [gateau runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
  369.        
  370.     }
  371.    
  372.     // PARFUM
  373.     if (nombreAleatoire == 1) {
  374.        
  375.         // On détermine où on va être afficher l'élément sur l'axe X
  376.         int minX = 0+parfum.contentSize.width/2;
  377.         int maxX = 320-parfum.contentSize.width/2;
  378.         int rangeX = maxX - minX;
  379.         int actualX = (arc4random() % rangeX) + minX;
  380.        
  381.         // On positionne l'élément sur l'axe X calculé ci-dessus et en dessous de la limite infer. de l'écran
  382.         parfum.position = ccp(actualX, size.height-480-parfum.contentSize.height/2);
  383.         [self addChild:parfum z:0 tag:kTagParfum]; // On ajoute l'élément à la vue
  384.        
  385.         // On détermine la vitesse de l'élément
  386.         int minDuration = 2.0;
  387.         int maxDuration = 3.0;
  388.         int rangeDuration = maxDuration - minDuration;
  389.         int actualDuration = (arc4random() % rangeDuration) + minDuration;
  390.        
  391.         // Cree les actions liées à l'élément
  392.         id actionMove = [CCMoveTo actionWithDuration:actualDuration
  393.                                             position:ccp(actualX, size.height+25)];
  394.         id actionMoveDone = [CCCallFuncN actionWithTarget:self
  395.                                                  selector:@selector(spriteMoveFinished:)];
  396.         [parfum runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
  397.        
  398.     }
  399.    
  400.     // ROUGE À LÈVRES
  401.     if (nombreAleatoire >= 78 && nombreAleatoire <= 83) {  
  402.        
  403.         // On détermine où on va être afficher l'élément sur l'axe X
  404.         int minX = 0+rougeLevres.contentSize.width/2;
  405.         int maxX = 320-rougeLevres.contentSize.width/2;
  406.         int rangeX = maxX - minX;
  407.         int actualX = (arc4random() % rangeX) + minX;
  408.        
  409.         // On positionne l'élément sur l'axe X calculé ci-dessus et en dessous de la limite infer. de l'écran
  410.         rougeLevres.position = ccp(actualX, size.height-480-rougeLevres.contentSize.height/2);
  411.         [self addChild:rougeLevres z:0 tag:kTagRougeL]; // On ajoute l'élément à la vue
  412.        
  413.         // On détermine la vitesse de l'élément
  414.         int minDuration = 2.0;
  415.         int maxDuration = 3.0;
  416.         int rangeDuration = maxDuration - minDuration;
  417.         int actualDuration = (arc4random() % rangeDuration) + minDuration;
  418.        
  419.         // Cree les actions liées à l'élément
  420.         id actionMove = [CCMoveTo actionWithDuration:actualDuration
  421.                                             position:ccp(actualX, size.height+25)];
  422.         id actionMoveDone = [CCCallFuncN actionWithTarget:self
  423.                                                  selector:@selector(spriteMoveFinished:)];
  424.         [rougeLevres runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
  425.        
  426.     }
  427.    
  428.     // CHAUSSURE
  429.     if (nombreAleatoire >= 84 && nombreAleatoire <= 100) {  
  430.         // On détermine où on va être afficher l'élément sur l'axe X
  431.         int minX = 0+chaussure.contentSize.width/2;
  432.         int maxX = 320-chaussure.contentSize.width/2;
  433.         int rangeX = maxX - minX;
  434.         int actualX = (arc4random() % rangeX) + minX;
  435.        
  436.         // On positionne l'élément sur l'axe X calculé ci-dessus et en dessous de la limite infer. de l'écran
  437.         chaussure.position = ccp(actualX, size.height-480-chaussure.contentSize.height/2);
  438.         [self addChild:chaussure z:0 tag:kTagChaussure]; // On ajoute l'élément à la vue
  439.        
  440.         // On détermine la vitesse de l'élément
  441.         int minDuration = 2.0;
  442.         int maxDuration = 3.0;
  443.         int rangeDuration = maxDuration - minDuration;
  444.         int actualDuration = (arc4random() % rangeDuration) + minDuration;
  445.        
  446.         // Cree les actions liées à l'élément
  447.         id actionMove = [CCMoveTo actionWithDuration:actualDuration
  448.                                             position:ccp(actualX, size.height+25)];
  449.         id actionMoveDone = [CCCallFuncN actionWithTarget:self
  450.                                                  selector:@selector(spriteMoveFinished:)];
  451.         [chaussure runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
  452.     }
  453.    
  454. }
  455.  
  456. // +5.5sec ajout de soucoupe
  457. -(void)ajoutSoucoupe:(ccTime)dt {
  458.     id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
  459.     [soucoupe runAction:actionMoveDone];
  460.     soucoupe = [CCSprite spriteWithFile:@"Soucoupe.png"];
  461.     soucoupe.position = ccp(size.width/2, 0-soucoupe.contentSize.height/2);
  462.     [self addChild:soucoupe z:0 tag:kTagSoucoupe];
  463. }
  464.  
  465. // on supprime l'élément quand l'anim est finnie
  466. -(void)spriteMoveFinished:(id)sender {
  467.     CCSprite *sprite = (CCSprite *)sender;
  468.     [self removeChild:sprite cleanup:YES];
  469. }
  470.  
  471. // on ajoute les elements toutes les secondes
  472. -(void)ajoutElements:(ccTime)dt {
  473.     if (targetsAutoriz)
  474.         [self addTarget];
  475. }
  476.  
  477. // gestion des collisions, scores, déplacements fonds/soucoupe
  478. -(void) nextFrame:(ccTime)dt{
  479.    
  480.     // on informe
  481.     if (peutCollideAnim) {
  482.         NSLog(@"peutCollideAnim = true");
  483.     }
  484.     if (!peutCollideAnim) {
  485.         NSLog(@"peutCollideAnim = false");
  486.     }
  487.            
  488.     // On déplace le perso en fonction de l'accel
  489.     //--------------------------------------
  490.     if (accelAutoriz) {  // Si l'utilisation de l'accéléromètre est autorisée
  491.         //Alors on affecte la position .x du perso par la gravitée = acceleromètre
  492.         perso.position = ccp(perso.position.x + gravite.x, perso.position.y);
  493.     }
  494.    
  495.     // On gère les fonds
  496.     //-----------------
  497.     if (fondAutoriz) {  //Si le décalage des fonds est autorisé
  498.         //Alors on décale les fonds de 5 pixels par tick
  499.         fond2.position = ccp(fond2.position.x, fond2.position.y + decalFonds);
  500.         fond.position = ccp(fond.position.x, fond.position.y + decalFonds);
  501.     }
  502.    
  503.     if (fond2.position.y >= 480 && fond.position.y >= 1440) { // Si le fond 2 dépasse par le haut de l'écran
  504.         fond.position = ccp(fond.position.x, -480); //Alors on repositionne le fond1 en dessous du fond2
  505.     }
  506.    
  507.     if (fond.position.y >= 480 && fond2.position.y >= 1440) { // Si le fond1 dépasse par le haut de l'écran
  508.         fond2.position = ccp(fond.position.x, -480); //Alors on repositionne le fond2 en dessous du fond1
  509.     }
  510.    
  511.     // On gère le dépassement de l'écran du perso
  512.     // -----------------------------------------
  513.     //Si le perso dépasse de l'écran en .x par la droite
  514.     if (perso.position.x > size.width+perso.contentSize.width/2) {
  515.         //alors on fait revenir le perso par la gauche, puisque 0 en .x est l'extrémité gauche de l'écran
  516.         perso.position = CGPointMake(0-perso.contentSize.width/2, perso.position.y);
  517.     }
  518.    
  519.     // Si le perso dépasse de l'écran en .x par la gauche
  520.     if (perso.position.x < 0-perso.contentSize.width/2) {
  521.         //Alors on fait revenir le perso par la droite de l'écran puisque size.width = 320
  522.         // ce qui est l'extrémité droite de l'écran
  523.         perso.position = CGPointMake(size.width+perso.contentSize.width/2, perso.position.y);
  524.     }
  525.    
  526.     // On déplace la soucoupe
  527.     soucoupe.position = ccp(soucoupe.position.x + decalSoucX , soucoupe.position.y + decalSoucY);
  528.    
  529.     if (soucoupe.position.x >= 320-soucoupe.contentSize.width/2 || soucoupe.position.x <= 0+soucoupe.contentSize.width/2) {
  530.         decalSoucX = -decalSoucX;
  531.     }
  532.    
  533.     // On crée des nodes : besoin pour collision
  534.     CCNode *perso = [self getChildByTag:kTagPerso];  //lié au CCSprite perso
  535.     CCNode *gateau = [self getChildByTag:kTagGateau]; //lié au CCSprite gateau
  536.     CCNode *sac = [self getChildByTag:kTagSac]; //lié au CCSprite sac
  537.     CCNode *chaussure = [self getChildByTag:kTagChaussure]; //lié au CCSprite chaussure
  538.     CCNode *parfum = [self getChildByTag:kTagParfum]; //lié au CCSprite parfum
  539.     CCNode *rougeLevres = [self getChildByTag:kTagRougeL]; //lié au CCSprite rougeLevres
  540.     CCNode *soucoupe = [self getChildByTag:kTagSoucoupe]; //lié au CCSprite soucoupe
  541.    
  542.     // SOUCOUPE PERSO
  543.     if (CGRectIntersectsRect([perso boundingBox], [soucoupe boundingBox])) {
  544.         if (soucoupeAutoriz) {
  545.             NSLog(@"soucoupe/perso");
  546.             // Envoi du score OpenFeint
  547.             [OFHighScoreService setHighScore:score forLeaderboard:@"469004" onSuccess:OFDelegate() onFailure:OFDelegate()];
  548.             // On va à la scene GameOver
  549.             [[CCDirector sharedDirector] pushScene:[CCFadeBLTransition transitionWithDuration:1 scene:[GameOver node]]];
  550.             // Unlock le succès EXPERIENCER
  551.             [OFAchievementService unlockAchievement:EXPERIENCER__];
  552.            
  553.         }
  554.         soucoupeAutoriz = NO;
  555.     }
  556.    
  557.     // GATEAU PERSO
  558.     if (CGRectIntersectsRect([perso boundingBox], [gateau boundingBox])) {
  559.         if (peutCollideAnim==YES) {
  560.         NSLog(@"gateau/perso");
  561.         // reset the flag so the user can't launch the animation anymore
  562.         peutCollideAnim = NO;
  563.         // Incrémente le score
  564.         score = score+5;
  565.         // Unlock le succès COOK EATER
  566.         [OFAchievementService unlockAchievement:ONE_MORE_KILO__];
  567.         // Lance le fondu
  568.         [gateau runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  569.         }
  570.     }
  571.    
  572.     // PARFUM PERSO
  573.     if (CGRectIntersectsRect([perso boundingBox], [parfum boundingBox])) {
  574.         if (peutCollideAnim==YES) {
  575.         NSLog(@"parfum/perso");
  576.         // reset the flag so the user can't launch the animation anymore
  577.         peutCollideAnim = NO;
  578.         // Incrémente le score
  579.         score = score+40;
  580.         // Unlock le succès SMELLS GOOD
  581.         [OFAchievementService unlockAchievement:SMELLS_GOOD__];
  582.         // Lance le fondu
  583.         [parfum runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  584.     }
  585. }
  586.  
  587.     // CHAUSSURE PERSO
  588.     if (CGRectIntersectsRect([perso boundingBox], [chaussure boundingBox])) {
  589.         if (peutCollideAnim==YES) {
  590.         NSLog(@"chaussure/perso");
  591.         // reset the flag so the user can't launch the animation anymore
  592.         peutCollideAnim = NO;
  593.         // Incrémente le score
  594.         score = score+7.5;
  595.         // Unlock le succès CRAZY SHOES
  596.         [OFAchievementService unlockAchievement:CRAZY_SHOES__];
  597.         // Lance le fondu
  598.         [chaussure runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  599.     }
  600. }
  601.    
  602.     // SAC PERSO
  603.     if (CGRectIntersectsRect([perso boundingBox], [sac boundingBox])) {
  604.         if (peutCollideAnim==YES) {
  605.         NSLog(@"sac/perso");
  606.         // reset the flag so the user can't launch the animation anymore
  607.         peutCollideAnim = NO;
  608.         // Incrémente le score
  609.         score = score+1.8;
  610.         // Unlock le succès LOUIS VUITTON
  611.         [OFAchievementService unlockAchievement:BRAND_BAG__];
  612.         // Lance le fondu
  613.         [sac runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  614.         }
  615.     }
  616.    
  617.     // ROUGE À LÈVRES PERSO
  618.     if (CGRectIntersectsRect([perso boundingBox], [rougeLevres boundingBox])) {
  619.         if (peutCollideAnim==YES) {
  620.         NSLog(@"rougeAL/perso");
  621.         // reset the flag so the user can't launch the animation anymore
  622.         peutCollideAnim = NO;
  623.         // Incrémente le score
  624.         score = score+10;
  625.         // Unlock le succès HOT LIPS
  626.         [OFAchievementService unlockAchievement:HOT_LIPS__];
  627.         // Lance le fondu
  628.         [rougeLevres runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  629.         }
  630.     }
  631.    
  632.     // SOUCOUPE GATEAU
  633.     if (CGRectIntersectsRect([soucoupe boundingBox], [gateau boundingBox])) {
  634.         if (peutCollideAnim==YES) {
  635.         NSLog(@"gateau/soucoupe");
  636.         // reset the flag so the user can't launch the animation anymore
  637.         peutCollideAnim = NO;
  638.         // Lance le fondu
  639.         [gateau runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  640.         }
  641.     }
  642.    
  643.     // SOUCOUPE SAC
  644.     if (CGRectIntersectsRect([soucoupe boundingBox], [sac boundingBox])) {
  645.         if (peutCollideAnim==YES) {
  646.         NSLog(@"sac/soucoupe");
  647.         // reset the flag so the user can't launch the animation anymore
  648.         peutCollideAnim = NO;
  649.         // Lance le fondu
  650.         [sac runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  651.         }
  652.     }
  653.    
  654.     // SOUCOUPE CHAUSSURE
  655.     if (CGRectIntersectsRect([soucoupe boundingBox], [chaussure boundingBox])) {
  656.         if (peutCollideAnim==YES) {
  657.         NSLog(@"chaussure/soucoupe");
  658.         // reset the flag so the user can't launch the animation anymore
  659.         peutCollideAnim = NO;
  660.         // Lance le fondu
  661.         [chaussure runAction:[CCSequence actions:bothActions, actionMoveDone,peutCollideAnim=YES, nil]];
  662.         }
  663.     }
  664.    
  665.     // SOUCOUPE PARFUM
  666.     if (CGRectIntersectsRect([soucoupe boundingBox], [parfum boundingBox])) {
  667.         if (peutCollideAnim==YES) {
  668.         NSLog(@"parfum/soucoupe");
  669.         // reset the flag so the user can't launch the animation anymore
  670.         peutCollideAnim = NO;
  671.         // Lance le fondu
  672.         [parfum runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  673.         }
  674.     }
  675.    
  676.     // SOUCOUPE ROUGE À LÈVRES
  677.     if (CGRectIntersectsRect([soucoupe boundingBox], [rougeLevres boundingBox])) {
  678.         if (peutCollideAnim==YES) {
  679.         NSLog(@"RAL/soucoupe");
  680.         // reset the flag so the user can't launch the animation anymore
  681.         peutCollideAnim = NO;
  682.         // Lance le fondu
  683.         [rougeLevres runAction:[CCSequence actions:bothActions, actionMoveDone, peutCollideAnim=YES, nil]];
  684.         }
  685.     }
  686. }
  687.  
  688. // On actualise le score
  689. -(void) actualizeText:(ccTime)dt{
  690.     if (scoreAutoriz) {
  691.         scoreString = [NSString stringWithFormat:@"%d", score];
  692.         [scoreFont setString:scoreString];
  693.     }
  694. }  
  695.  
  696. // acceleromètre influe sur gravite
  697. -(void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration {
  698.     gravite.x = acceleration.x * kGraviteMultiplieur; //La gravité en .x (abscisses) est affectée par l'accéléromètre
  699. }
  700.  
  701. // on met le jeu en pause
  702. -(void)pauseGame:(id)sender {
  703.    
  704.     // si on est pas dans le 1,2,3 GO !
  705.     if (peutPauser) {
  706.     // si le menu n'est pas déjà présent on peut pas cliquer sur le menu
  707.     if (appuiBoutonPause == YES) {
  708.         nombrePauses++; // on incrémente le nombre de pause (limite à 3)
  709.        
  710.         if (nombrePauses <= 3) {
  711.             //on met le jeu en pause
  712.             [[CCDirector sharedDirector] pause];
  713.            
  714.             texteMotiv.visible = false;
  715.            
  716.             //On crée le menu pause
  717.             CCMenuItem *replayBtn = [CCMenuItemImage itemFromNormalImage:@"replayBtn.png" selectedImage:@"replayBtn.png" target:self selector:@selector(replayGame:)];
  718.             CCMenuItem *menuBtn = [CCMenuItemImage itemFromNormalImage:@"btnMenu.png" selectedImage:@"btnMenu.png" target:self selector:@selector(backToMenu:)];
  719.             replayBtn.position = ccp(size.width/2, size.height/2);
  720.             menuBtn.position = ccp(320-menuBtn.contentSize.width/2-10, 0+menuBtn.contentSize.height/2+10);
  721.             pauseMenu = [CCMenu menuWithItems:replayBtn, menuBtn, nil];
  722.             pauseMenu.position = CGPointZero;
  723.             [self addChild:pauseMenu];
  724.            
  725.             appuiBoutonPause = NO;
  726.             }
  727.         }
  728.        
  729.     }
  730.    
  731. }
  732.  
  733. -(void)verifyPauseMenu:(ccTime)dt {
  734.     if (nombrePauses >= 3) {
  735.         if (blockSuprMenuBtn) {
  736.             //effet de sortie fondante alpha
  737.             id actionFadeOut = [CCFadeOut actionWithDuration:0.5];
  738.             id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
  739.             [pauseBtn runAction:[CCSequence actions:actionFadeOut, actionMoveDone, nil]];
  740.             blockSuprMenuBtn = NO;
  741.         }
  742.     }
  743. }
  744.  
  745. -(void)backToMenu:(id)sender {
  746.     NSLog(@"btn menu");
  747.     [[CCDirector sharedDirector] resume];
  748.     //sauvegarder score openFeint
  749.     [OFHighScoreService setHighScore:score forLeaderboard:@"469004" onSuccess:OFDelegate() onFailure:OFDelegate()];
  750.     //effet de sortie fondante alpha
  751.     id actionFadeOut = [CCFadeOut actionWithDuration:0.5];
  752.     id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
  753.     [pauseMenu runAction:[CCSequence actions:actionFadeOut, actionMoveDone, nil]];
  754.    
  755.     [[CCDirector sharedDirector] pushScene:[CCSplitRowsTransition transitionWithDuration:1 scene:[HelloWorld node]]];
  756. }
  757.  
  758. // on reprend le jeu
  759. -(void)replayGame:(id)sender {
  760.     [[CCDirector sharedDirector] resume];
  761.     texteMotiv.visible = true;
  762.     //effet de sortie fondante alpha
  763.     id actionFadeOut = [CCFadeOut actionWithDuration:0.5];
  764.     id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
  765.     [pauseMenu runAction:[CCSequence actions:actionFadeOut, actionMoveDone, nil]];
  766.     appuiBoutonPause = YES; // Pour qu'on puisse ré-appuyer sur le bouton pause
  767.    
  768. }
  769.  
  770. // On libère la mémoire
  771. -(void)dealloc {
  772.     [super dealloc];
  773.     fond = NULL;
  774.     [fond release];
  775.     fond2 = NULL;
  776.     [fond2 release];
  777.     perso = NULL;
  778.     [perso release];
  779.     soucoupe = NULL;
  780.     [soucoupe release];
  781.     gateau = NULL;
  782.     [gateau release];
  783.     sac = NULL;
  784.     [sac release];
  785.     chaussure = NULL;
  786.     [chaussure release];
  787.     rougeLevres = NULL;
  788.     [rougeLevres release];
  789.     parfum = NULL;
  790.     [parfum release];
  791.    
  792.     //actions
  793.     [bothActions release];
  794.     [actionMoveDone release];
  795. }
  796.  
  797.  
  798. @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement