zoukankan      html  css  js  c++  java
  • 08--随机生成卡片

           上一篇中已经完成滑动合并卡片,但2048游戏在合并卡片后会在没有卡片的位置随机生成一个卡片。为完成此功能我们在GameLayer.h中声明一个函数

    //自动生成卡片
        void autoCreateCardNumber();

          在cpp中实现如下:

    void GameLayer::autoCreateCardNumber()
    {
        int tmp = CCRANDOM_0_1()*15;
        //二维数组转换为整数: index = x+y*size_x
        int i= tmp%4;   
        int j= tmp/4;
    
        //判断指定位置是否有卡片
        if (cardArr[i][j]->getNumber()>0)
        {
            autoCreateCardNumber();
        } 
        else
        {
            //2和4个一半机会
            cardArr[i][j]->setNumber(CCRANDOM_0_1() < 0.5 ? 2: 4);
        }
    }

             生成卡片的方法是有了,现在就需要调用它,我们在init函数中调用

    bool GameLayer::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !CCLayer::init() )
        {
            return false;
        }
    
        //打开触屏功能
        setTouchEnabled(true);
    
        //创建游戏背景
        this->addChild(cocos2d::CCLayerColor::create(
            ScreenAdapter::GetGameBGColor() ));
        //创建卡片
        CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
        createCardSprite(visibleSize);
    
        autoCreateCardNumber();
        autoCreateCardNumber();
    
        return true;
    }

            不过还得改一个地方,应为我们在createCardSprite函数中创建卡片的时候默认每个格子都有数值,游戏开始可不能这样,所有创建的卡片数值给0

    void GameLayer::createCardSprite(cocos2d::CCSize size)
    {
        //获取卡片高宽
        int unitSize = ScreenAdapter::GetCardHeight(size.height);
    
        //创建4*4个卡片
        for (int i=0;i<4;i++)
        {
            for (int j=0;j<4;j++)
            {
                CardSprite* card = CardSprite::createCardSprite(
                    0,  // 修改这里
                    unitSize,
                    unitSize,
                    unitSize*i+100,
                    unitSize*j+20);
                //保存卡片到数组中
                cardArr[i][j] = card;
                addChild(card);
            }
        }
    }

             来看看效果

    image

  • 相关阅读:
    《C#从现象到本质》读书笔记(八)第10章反射
    《C#从现象到本质》读书笔记(七)第9章 泛型
    《C#从现象到本质》读书笔记(六)第8章委托和事件
    《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理
    求1+2+……+n的和
    回溯法的应用举例
    回溯法
    翻转单词顺序列
    左旋转字符串
    和为S的两个数字
  • 原文地址:https://www.cnblogs.com/BlueBeauty/p/3800810.html
Copyright © 2011-2022 走看看