Cocos2d-X小游戏——别踩白块

自己学了快两个月的cocos2d-x了,前几天自己看着教学视频,跟着做了一个小游戏——别踩白块。

今天来说一说我自己是如何写这个项目的。逻辑有点乱,不知道看不看得懂。。。。

首先,这个游戏有两个场景,一个是开始场景,一个是失败场景。


开始场景如下:

这里写图片描述

开始场景里面有三类块:

  1. 起始块(黄色,有Start Game)
  2. 正常块(黑白块)
  3. 结束块(绿色,有You Win)

起始块如下:
这里写图片描述

正常块如下:
这里写图片描述

结束块如下:
这里写图片描述

因为这个游戏都是以块为单位的所以可以将这些块统称为抽象块,所以要给块来写一个 create 方法如下:

static Block * create(Size size,Color3B color,String str,
                      float strSize,Color3B strColor);

这个函数里面有五个参数,第一个参数是块的大小 size ;第二个参数是块的颜色 color ;第三个参数是在块上要显示的字符串 str ;第四个参数是字符串的大小 strSize ;第五个参数是字符串的颜色 strColor 。

我们创建块的时候要确定块的大小,如

  • 起始块:宽为,winSize.width;高为,winSize.height/4
  • 正常块:宽为,winSize.width/4;高为,winSize.height/4
    这里除以 4 是将屏幕给分成了4×4个正常块
  • 结束块:宽为,winSize.width;高为,winSize.height

注意:这里的 winSize 就是屏幕的大小。

现在把 Block 类写好:

#ifndef __Block_H_
#define __Block_H_
#include "cocos2d.h"
USING_NS_CC;
class Block : public Sprite
{
public:
    static Block * create(Size size,Color3B color,String str,
                          float strSize,Color3B strColor);
    bool init(Size size,Color3B color,String str,
              float strSize,Color3B strColor);

    //类内部静态成员在单独的内存里的,
    //在定义的时候已经存在了,它不属于某一个对象,只属于这个类
    static Vector<Sprite *> vec; //用来存放已经创建好的块
    static Vector<Sprite *> getBlockVector();

    //产生get方法和set方法
    CC_SYNTHESIZE(int,_LineIndex,LineIndex);

    //向下移动块,并且清除
    void moveDownAndCleanUp();
};

#endif

将 Block 类写好后,就可以开始写游戏逻辑了。

  1. 游戏一开是就进入开始场景,只要玩家一开始点击黑块游戏就会开始。
  2. 玩家只能按顺序点击黑块,即每次都是点击最下面的黑块。
  3. 玩家只要正确地点击了黑块,那个被点击的黑块就会变成灰色,
    被点击那一行块就会往下移动,并且在屏幕上方添加一新行。
  4. 玩家在点击玩所有的黑块后,即赢得胜利,出现结束块。
  5. 若玩家点到了白块则游戏失败,切换到游戏失败的场景

失败场景如下:

这里写图片描述


开始游戏,我们需要将屏幕最开始的布局给设置好,大家可能已经注意到 Block 类中有一个行号函数

CC_SYNTHESIZE(int,_LineIndex,LineIndex);

行号函数就是用来设置(set)和得到(get)块的行号的,行号在屏幕上只有0到3行,
如下图所示
这里写图片描述

首先我们需要三个函数,分别添加开始块,正常块和结束块。

在开始的布局中第0行添加开始块,第 1,2,3行添加正常块。
在点击完所有的黑块后添加结束块。

添加开始块的函数如下:

void LayerGame::addStartLineBlock()
{
    Size startBlockSize = Size(winSize.width,winSize.height/4);
    Block * b = Block::create(startBlockSize,
                              Color3B::YELLOW,
                              "Start Game",
                              30,
                              Color3B::BLUE);
    b->setPosition(Point(0,0));
    this->addChild(b);
    b->setLineIndex(0);//设置行号为0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值