在前面两节(第一节。第二节)中介绍了中国象棋的功能和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. Unity和C#开发 - 中国象棋+源代码工程

    Unity和C#开发 - 中国象棋+高清视频指导+源代码工程 https://item.taobao.com/item.htm?ft=t&id=650971483074

  2. 使用Qt开发中国象棋(三):走棋着法列表

    在一个完整的中国象棋游戏中,一般界面上都显示了中文着法,为了简单起见,我开发的这个用了两个着法列表,红方一个,黑方一个,其实用一个就够了,只是感觉那样稍微会麻烦些.着法列表显示了每一步的走棋.下图是着 ...

  3. 使用Qt开发中国象棋(一):概述

    最近看了一些关于中国象棋的实现书籍,里面讲述了如何开发一个完整的中国象棋游戏,看了里面的内容,感觉里面的内容特别巧妙的,比如书中提到了用位棋盘来表示中国象棋的棋盘以及一些精妙的走棋算法.基于这些,自己 ...

  4. Java游戏开发——中国象棋联机版

    游戏介绍: 中国象棋是起源于中国的一种棋戏,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于规则简单,趣味性强,成为流行极为广泛的棋类游戏. 中国象棋使用方形格状棋盘及红黑二色圆形棋子进行对弈,棋 ...

  5. 用VS软件开发“中国象棋“游戏<笔记摘录>

    整体架构如上 1.很直观地去看这个中国象棋的界面,数一下它有多少行和多少列. 10行,9列:要注意这里数的是安放象棋的位置,有10行9列 这里我们首先想到的必然是二维数组,每一个行列交叉的点都设置成二 ...

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

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

  7. 用VS软件开发“中国象棋“游戏

    1.很直观地去看这个中国象棋的界面,数一下它有多少行和多少列. 10行,9列:要注意这里数的是安放象棋的位置,有10行9列 这里我们首先想到的必然是二维数组,每一个行列交叉的点都设置成二维数组a[i] ...

  8. Qt实现中国象棋:(三)棋盘绘制的详细分析及实现

    一.图片及棋盘分析 1:在上文中已经对单张图片的显示进行了测试,从中可以知道一张图片需要一个QPixmap对象对其进行加载.棋盘图片共有23张,也就需要23个QPixmap的对象.同时要求对象名与图片 ...

  9. 街头一小伙子C++开发中国象棋,智能走法巧妙,让人拍手叫好!

    象棋是一种古老的智力游戏,人们往往通过对弈来参透一些人生的一些哲理,来提高自己的觉悟能力.思维能力和生活乐趣. 小编今天用C++ 中国象棋人机对弈程序源代码,支持人机对弈.人人对弈等多种方式,提供多种 ...

最新文章

  1. Bitcoin ABC首席开发者回应有关比特币现金的提问(二)
  2. 【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
  3. node版本管理工具n包使用教程
  4. [C++调试笔记]网格划分grid_pic.cpp
  5. Windows7系统自带的备份与还原功能使用介绍
  6. pthread_cond_wait的spurious wakeup问题
  7. jquery、javascript实现(get、post两种方式)跨域解决方法
  8. 如何将外部的obj模型导入OpenGL
  9. python 闭包中引用的变量值变更问题
  10. 8s pod 查看 的yaml_k8s之深入解剖Pod(三)
  11. 打过工、留过洋、创过业,一位中年IT老兵的反思
  12. java+phantomjs实现动态网页抓取
  13. Linux内核学习书籍
  14. 分段线性插值法实验报告_试验二 插值法(含实验报告式)格式).doc
  15. win10应用商店无法连接到服务器出错,win10应用商店无法连接网络的具体解决方法...
  16. Python学习Day01
  17. 悲观的人更容易获得好的感觉
  18. 逐行扫描(Progressive scanning),隔行扫描(interlace scanning),场
  19. 7种方法求解八数码问题
  20. JAVA计算机毕业设计专利查询与发布系统设计与实现Mybatis+源码+数据库+lw文档+系统+调试部署

热门文章

  1. 测试python安装成功_Python在Windows上安装配置测试
  2. python standardscaler_定制便携python工具箱
  3. android按任意建关闭对话框,Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭...
  4. android线程改变布局,Android线程中设置控件的值提示报错的解决方法
  5. python中如何计算集合的长度_Python如何计算序列长度 python dataframe中元素如何统计?...
  6. access两位小数不进位_人教版小学数学三年级下册笔算乘法(不进位)公开课优质课课件教案视频...
  7. 怎么通过controller层退出登录_控制层访问拦截
  8. matlab保存f黑白图片_Matlab微积分
  9. Vue+Vue Router+Vuex页面演示
  10. 用python实现(1.求输入的百倍,十位,个位数;2.输入a,b和ab间夹角,计算c边长;3.计算两点间曼哈顿距离;4.计算给定数据的几何平均数;5.计算向量的L1和L2范数)