开始界面

#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. 浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject

    http://www.cnblogs.com/LoveJenny/archive/2011/07/05/2098578.html ExpandoObject:表示一个对象,该对象包含可在运行时动态添加 ...

  2. Redis 下载

    https://github.com/MSOpenTech/redis/releases下载 Redis伴侣Redis Desktop Manager:http://redisdesktop.com/ ...

  3. spark对于elasticsearch里的复杂类型支持

    IP,直接在case class里用string, 可以考虑先用其它程序生成相关的mapping,然后再去用spark填充数据

  4. eclipse错误:Unable to read workbench state. Workbench UI layout will be reset.XML document structures

    Unable to read workbench state. Workbench UI layout will be reset.XML document structures must start ...

  5. ajax局部更新

    js //点击启用 $(".status").on("click",function(){ var id = $(this).attr("status ...

  6. Quartz.net开源作业调度框架使用详解(转)

    前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...

  7. POJ2823 Sliding Window (单调队列)

    POJ2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 38342   Accepte ...

  8. js中的getAttribute方法使用示例

    getAttribute()方法是一个函数.它只有一个参数——你打算查询的属性的名字,下面为大家介绍下其具体的使用   getAttribute()方法 至此,我们已经向大家介绍了两种检索特定元素节点 ...

  9. [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同

    面向对象编程中,函数.方法.类的构造函数是三种不同的概念. JS中,它们只是单个构造对象的三种不同的使用模式. 三种不同的使用模式 函数调用 function hello(username){ ret ...

  10. Unity游戏开发之“屏幕截图”

    原地址:http://sygame.lofter.com/post/117105_791680 在unity游戏开发中,可能会遇到在游戏中截屏的效果.这儿提供两种截屏方法.(方法二提供显示截图缩略图代 ...