Cocos2dx实现象棋之布局
开始界面
#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实现象棋之布局的更多相关文章
- cocos2dx实现象棋之运动
1.头文件 void moveStone(int moveid, int killid, int x, int y); void moveComplete(CCNode*, void*); bool ...
- Cocos2d-X中国象棋的发展《五岁以下儿童》摆棋
在博客上,以实现创建的游戏场景.而一些button,因为button落实到事件作出详细答复,需要使用一些功能摆棋.为此我特意button上的背面的具体实施, 在摆棋前先理清一下摆棋的思路: 1.创建一 ...
- js+canvas实现象棋的布局、走棋位置提示、走棋代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 将cocos2dx项目从Visual Studio 迁移到 xcode
因为Visual Studio和XCode的巨大差异性,一开始选择任何一个IDE,都会有一个迁移的过程,XCode的迁移到Visual Studio相对非常简单,不用再介绍.将项目从Visual St ...
- cocos2d-x游戏开发系列教程-中国象棋02-main函数和欢迎页面
之前两个博客讲述了象棋的规格和工程文件之后,我们继续深入的从代码开始学习cocos2dx 首先从程序入口main函数开始 main函数 int APIENTRY _tWinMain(HINSTANCE ...
- cocos2d-x游戏开发系列教程-中国象棋01-工程文件概述
上一篇博文我们看到了象棋的效果图,这一张我们来看象棋代码的整体概述 让我们先对整个代码框架有个了解. 主目录: 主目录包含内容如上图: classes目录:业务代码 proj.win32:包括main ...
- cocos2d-x游戏开发系列教程-中国象棋00-前言
象棋描述 在说代码之前,我们先让象棋效果登场,以方便大家对代码的理解 欢迎界面 中国象棋程序,运行起来的第一个界面是一个欢迎界面,该欢迎界面在停留一秒后进入游戏界面 游戏主界面 新局:所有棋子归位,状 ...
- Cocos2d-X开发中国象棋《二》project文件概述
我在上一篇博客中介绍了象棋的功能.在接下来的博客中将向大家介绍使用Cocos2d-X怎样一步一步开发中国象棋 开发工具: Cocos2d-X2.2.3 VS2012 项目的文件夹: Classes:存 ...
- cocos2d-x游戏开发系列教程-中国象棋06-游戏规则
前情回顾 上一个博文我们提到象棋运动的函数dealWithChess,但是只是说该函数完成了棋子的选择和移动功能 其实在这个函数里,在移动棋子之前,是要对棋子的移动是否合法进行判断的,我们一起来看看如 ...
随机推荐
- node相关的精典材料
node.js电子书 了不起的Node.js 深入浅出Node.js node.js入门经典 node.js开发指南 node.js相关优秀博文 官网 Infoq深入浅出Node.js系列(进阶必读) ...
- jquery------导入jquery.2.2.3.min.js
问题: 导入jquery.2.2.3.min.js后MyEclipse会提示代码有错误 方法: 选中jquery.2.2.3.min.js->右键->选择“MyEclipse”中的“Exc ...
- 使用Redis SETNX 命令实现分布式锁
基于setnx和getset http://blog.csdn.net/lihao21/article/details/49104695 使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其 ...
- Android打电话&发短信
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView ...
- 理解模板引擎Razor 的原理(转载)
Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目.Razor Pad是一 ...
- iOS-自定义Log
打印Log是一件非常消耗系统性能的事情,因此在发布时要把程序中的Log进行隐藏.以下是在iOS中自定义Log的代码 #ifdef DEBUG // 处于开发阶段 #define DJLog(...) ...
- C#比较时间大小 1、比较时间大小的实验
1.比较时间大小的实验 string st1="12:13"; string st2="14:14"; DateTime dt1=Convert.ToDa ...
- 利用SecureCRT上传、下载文件(使用sz与rz命令)
sz用法: 下载一个文件 sz filename 下载多个文件 sz filename1 filename2 下载dir目录下的所有文件,不包含dir下的文件夹 sz dir/* 下载文件存放位置在s ...
- SecureCRT光标颜色
SecureCRT连linux光标一直没有,尤其是在vim编辑文档的时候特别麻烦,今天找出解决办法: 选项->会话选项->仿真:将ANSI颜色选中: 选项->会话选项->外观: ...
- lamp 网站打不开,不显示也不报错,
原因是该网站的编程员,习惯简写,<? ?>;而服务器版本的php.ini 默认不支持只支持<?php ?>这种格式. 解决方法vim /usr/loacl/php/etc/ph ...