开始界面

#ifndef SCENESTART_H
#define SCENESTART_H
#include "cocos2d.h"
#include "SceneGame.h"
USING_NS_CC; class SceneStart : public CCLayer
{
public:
//SceneStart(); static CCScene * scene();
CREATE_FUNC(SceneStart)
bool init(); bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
void update(float delta); CCSprite *_red;
CCSprite *_black;
bool _selected; }; #endif // SCENESTART_H

开始界面实现了滚动布局与点击选择执黑还是执白的功能。

放置棋盘与桌面

//desk
CCSprite *desk=CCSprite::create("floor.jpg");
addChild(desk);
desk->setPosition(ccp(winSize.width/2,winSize.height/2));
desk->setScaleX(winSize.width/desk->getContentSize().width);
desk->setScaleY(winSize.height/desk->getContentSize().height); //add plate and stone CCSprite *plate=CCSprite::create("background.png");
plate->setAnchorPoint(ccp(0,0));
plate->setPosition(_plateoffset);
plate->setScale((winSize.height-_plateoffset.y*2)/plate->getContentSize().height);
addChild(plate);

创建棋子类

#ifndef STONE_H
#define STONE_H
#include "cocos2d.h"
USING_NS_CC; class Stone : public CCSprite
{
public:
Stone();
enum TYPE {JIANG,SHI,XIANG,CHE,MA,PAO,BING};
static Stone *create(int id,bool red)
{
Stone *s=new Stone();
s->init(id,red);
s->autorelease();
return s;
}
void reset(bool red); bool init(int id,bool red)
{
_id=id;
_red=_id<16;
//once init
if(_id < 16)
_type = _initPos[_id]._type;
else
_type = _initPos[_id-16]._type;
const char* stonePic[14] = {
"rshuai.png",
"rshi.png",
"rxiang.png",
"rche.png",
"rma.png",
"rpao.png",
"rbing.png", "bjiang.png",
"bshi.png",
"bxiang.png",
"bche.png",
"bma.png",
"bpao.png",
"bzu.png"
};
int idx=(_red?0:1)*7+_type;
CCSprite::initWithFile(stonePic[idx]);
setScale(.8f);
reset(red);
return true;
} CC_SYNTHESIZE(TYPE,_type,Type)
CC_SYNTHESIZE(int,_x,X)
CC_SYNTHESIZE(int,_y,Y)
CC_SYNTHESIZE(int,_id,Id)
CC_SYNTHESIZE(bool,_dead,Dead)
CC_SYNTHESIZE(bool,_red,Red) static struct InitPos
{
int _x;
int _y;
Stone::TYPE _type;
}_initPos[16]; }; #endif // STONE_H

加载棋子类,世界坐标与棋盘坐标的转换

  //addstone
for(int i=0;i<32;i++)
{
_s[i]=Stone::create(i,red);
addChild(_s[i]);
//_s[i]->setPosition(ccp(_s[i]->getX()*_d,_s[i]->getY()*_d)+_stoneoffset);
//setRealPos(_s[i]);
_s[i]->setPosition(ccp(CCRANDOM_0_1()*winSize.width,CCRANDOM_0_1()*winSize.height)); CCMoveTo* move=CCMoveTo::create(1,this->getStonePos(_s[i]->getX(), _s[i]->getY()));
_s[i]->runAction(move);
}

加载悔棋按钮

 CCMenu *menu=CCMenu::create();
CCMenuItemImage *item=CCMenuItemImage::create("regret.jpg","regret.jpg",this,menu_selector(SceneGame::back));
menu->addChild(item);
addChild(menu);
menu->setPositionX(menu->getPositionX()+200);
_steps=CCArray::create();
_steps->retain();

悔棋功能的实现

void SceneGame::back(CCObject *)
{
//CCLog("HELLO WORLD\n");
if(_steps->count()==0)
return;
Step *step=(Step*)_steps->lastObject();
_s[step->_moveid]->setX(step->_xFrom);
_s[step->_moveid]->setY(step->_yFrom);
_s[step->_moveid]->setPosition(getStonePos(step->_xFrom,step->_yFrom));
if(step->_killid!=-1)
{
_s[step->_killid]->setVisible(true);
_s[step->_killid]->setDead(false);
} _redTrun=!_redTrun;
_steps->removeLastObject(); }

结果展示

Cocos2dx实现象棋之布局的更多相关文章

  1. cocos2dx实现象棋之运动

    1.头文件 void moveStone(int moveid, int killid, int x, int y); void moveComplete(CCNode*, void*); bool ...

  2. Cocos2d-X中国象棋的发展《五岁以下儿童》摆棋

    在博客上,以实现创建的游戏场景.而一些button,因为button落实到事件作出详细答复,需要使用一些功能摆棋.为此我特意button上的背面的具体实施, 在摆棋前先理清一下摆棋的思路: 1.创建一 ...

  3. js+canvas实现象棋的布局、走棋位置提示、走棋代码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 将cocos2dx项目从Visual Studio 迁移到 xcode

    因为Visual Studio和XCode的巨大差异性,一开始选择任何一个IDE,都会有一个迁移的过程,XCode的迁移到Visual Studio相对非常简单,不用再介绍.将项目从Visual St ...

  5. cocos2d-x游戏开发系列教程-中国象棋02-main函数和欢迎页面

    之前两个博客讲述了象棋的规格和工程文件之后,我们继续深入的从代码开始学习cocos2dx 首先从程序入口main函数开始 main函数 int APIENTRY _tWinMain(HINSTANCE ...

  6. cocos2d-x游戏开发系列教程-中国象棋01-工程文件概述

    上一篇博文我们看到了象棋的效果图,这一张我们来看象棋代码的整体概述 让我们先对整个代码框架有个了解. 主目录: 主目录包含内容如上图: classes目录:业务代码 proj.win32:包括main ...

  7. cocos2d-x游戏开发系列教程-中国象棋00-前言

    象棋描述 在说代码之前,我们先让象棋效果登场,以方便大家对代码的理解 欢迎界面 中国象棋程序,运行起来的第一个界面是一个欢迎界面,该欢迎界面在停留一秒后进入游戏界面 游戏主界面 新局:所有棋子归位,状 ...

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

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

  9. cocos2d-x游戏开发系列教程-中国象棋06-游戏规则

    前情回顾 上一个博文我们提到象棋运动的函数dealWithChess,但是只是说该函数完成了棋子的选择和移动功能 其实在这个函数里,在移动棋子之前,是要对棋子的移动是否合法进行判断的,我们一起来看看如 ...

随机推荐

  1. CF Gym 100685E Epic Fail of a Genie

    传送门 E. Epic Fail of a Genie time limit per test 0.5 seconds memory limit per test 64 megabytes input ...

  2. SpringMVC 2.5.6 noMapping

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  3. linux set ff命令

    在windows下写的代码传到linux上无法直接运行时 vi 文件名 :set ff=unix :wq 这样就可以运行了

  4. 修改php执行用户,并使其拥有root权限

    useradd apachephp vi /etc/httpd/conf/httpd.conf 将组和用户修改成apachephp,重启apache,然后用lsof -i:80查看apache的执行用 ...

  5. Bootstrap 新手学习笔记——布局组件

    1.字形图标: <button type="button" class="btn btn-primary btn-lg" style="font ...

  6. CSS+JS实现兼容性很好的无限级下拉菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...

  7. JAVA 利用JNI加密class文件/自定义ClassLoader 类

    利用 JNI 对bytecode 加密.不影响java程序员的正常开发.09年的时候写的,现在拿出来晒晒————————————————————————————混淆才是王道,如果混淆再加密就更酷了.. ...

  8. Windows环境下 Node和NPM个性安装

    常拿自己的电脑常用来测试各种Bug,所以始终奋斗在XP.IE6的环境下.让我们在如此级别的环境下,开始Node之路吧~~ 在过去,Node.js一直不支持在Windows平台下原生编译,需要借助Cyg ...

  9. [原] Android持续优化 - 提高流畅度

    一.形象的感官一下流畅度概念 1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms. 2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数.因此 ...

  10. java笔记--超级类Object多线程的应用+哲学家进餐算法内部类与多线程结合

    关于Object类中的线程方法: Object类是所有Java类的 父类,在该类中定义了三个与线程操作有关的方法,使得所有的Java类在创建之后就支持多线程 这三个方法是:notify(),notif ...