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

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

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开发中国象棋《三》開始场景的实现的更多相关文章

  1. Cocos2d-X开发中国象棋《二》project文件概述

    我在上一篇博客中介绍了象棋的功能.在接下来的博客中将向大家介绍使用Cocos2d-X怎样一步一步开发中国象棋 开发工具: Cocos2d-X2.2.3 VS2012 项目的文件夹: Classes:存 ...

  2. cocos2dx游戏开发学习笔记2-从helloworld開始

    一.新建project 具体安装和新建project的方法在cocos2dx文件夹下的README.md文件里已经有具体说明,这里仅仅做简介. 1.上官网下载cocos2dx-3.0的源代码.http ...

  3. Cocos2d-X开发中国象棋《八》走棋

    在上一节中实现了新局,至此中国象棋的准备工作差点儿相同都完毕了,在接下来的博客中将介绍玩家的走棋和一些游戏属性的设置,今天先介绍走棋和走棋规则 老规则,先看走棋的效果图,然后依据效果图一步一步分析游戏 ...

  4. Python开发中国象棋实战(附源码)

        Pygame 做的中国象棋,一直以来喜欢下象棋,写了 python 就拿来做一个试试,水平有限,电脑走法水平低,需要在下次版本中更新电脑走法,希望源码能帮助大家更好的学习 python.总共分 ...

  5. Cocos2d-X开发中国象棋《九》走棋规则

    在上一节中实现了走棋,这篇博客将介绍中国象棋中的走棋规则 在写博客前先可能一下象棋的走棋规则: 1)将 将的坐标关系:横坐标相等,纵坐标相减绝对值等于1,或者纵坐标相等,横坐标相减绝对值等于1 将的特 ...

  6. Cocos2d-X开发中国象棋《四》设计游戏场景

    设计完開始界面后就要设计游戏界面了 为了理清设计思路先看一张游戏界面效果图 游戏界面设计思路: 1.在窗体上放一张桌子 2.在桌子上放一个棋盘 3.在棋盘右边加入新局button,暂不实现详细的功能 ...

  7. XMPP开发之从零開始

    对于server的搭建和设置.我在这里就不再多说了.有好多前辈已经帮大家攻克了.能够參考下这篇博客 XMPPserver配置 我依照这个博客配置好了,server后,然后在网上參照代码写了一个小的de ...

  8. 从零開始开发Android版2048 (四) 分数、重置、结束

    这一篇的内容主要是在上一篇的基础上,增加分数计算(包含当前分数和最高分数).游戏结束的推断以及游戏界面的重置这三个部分的功能. 一.分数的计算和保存          首先,2048这个游戏的分数包含 ...

  9. iOS runtime探究(三): 从runtime開始理解OC的属性property

    你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要解说runtime相关知识, ...

随机推荐

  1. String字符串的完美度

    题目详情: 我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度 ...

  2. P1257 平面上的最接近点对

    题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的 输入输出格式 输入格式: 第一行:n:2≤n≤200000 接下来n行:每行两个实数:x y, ...

  3. Python3 每次处理一个字符

    """ Python3.4[文本]之每次处理一个字符 """ test_str = "my name is bixiaopeng& ...

  4. ubuntuKylin17.04重装KDE

    不小心安装了一个不知道什么的东西,把libROS的那一套都给卸载了,然后删除掉了KDE的很多库.然后KDM也丢失了.KDE界面启动之后,plasma-desktop界面也启动不了.选择重装. 然而出现 ...

  5. zxing 生成条形码

    private Bitmap Out1DImg() { // 1.设置条形码规格 EncodingOptions encodeOption = new EncodingOptions(); encod ...

  6. Python 之多线程应用

    import socket from threading import Thread def recv_data(): while True: recv_info = udp_socket.recvf ...

  7. appium 使用send_keys方法时报错: driver.find_element_by_id("com.hmkx.zgjkj:id/layout_search_bar_input").send_keys("123")

    新手 使用send_keys方法时一直报错,上网查这个方法的用法,看着大家都是这么写的啊,后来直接搜索 报错信息,搜索结果的针对性就清楚多了. 原来是seleium版本太高导致的问题. 可以先在cmd ...

  8. if判断,while循环,for循环

    if判断 if判断其实就是让计算机模拟人的判断 if if 条件: 代码1 代码2 代码3 ... # 代码块(同一缩进级别的代码,例如代码1.代码2和代码3是相同缩进的代码,这三个代码组合在一起就是 ...

  9. modelsim 仿真软件 百度云分享 modelsim se 10.7 10.6d 10.6c 10.5 10.4

    modelsim se 10.7 链接:https://pan.baidu.com/s/1NDC2yMCZmA4bIRSk2dUiTg 提取码:4l1d 复制这段内容后打开百度网盘手机App,操作更方 ...

  10. IDEA 基本配置

    idea使用基本配置 1配置JDK开发环境 File->project structure: 2取消自动更新 file->setting:Appearance &Behavior下 ...