Cocos2d-x简单游戏<植物大战僵尸>代码实现|第三部分:通关场景<后续会提供源码下载链接>

这个植物大战僵尸的小游戏Demo 虽然下,但是基本包括了:

  1.植物的选取、僵尸的攻击、发射子弹;

  2.太阳的生成、碰撞检测等功能;

 

 

 第一部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第一部分:开始场景

 第二部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第二部分:菜单场景

 第三部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第三部分:通关场景

 第四部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第四部分:通关失败场景

 第五部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第五部分:公用类

 第六部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第六部分:植物类

 第七部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第七部分:僵尸类

 第八部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第八部分:子弹类

 第九部分<A>Cocos2d-x简单游戏<植物大战僵尸>代码实现|第九部分:游戏场景GameScene.h

 第九部分<B>Cocos2d-x简单游戏<植物大战僵尸>代码实现|第九部分:游戏场景GameScene.cpp



/**

 

 该类主要是游戏过关后要进入的界面

 

 */


#ifndef __MyTest__PassScene__

#define __MyTest__PassScene__


#include <iostream>

#include "CommonHeader.h"


class PassScene:publicCCLayer {

    

public:

    

    PassScene();

    ~PassScene();

   virtualbool init();

    CREATE_FUNC(PassScene);

    SCENE_FUNC(PassScene);

    

    /************************自定义方法*************************/

   void back();

   void next();

};



#endif /* defined(__MyTest__PassScene__) */





/**

 

 该类主要是游戏过关后要进入的界面

 

 */

#include "PassScene.h"

#include "MenuScene.h"

#include "GameScene.h"


extern int LEVEL;

externint SunNumber;


PassScene::PassScene(){




}

PassScene::~PassScene(){




}

boolPassScene::init(){


    INIT_CCLAYER_FUNC;

    //获得屏幕尺寸

   CCSize size =GET_WINSIZE;

    //如果本关通过

   if (LEVEL ==4) {

       //创建场景

       CCSprite *pSprite =CCSprite::create("trophy.png");

        pSprite->setPosition(ccp(size.width/2,size.height/2));

       this->addChild(pSprite);

        

        //创建说明菜单Label

        CCMenuItemFont *font =CCMenuItemFont::create("返回主菜单");

        font->setTarget(this,menu_selector(PassScene::back));

        font->setColor(ccc3(0,0,255));

        //添加如Label

       CCMenu *menu =CCMenu::create(font,NULL);

        menu->setPosition(ccp(380,50));

       this->addChild(menu);

        

    }else{

    

       //成功图片

       CCSprite *sprite =CCSprite::create("succes.jpg");

        sprite->setScale(1.0f);

        sprite->setPosition(ccp(size.width/2,size.height/2));

       this->addChild(sprite,0);

        

       //返回主菜单

       CCLabelTTF *label11 =CCLabelTTF::create("返回主菜单","Georgia-BoldItalic",30);

       CCMenuItemLabel *label1 =CCMenuItemLabel::create(label11);

        label1->setColor(ccc3(0,0,255));

        label1->setTarget(this,menu_selector(PassScene::back));

        

       //进入下一关

       CCLabelTTF *label12 =CCLabelTTF::create("进入下一关","Georgia-BoldItalic",30);

       CCMenuItemLabel *label2 =CCMenuItemLabel::create(label12);

        label2->setColor(ccc3(255,0,0));

        label2->setTarget(this,menu_selector(PassScene::next));

        

       //加入

       CCMenu *menuBack =CCMenu::create(label1,NULL);

#warning mark----------------

        menuBack->setPosition(ccp(140,160));

       this->addChild(menuBack);

        

       CCMenu *menuNext =CCMenu::create(label2,NULL);

        menuNext->setPosition(ccp(335,160));

       this->addChild(menuNext);

    

    }

    

    CCLabelTTF *label =CCLabelTTF::create("植物大战僵尸","Georgia-BoldItalic",25);

    label->setPosition(ccp(240,285));

   this->addChild(label);

    


    return true;

}

voidPassScene::back(){


    //切换场景

    CCTransitionCrossFade *fade =CCTransitionCrossFade::create(1.0f,MenuScene::scene());

    CCDirector::sharedDirector()->replaceScene(fade);

   LEVEL =1;


}

voidPassScene::next(){


    LEVEL++;//如果通关level++

    SunNumber = 50;

    CCTransitionCrossFade *fade =CCTransitionCrossFade::create(1.0f,GameScene::scene());

    CCDirector::sharedDirector()->replaceScene(fade);



}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
植物大战僵尸游戏需要掌握cocos2d-x引擎的基础知识,包括场景、图层、精灵、动画等,同时还需要了解游戏的规则和逻辑。下面是一个简单植物大战僵尸游戏实现思路: 1. 创建游戏场景游戏图层 2. 加载游戏背景、植物、僵尸等资源 3. 实现植物的种植和僵尸的出现 4. 实现植物攻击僵尸和僵尸攻击植物 5. 实现游戏结束和胜利的判定 具体实现细节可以参考下面的代码示例: 1. 创建游戏场景游戏图层 ``` auto scene = Scene::create(); auto layer = Layer::create(); scene->addChild(layer); ``` 2. 加载游戏资源 ``` auto bg = Sprite::create("bg.png"); auto sunflower = Sprite::create("sunflower.png"); auto zombie = Sprite::create("zombie.png"); ``` 3. 实现植物的种植和僵尸的出现 ``` auto addSunflower = CallFunc::create([&](){ auto sunflower = Sprite::create("sunflower.png"); sunflower->setPosition(Vec2(100, 100)); layer->addChild(sunflower); }); auto addZombie = CallFunc::create([&](){ auto zombie = Sprite::create("zombie.png"); zombie->setPosition(Vec2(500, 100)); layer->addChild(zombie); }); auto sequence = Sequence::create(addSunflower, DelayTime::create(5.0f), addZombie, nullptr); layer->runAction(RepeatForever::create(sequence)); ``` 4. 实现植物攻击僵尸和僵尸攻击植物 ``` auto sunflowerAttack = CallFunc::create([&](){ // 植物攻击 auto bullet = Sprite::create("bullet.png"); bullet->setPosition(sunflower->getPosition()); layer->addChild(bullet); auto move = MoveTo::create(1.0f, zombie->getPosition()); auto remove = RemoveSelf::create(); bullet->runAction(Sequence::create(move, remove, nullptr)); }); auto zombieAttack = CallFunc::create([&](){ // 僵尸攻击 auto attack = Sprite::create("attack.png"); attack->setPosition(zombie->getPosition()); layer->addChild(attack); auto remove = RemoveSelf::create(); attack->runAction(Sequence::create(DelayTime::create(1.0f), remove, nullptr)); }); auto sunflowerSequence = Sequence::create(sunflowerAttack, DelayTime::create(1.0f), nullptr); sunflower->runAction(RepeatForever::create(sunflowerSequence)); auto zombieSequence = Sequence::create(zombieAttack, DelayTime::create(1.0f), nullptr); zombie->runAction(RepeatForever::create(zombieSequence)); ``` 5. 实现游戏结束和胜利的判定 ``` bool isGameOver = false; bool isGameWin = false; auto checkGameOver = CallFunc::create([&](){ if (isGameOver) { // 游戏结束 // ... } }); auto checkGameWin = CallFunc::create([&](){ if (isGameWin) { // 游戏胜利 // ... } }); auto gameOverSequence = Sequence::create(DelayTime::create(10.0f), checkGameOver, nullptr); auto gameWinSequence = Sequence::create(DelayTime::create(10.0f), checkGameWin, nullptr); layer->runAction(gameOverSequence); layer->runAction(gameWinSequence); ``` 以上就是一个简单植物大战僵尸游戏实现思路,具体实现还需要根据自己的需求进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GFanStudio-LeeSir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值