游戏开发:基于cocos2dx开发实现游戏2048

cocos2d-x游戏开发编程入门到实战视频教程 cocos2d-x游戏开发编程入门到实战视频教程 cocos2d-x刚开始的初衷就不是给企业用来开发大型游戏的,一个开源引擎后边又没有大牛支着,可以说它作为一个广大游戏爱好者用来研究娱乐的作用远大于其商业价值。 而14年开始大批的创业公司都想在移动游戏开发中“套一笔”,导致游戏产业膨胀,2D游戏开发成本低,周期短,再加上cocos2d当时口碑不错有着很多的成功先例,而且还开源,成为许多创业公司的首... 阅读详情

《2048》是一款在2014年意外窜红的数字游戏,玩法比较简单,而之后基于原版2048也衍生出了不少其他版本,火的一塌糊涂。本文将基于cocos2dx来开发实现2048这款游戏。

这里写图片描述


开发环境

操作系统:win7
开发工具:Visual studio 2012
引擎版本:cocos2dx 3.6


游戏玩法

4*4的卡片布局,玩家通过手势上下左右滑动来累加卡片数值,直到累加到2048。为方便后面的开发上的逻辑更加清晰,具体玩法逻辑我们可以细分如下:

  • 开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4
  • 玩家可以选择上下左右四个方向,若棋盘内的数字出现位移或合并,视为有效移动
  • 玩家选择的方向上若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并
  • 合并所得的所有新生成数字想加即为该步的有效得分
  • 玩家选择的方向行或列前方有空格则出现位移
  • 每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4)
  • 棋盘被数字填满,无法进行有效移动,判负,游戏结束
  • 棋盘上出现2048,判胜,游戏结束

游戏实现

了解了上述游戏玩法规则胡,接下来我们就基于cocos2dx来对游戏2048进行相关实现。

1. 游戏场景创建

根据我们对游戏的了解,主场景上主要显示信息有4*4的卡片布局矩阵,以及游戏分数的显示。因此我们创建GameScene类(Layer的子类),即游戏的主场景,负责游戏的基本信息的显示,同事还负责管理游戏的交互逻辑和分数更新。细分如下:

  • 游戏主要操作区卡片矩阵的创建显示;
  • 游戏交互处理(主要是Touch一类的操作);
  • 游戏结果更新、显示;
  • 其他(按钮控件、声音处理…)

游戏主场景GameScene类的声明:

#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__
#include "cocos2d.h"
#include "cardSprite.h"
#include "MenuLayer.h"
class GameScene :public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
    virtual bool init();
    CREATE_FUNC(GameScene);
public:
    // Touch开始事件监听
    virtual bool onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
    virtual void onTouchEnded(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);

    // 上下左右四个方向的滑动操作处理
    bool moveLeft();
    bool moveRight();
    bool moveUp();
    bool moveDown();
    //创建4*4卡片矩阵
    void createCardMatrix (Size size);
    void randomCreateCard();
    //判断游戏赢输
    void checkGameWin();
    void checkGameOver();

    //重新开始游戏菜单项
    void restart(Ref *sender); 
private:
    cocos2d::LabelTTF   *scoreLabel;
    LabelTTF            *restartBtn;                //重新开始的按钮
    LabelTTF            *isSoundBtn;                //声音切换按钮
    CardSprite          *cardArr[4][4];         //数字卡片矩阵
    CardSprite          *cardArrAction[4][4];   //用于动画的临时数字卡片矩阵

    MenuLayer           *menuLayer;             //菜单层

    Point               startPt;                    //触摸开始点
    int                 offsetX, offsetY;       //触摸水平和竖直方向偏移量

    int score;                                  //当前分数
    int bestScore;                              //最好分数

    bool sound;                                 //声音变量

    timeval tv;                                 //当前时间
};
#endif // __GAME_SCENE_H__

注:相关函数、变量在后续步骤中逐一说明。

2. 卡片精灵CardSpirit

卡片类是组成2048游戏的基础,4*4的方格的16个位置放置不同的卡片,每个位置为独立的一张卡片。每个卡片都有着各自的位置信息、数字信息、颜色信息等独特信息。因此,我们基于Sprite精灵类派生CarSprite类,封装实现卡片类。根据我们的分析,卡片类主要要实现的功能如下:

  • 卡片的创建及初始化;
  • 卡片属性更新(卡片数字、卡片背景颜色);

卡片类CardSprite的声明:

/** @class  GameMainScene
  * @brief  游戏主场景
  * @author 7-sevens
  * @date   2015/03/01
  */
#ifndef __CARD_SPRITE_H__
#define __CARD_SPRITE_H__
#include "cocos2d.h"
USING_NS_CC;
class CardSprite :public Sprite
{
public:
    // 创建游戏卡
    static CardSprite* createCard(int num, int cardWidth, int cardHeight, float px, float py);
    virtual bool init();
    CREATE_FUNC(CardSprite);
    // 设置数字
    void setNumber(int num);
    // 获取数字
    int getNumber();
    LayerColor* getCardLayer();
private:
    void cardInit(int num, int cardWidth, int cardHeight, float px, float py);

private:
    LabelTTF    *cardLabel;     //卡片数字标签控件
    LayerColor  *cardBgColour;  //背景

    int number;
};
#endif // __CARD_SPRITE_H__

我们可以从游戏中看到,每张卡片有背景颜色和一个数字,所以我们在头文件需要声明它这两个属性。

卡片类CardSprite的相关实现:
(1)卡片的创建初始化

CardSprite* CardSprite::createCard(int num, int cardWidth, int cardHeight, float px, float py)
{
    CardSprite *card =
用cocos2dx开发2048游戏:全面解析与实践 cocos2dx是一个开源的游戏开发框架,由易到难地支持2D游戏的制作,广泛适用于多种平台。它提供了一套丰富的API接口,通过这些API可以轻松地实现游戏的图形渲染、音效播放、动画处理等核心功能,大大降低了游戏开发的门槛。 阅读详情

相关推荐

Source:一款使用cocos2dx开发的,pc版RTS(即时战略)游戏源码,资源在上级目录的产品目录下-源码资源

Source:一款使用cocos2dx开发的,pc版RTS(即时战略)游戏源码,资源在上级目录的产品目录下

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2630

拒绝无意义刷屏,打造高效率热点追踪,极空间部署『TrendRadar』

今天的这个项目确实不错,通过部署在极空间NAS之后,我们就能一直不间断的获取到自己想要看到的新闻或者信息。项目的设置项其实有很多,有兴趣的小伙伴可以在部署之后自己慢慢挖掘~目前年终大促正在火热进行中,极空间NAS不管是新品还是之前在售的畅销型号都有专属的优惠,并且还能叠加国补、平台优惠等福利,享受180天换新以及2年质保服务 ,更有抽奖、晒单等活动,喜欢的小伙伴赶快冲吧!

qq_63499861的博客 2290

信号编辑软件ZX/SignalEditing

信号编辑软件ZX/SignalEditing

weixin_45661395的博客 955

手把手讲解RTX5操作系统在GD32F407上的移植

然后将GD32F4xx_Demo_Suites_V2.6.4\GD32407V_START_Demo_Suites\Projects\01_GPIO_Running_LED下面的main函数复制到我们的项目文件夹中;打开对应GD32407V_START_Demo_Suites的文件夹下面的Utilities,复制gd32f407v_start.c和gd32f407v_start.h文件到一开始项目保存的文件夹下面;为了验证我们的操作系统是否被正确添加,是否能够正确运行,我们需要添加示例文件;

Praguejing的博客 1859

UDPProbe UDP端口存活探测(发送特征包+响应分析)、UDP服务识别

qDebug() << "收到响应:" << ip.toString() << ":" << port << " 服务:" << serviceName << " 响应长度:" << response.size();qDebug() << "开始探测:" << targetIp << ":" << port << " 超时时间:" << timeout << "ms";qInfo() << "\n==================== UDP探测结果 ====================";

寒寒豆豆软件公司的博客 146

SAP PCE 到底有没有 AI 能力:从标准功能、Joule、ABAP 扩展到项目落地的完整解读

摘要:SAP S/4HANA Cloud Private Edition(PCE)已深度集成AI能力,主要体现在三个方面:1)标准业务流程中的AI辅助功能(如财务分录生成、维修单据处理);2)通过Joule提供的自然语言交互入口,支持业务导航和部分事务处理;3)开发者可通过ABAP AI SDK与BTP平台集成实现扩展。PCE不是独立AI平台,企业级自定义AI需结合SAP BTP实现。AI能力已深度融入财务、制造等业务场景,但关键业务仍需人工审核。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 330

PCL 基于视椎体裁剪点云

PCL 基于视椎体裁剪点云

dayuhaitang1的博客 4083

目标检测YOLO实战应用案例100讲-跨模态、多级别融合的RGB-D显著目标检测方法研究(续)

在第二章介绍了本研究的跨模态特征融合方法,第二章对于多级别特征的融合, 使用的是与基线模型baseline相同的方法:相邻级别的特征中,高级特征进行上采 样到与低级特征相同的尺度,再将高级特征通过降维得到与低级特征相同的通道数 量,最后对二者进行特征叠加,如此自顶向下的进行多级别的特征融合。本章主要 介绍本研究在特征层面的另一发现,并基于此发现引出的本文的第二个创新点:多 级别特征的融合方法。另外,在网络最深层,本文设计了一个新的模块来获取大的 感受野,对于大尺度目标能够增加更多语义信息,提升检测效果。 骨

qq_36130719的博客 466

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Android探路(2):项目创建HelloWorld
下一篇: 算法:排序算法之堆排序
7-sevens
博客等级 码龄10年 259粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值