Browse Source

Tranformando o contador de bolas em uma variavel de classe, nao de sistema

capellaresumo 7 years ago
parent
commit
c55b4f8449

+ 1 - 0
.gitignore

@@ -20,5 +20,6 @@ tests/*/proj.android-studio/app/proguard-project.txt
 /*/build/
 /proj.android-studio/app/build/
 bin/
+/linux-build/
 .DS_Store
 cocos2d/

+ 5 - 0
CMakeLists.txt

@@ -128,6 +128,8 @@ endif( WIN32 )
 set(GAME_SRC
   Classes/Ball.cpp
   Classes/AppDelegate.cpp
+  Classes/BlocksLayer.cpp
+  Classes/GameScene.cpp
   Classes/HelloWorldScene.cpp
   ${PLATFORM_SPECIFIC_SRC}
 )
@@ -135,7 +137,10 @@ set(GAME_SRC
 set(GAME_HEADERS
   Classes/Ball.h
   Classes/AppDelegate.h
+  Classes/BlocksLayer.h
+  Classes/GameScene.h
   Classes/HelloWorldScene.h
+  Classes/params.h
   ${PLATFORM_SPECIFIC_HEADERS}
 )
 

+ 92 - 20
Classes/GameScene.cpp

@@ -44,10 +44,14 @@ Scene* GameScene::createScene(int level) {
     
     layer->setLevel(level);
     
-    auto delay = DelayTime::create(10.0);
-    CallFunc *runCallback = CallFunc::create(CC_CALLBACK_0(GameScene::saveLevel, layer));
-    auto seq = Sequence::create(delay, runCallback, nullptr);
-    layer->runAction(seq);
+    auto delay_save_level = DelayTime::create(10.0);
+    CallFunc *runCallback_save_level = CallFunc::create(CC_CALLBACK_0(GameScene::saveLevel, layer));
+    auto seq_save_level = Sequence::create(delay_save_level, runCallback_save_level, nullptr);
+    auto delay_triple_balls = DelayTime::create(10.0);
+    CallFunc *runCallback_triple_balls = CallFunc::create(CC_CALLBACK_0(GameScene::tripleBalls, layer));
+    auto seq_triple_balls = Sequence::create(delay_triple_balls, runCallback_triple_balls, nullptr);
+    layer->runAction(seq_save_level);
+    layer->runAction(seq_triple_balls);
     
     return scene;
 }
@@ -83,6 +87,9 @@ bool GameScene::init() {
     ball->throwBall();
     this->addChild(ball, 21);
     
+    // Inicialmente tem 1 bola
+    ball_count = 1;
+    
     auto raquete = DrawNode::create();
     float py = RAQUETE_HEIGHT/2.0;
     float pxl = - RAQUETE_WIDTH/2;
@@ -139,6 +146,7 @@ bool GameScene::init() {
     contactListener->onContactBegin = CC_CALLBACK_1(GameScene::onContactBegin, this);
     _eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);
     
+    
     return true;
 }
 
@@ -171,7 +179,7 @@ bool GameScene::onContactBegin(PhysicsContact& contact) {
             ball_core(nodeA, nodeB);
         }  else if (nodeB->getTag() == SAVE_TAG && nodeA->getTag() == RACKET_TAG) {
             
-            CCLOG(">>> %d", this->level);
+            //CCLOG(">>> %d", this->level);
             
             Size visibleSize = Director::getInstance()->getVisibleSize();
             // Salva o nivel!
@@ -184,29 +192,42 @@ bool GameScene::onContactBegin(PhysicsContact& contact) {
             text->setPosition(visibleSize.width/2, visibleSize.height/2);
             this->addChild(text);
             text->runAction(FadeOut::create(3));
+            
+        } else if (nodeB->getTag() == THREE_BALLS_TAG && nodeA->getTag() == RACKET_TAG) {
+
+            Size visibleSize = Director::getInstance()->getVisibleSize();
+            // Salva na "database" o número de bolas na tela
+            auto text = Label::createWithTTF("Triple Balls!", "fonts/Marker Felt.ttf", 40);
+            text->setPosition(visibleSize.width/2, visibleSize.height/2 + 2);
+            this->addChild(text);
+            text->runAction(FadeOut::create(3));
+            
+            // cria as bolas e as adiciona no cenário
+            for (int i = ball_count; i < 3; i++, ball_count++) {
+                auto ball = Ball::create();
+                ball->setPosition(nodeB->getPositionX(), RAQUETE_ALTURA+BALL_SIZE);
+                ball->throwBall();
+                this->addChild(ball, 21);
+            }
+            nodeB->removeFromParentAndCleanup(true);
+            
         } else if (nodeB->getTag() == SAVE_TAG && nodeA->getTag() == BOTTOM_TAG) {
             nodeB->removeFromParentAndCleanup(true);
+        } else if (nodeB->getTag() == THREE_BALLS_TAG && nodeA->getTag() == BOTTOM_TAG) {
+            nodeB->removeFromParentAndCleanup(true);
+        } else if (nodeB->getTag() == SAVE_TAG && over) {
+            nodeB->removeFromParentAndCleanup(true);
+        } else if (nodeB->getTag() == THREE_BALLS_TAG && over) {
+            nodeB->removeFromParentAndCleanup(true);
         }
+
     }
     return true;
 }
 
 void GameScene::ball_collision (Node *ball) {
-    this->over = true;
-    auto visibleSize = Director::getInstance()->getVisibleSize();
-    auto text = Label::createWithTTF("Game Over...", "fonts/Marker Felt.ttf", 40);
-    text->setPosition(visibleSize.width/2, visibleSize.height/2);
-    this->addChild(text);
-    
-    UserDefault *userdata = UserDefault::getInstance();
-    level = userdata->getIntegerForKey("level", 0);
-    auto menu_item_start = MenuItemFont::create("Restart", CC_CALLBACK_1(GameScene::NextLevel, this));
-    menu_item_start->setPosition(text->getPosition());
-    menu_item_start->setPositionY(menu_item_start->getPositionY()-50);
-    auto *menu = Menu::create(menu_item_start, NULL);
-    menu->setPosition(Point(0, 0));
-    this->addChild(menu, 30);
-    
+    // Destrói a bola que tocou o fundo
+    ball_count--;
     auto audio = CocosDenshion::SimpleAudioEngine::getInstance();
     audio->playEffect("bomb.wav");
     ParticleSun* m_emitter = ParticleSun::create();
@@ -214,6 +235,23 @@ void GameScene::ball_collision (Node *ball) {
     m_emitter->setDuration(1);
     this->getScene()->addChild(m_emitter);
     ball->removeFromParentAndCleanup(true);
+    
+    if (ball_count == 0) {
+        this->over = true;
+        auto visibleSize = Director::getInstance()->getVisibleSize();
+        auto text = Label::createWithTTF("Game Over...", "fonts/Marker Felt.ttf", 40);
+        text->setPosition(visibleSize.width/2, visibleSize.height/2);
+        this->addChild(text);
+        
+        UserDefault *userdata = UserDefault::getInstance();
+        level = userdata->getIntegerForKey("level", 0);
+        auto menu_item_start = MenuItemFont::create("Restart", CC_CALLBACK_1(GameScene::NextLevel, this));
+        menu_item_start->setPosition(text->getPosition());
+        menu_item_start->setPositionY(menu_item_start->getPositionY()-50);
+        auto *menu = Menu::create(menu_item_start, NULL);
+        menu->setPosition(Point(0, 0));
+        this->addChild(menu, 30);
+    }
 }
 
 void GameScene::ball_core (Node *core, Node *ball) {
@@ -254,6 +292,7 @@ void GameScene::setLevel(int level) {
     this->addChild(text);
 }
 
+// Power-up: salva o nível atual
 void GameScene::saveLevel() {
     if (rand_0_1() < DROP_LEVEL_SAVE && this->over == false){
         Size visibleSize = Director::getInstance()->getVisibleSize();
@@ -285,3 +324,36 @@ void GameScene::saveLevel() {
     this->runAction(seq);
     
 }
+
+// Power-up: triplica o número de bolas na tela 
+void GameScene::tripleBalls() {
+    if (rand_0_1() < DROP_TRIPLE_BALL && this->over == false){
+            Size visibleSize = Director::getInstance()->getVisibleSize();
+            auto ball_draw = DrawNode::create();
+            ball_draw->drawDot(Vec2(0, 0), BALL_SIZE/3.0, Color4F(COLOR_pink));
+        
+            auto material = PHYSICSBODY_MATERIAL_DEFAULT;
+            material.density = 0.0f;
+            material.restitution = 1.0f;
+            material.friction = 0.0f;
+        
+            auto physicsBody = PhysicsBody::createCircle(BALL_SIZE/3.0, material);
+            physicsBody->setGravityEnable(true);
+            physicsBody->setVelocity(Vec2(0,0));
+            physicsBody->setLinearDamping(0.0);
+            physicsBody->setMass(1.0f);
+            physicsBody->setContactTestBitmask(0xFFFFFFFF);
+            physicsBody->setGroup(-1);
+            ball_draw->addComponent(physicsBody);
+            ball_draw->setTag(THREE_BALLS_TAG);
+            
+            ball_draw->setPosition(visibleSize.width * rand_0_1(), visibleSize.height);
+            this->addChild(ball_draw);
+    }
+    
+    auto delay = DelayTime::create(rand_0_1()*50.0+3.0);
+    CallFunc *runCallback = CallFunc::create(CC_CALLBACK_0(GameScene::tripleBalls, this));
+    auto seq = Sequence::create(delay, runCallback, nullptr);
+    this->runAction(seq);
+}
+

+ 2 - 0
Classes/GameScene.h

@@ -24,7 +24,9 @@ class GameScene : public cocos2d::Layer {
         void NextLevel(cocos2d::Ref *pSender);
         int level;
         void saveLevel ();
+        void tripleBalls();
         bool over; // salva se o jogo acabou!
+        int ball_count;
 };
 
 

+ 0 - 25
Classes/HelloWorldScene.cpp

@@ -47,31 +47,6 @@ bool HelloWorld::init() {
     auto bg = cocos2d::LayerColor::create(COLOR_back);
     this->addChild(bg);
     
-
-    /////////////////////////////
-    // 2. add a menu item with "X" image, which is clicked to quit the program
-    //    you may modify it.
-
-    // add a "close" icon to exit the progress. it's an autorelease object
-    // auto closeItem = MenuItemImage::create(
-    //                                        "CloseNormal.png",
-    //                                        "CloseSelected.png",
-    //                                        CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
-    
-    // closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
-    //                             origin.y + closeItem->getContentSize().height/2));
-
-    // // create menu, it's an autorelease object
-    // auto menu = Menu::create(closeItem, NULL);
-    // menu->setPosition(Vec2::ZERO);
-    // this->addChild(menu, 1);
-
-    /////////////////////////////
-    // 3. add your codes below...
-
-    // add a label shows "Hello World"
-    // create and initialize a label
-    
     auto menu_item_start = MenuItemFont::create("Start", CC_CALLBACK_1(HelloWorld::Play, this));
 
     menu_item_start->setPosition(Point(visibleSize.width / 2, (visibleSize.height*0.25)));

+ 3 - 2
Classes/params.h

@@ -42,7 +42,8 @@
 #define THREE_BALLS_TAG 9
 #define SAVE_TAG 8
 
-// Probabilitys
-#define DROP_LEVEL_SAVE 0.1 // deixar em 0.1
+// Probabilities
+#define DROP_LEVEL_SAVE 1 // deixar em 0.1
+#define DROP_TRIPLE_BALL 1
 
 #endif /* params_h */

BIN
RedCore.apk


+ 1 - 1
build

@@ -9,4 +9,4 @@ fi
 
 ./cocos2d/tools/cocos2d-console/bin/cocos compile -p android --android-studio
 
-cp /Users/gabrielcapella/Desktop/RedCore/bin/debug/android/RedCore-debug.apk ./RedCore.apk
+cp /home/joao/463/bin/debug/android/RedCore-debug.apk ./RedCore.apk

BIN
proj.ios_mac/RedCore2.xcodeproj/project.xcworkspace/xcuserdata/capella.xcuserdatad/UserInterfaceState.xcuserstate