Cocos2d-X开发中国象棋《三》开始场景的实现

2024-05-06 05:58

本文主要是介绍Cocos2d-X开发中国象棋《三》开始场景的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在前面两节(第一节,第二节)中介绍了中国象棋的功能和工程文件,在这篇博客中将介绍中国象棋的开始场景的实现

在写代码前先理清一下实现开始场景的思路:

1、打开游戏后进入开始场景,场景上显示一个红色的帅和黑色的将,并且两个棋子在同一条直线上(两个棋子的y坐标相同)

2、当玩家单击红色后,红色的帅一边向右移动一边按照顺时针方向旋转,黑色的将一边向左移动一边按照逆时针方向旋转

3、当玩家单击黑色后,红色的帅一边向右移动一边按照顺时针方向旋转,黑色的将一边向左移动一边按照逆时针方向旋转

4、当两个棋子相撞后进入游戏场景(两个棋子的距离小于或者等于棋子的直径)

5、如果玩家单击的是红色的帅,玩家的棋子为红色

6、如果玩家单击的是黑色的将,玩家的棋子为黑色


SceneStart.h和SceneStart.cpp用于实现开始场景

实现代码:

SceneStart.h中的代码

#ifndef  _SceneStart_H_
#define _SceneStart_H_#include "cocos2d.h"
USING_NS_CC;class SceneStart : public CCLayer
{
public:static CCScene* scene();bool init();CREATE_FUNC(SceneStart);bool ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent);void ccTouchEnded(CCTouch* pTouch, CCEvent* pEvent);CCSprite* _red;CCSprite* _black;void update(float);//标记是否选中了红色棋子bool _selected;
};#endif


SceneStart.cpp中的代码

#include "SceneStart.h"
#include "SceneGame.h"CCScene* SceneStart::scene()
{CCScene* scene = CCScene::create();SceneStart* layer = SceneStart::create();scene->addChild(layer);return scene;
}bool SceneStart::init()
{CCLayer::init();CCSize winSize = CCDirector::sharedDirector()->getWinSize();CCSprite* bkr = CCSprite::create("bkg2.png");addChild(bkr);CCSprite* bkb = CCSprite::create("bkg1.png");addChild(bkb);bkr->setPosition(ccp(winSize.width / 2 - 100, winSize.height / 2));bkb->setPosition(ccp(winSize.width / 2 + 100, winSize.height / 2));_red = bkr;_black = bkb;//注册触摸事件setTouchEnabled(true);setTouchMode(kCCTouchesOneByOne);return true;
}bool SceneStart::ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent)
{return true;
}void SceneStart::ccTouchEnded(CCTouch* pTouch, CCEvent* pEvent)
{CCSize winSize = CCDirector::sharedDirector()->getWinSize();//获得触摸点的位置(坐标)CCPoint ptClick = pTouch->getLocation();//用于判断是否点中了棋子bool bClickStone = false;//当点中红色的棋子的时候(触摸点的位置在红色的棋子所在的范围内)if(_red->boundingBox().containsPoint(ptClick)){//点中了红色的棋子this->_selected = true;//点中了棋子bClickStone = true;}//当点中黑色棋子的时候(触摸点的位置在黑色棋子所在的范围内)else if(_black->boundingBox().containsPoint(ptClick)){//没点中红色棋子this->_selected = false;//点中了棋子bClickStone = true;}//当点中了棋子的时候if(bClickStone){//移动棋子CCMoveTo* moveTo1 = CCMoveTo::create(1, ccp(winSize.width / 2, winSize.height / 2));CCMoveTo* moveTo2 = CCMoveTo::create(1, ccp(winSize.width / 2, winSize.height / 2));//旋转棋子CCRotateBy* rotate1 =  CCRotateBy::create(1, 360);CCRotateBy* rotate2 =  CCRotateBy::create(1, -360);//旋转和移动同时执行CCSpawn* spawn1 = CCSpawn::create(moveTo1, rotate1, NULL);CCSpawn* spawn2 = CCSpawn::create(moveTo2, rotate2, NULL);//执行行动作_red->runAction(spawn1);_black->runAction(spawn2);//启动定时器scheduleUpdate();}
}void SceneStart::update(float)
{//获取两个棋子的x坐标float x1 = _red->getPositionX();float x2 = _black->getPositionX();//当红色的棋子和黑色的棋子碰撞后//两个棋子的距离小于或等于棋子的直径//getContentSize().width获得棋子的宽度(棋子的直径)if(abs(x1 - x2) <= _red->getContentSize().width){//进入游戏CCDirector::sharedDirector()->replaceScene(SceneGame::scene(this->_selected));}
}

执行结果:



这篇关于Cocos2d-X开发中国象棋《三》开始场景的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963575

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库