#include "HelloWorldScene.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"
#include "CardSprite.h"
#include
#include "test.h"
USING_NS_CC;
#define RWO 4
#define LIE 4
using namespace cocostudio::timeline;
Scene* HelloWorld::createScene()
{
auto ui = test::create();
// 'scene' is an
autorelease object
auto scene =
Scene::create();
// 'layer' is an
autorelease object
auto layer =
HelloWorld::create();
// add layer as a child
to scene
scene->addChild(layer);
// return the
scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
if ( !Layer::init()
)
{
return false;
}
//auto rootNode =
CSLoader::createNode("Scene.csb");
_sorce = 0;
auto layercolor = LayerColor::create(Color4B(100, 90, 100,
255));
addChild(layercolor);
Sprite * sp = Sprite::create();
sp->setTexture("bg.png");
addChild(sp);
sp->setContentSize(Director::getInstance()->getVisibleSize());
sp->setPosition(Director::getInstance()->getVisibleSize().width
/ 2, Director::getInstance()->getVisibleSize().height -
sp->getContentSize().height/6);
cardSpriteInit(Director::getInstance()->getVisibleSize());
randSprite();
randSprite();
auto lisener = EventListenerTouchOneByOne::create();
lisener->onTouchBegan =
CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
lisener->onTouchMoved =
CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
lisener->onTouchEnded =
CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(lisener,
this);
auto lisenerKeyBord = EventListenerKeyboard::create();
lisenerKeyBord->onKeyPressed =
CC_CALLBACK_2(HelloWorld::onKeyPressed, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(lisenerKeyBord,
this);
_sorceLable =
LabelTTF::create(__String::createWithFormat("SORCE:%d",
0)->getCString(), "concols", 66);
_sorceLable->setPosition(Point(Director::getInstance()->getVisibleSize().width/2,50));
_sorceLable->setColor(Color3B(255, 23, 140));
addChild(_sorceLable);
LabelTTF * lable =
LabelTTF::create(__String::createWithFormat("you
fail")->getCString(), "concols", 100);
lable->setTag(6);
lable->setColor(Color3B(255, 0, 0));
lable->setPosition(Director::getInstance()->getVisibleSize().width
/ 2, Director::getInstance()->getVisibleSize().height / 2 +
60);
lable->setVisible(false);
addChild(lable);
// auto userItem = MenuItemImage::create(
// "bg.png",
// "bg.png",
// CC_CALLBACK_1(HelloWorld::menueCallback, this));
// addChild(userItem);
//
userItem->setPosition(Point(Director::getInstance()->getVisibleSize().width
/ 2, Director::getInstance()->getVisibleSize().height / 2 + 100)
return true;
}
void HelloWorld::menueCallback(Ref*ref)
{
}
void HelloWorld::cardSpriteInit(Size
size)
{
for (size_t i = 0; i < RWO; i++)
{
for (size_t j = 0; j < LIE; j++)
{
auto cardsprite = CardSprite::createSprite(0, 155, 155, j *
155 + 20, size.height - 155 - (i * 155));
cardsprite->setRow(i);
cardsprite->setLie(j);
_carSpriteAcrry[i][j] = cardsprite;
addChild(cardsprite);
}
}
}
void HelloWorld::randSprite()
{
bool isFaild = true;
for (size_t i = 0; i < RWO; i++)
{
for (size_t j = 0; j < LIE; j++){
if (_carSpriteAcrry[i][j]->getNum() <= 0){
isFaild = false;
}
}
}
if (isFaild)
return;
int i = rand() % 4;
int j = rand() % 4;
if (_carSpriteAcrry[i][j]->getNum() > 0)
{
randSprite();
}
else
{
_carSpriteAcrry[i][j]->setNum(2,true);
}
}
bool HelloWorld::checkFaile()
{
bool isFaild = true;
for (size_t i = 0; i < RWO; i++)
{
for (size_t j = 0; j < LIE; j++)
{
if (_carSpriteAcrry[i][j]->getNum() <= 0
|| (_carSpriteAcrry[i][j]->getNum() ==
_carSpriteAcrry[max(i + 1)][j]->getNum() && max(i + 1)
!= max(i))
|| (_carSpriteAcrry[i][j]->getNum() ==
_carSpriteAcrry[min(i - 1)][j]->getNum() && min(i - 1)
!= min(i))
|| (_carSpriteAcrry[i][j]->getNum() ==
_carSpriteAcrry[i][max(j + 1)]->getNum() && max(j + 1)
!= max(j))
||( _carSpriteAcrry[i][j]->getNum() ==
_carSpriteAcrry[i][min(j - 1)]->getNum()) && min(j-1) !=
min(j))
{
isFaild = false;
}
}
}
if (isFaild)
{
LabelTTF * lable =
dynamic_cast(this->getChildByTag(6));
lable->setVisible(true);
}
return isFaild;
}
int HelloWorld::min(int num)
{
if (num <0){ num = 0; }
return num;
}
int HelloWorld::max(int num)
{
if (num > 3){ num = 3; }
return num;
}
void HelloWorld::reStartGame()
{
LabelTTF * lable
=dynamic_cast(this->getChildByTag(6));
lable->setVisible(false);
for (size_t i = 0; i < RWO; i++)
{
for (size_t j = 0; j < LIE; j++)
{
_carSpriteAcrry[i][j]->setNum(0);
}
}
}
bool HelloWorld::onTouchBegan(Touch *touch, Event
*unused_event)
{
Vec2 pos =touch->getLocation();
_begainPosX = pos.x;
_begainPosY = pos.y;
return true;
}
void HelloWorld::onTouchMoved(Touch *touch, Event
*unused_event)
{
}
void HelloWorld::onTouchEnded(Touch *touch, Event
*unused_event)
{
Vec2 pos = touch->getLocation();
_endPosX = pos.x - _begainPosX;
_endPosY = pos.y - _begainPosY;
if (abs(_endPosX) > abs(_endPosY)){
if (_endPosX + 5 > 0){
moveRight();
}else{
moveLeft();
}
}
else if (abs(_endPosX) < abs(_endPosY)){
if (_endPosY + 5 > 0){
moveUp();
}else{
moveDw();
}
}
}
void HelloWorld::onKeyPressed(cocos2d::EventKeyboard::KeyCode
keyCode, cocos2d::Event* event)
{
switch (keyCode)
{
case cocos2d::EventKeyboard::KeyCode::KEY_W:
case cocos2d::EventKeyboard::KeyCode::KEY_CAPITAL_W:
case cocos2d::EventKeyboard::KeyCode::KEY_UP_ARROW:
moveUp();
break;
case cocos2d::EventKeyboard::KeyCode::KEY_S:
case cocos2d::EventKeyboard::KeyCode::KEY_CAPITAL_S:
case cocos2d::EventKeyboard::KeyCode::KEY_DOWN_ARROW:
moveDw();
break;
case cocos2d::EventKeyboard::KeyCode::KEY_A:
case cocos2d::EventKeyboard::KeyCode::KEY_CAPITAL_A:
case cocos2d::EventKeyboard::KeyCode::KEY_LEFT_ARROW:
moveLeft();
break;
case cocos2d::EventKeyboard::KeyCode::KEY_D:
case cocos2d::EventKeyboard::KeyCode::KEY_CAPITAL_D:
case cocos2d::EventKeyboard::KeyCode::KEY_RIGHT_ARROW:
moveRight();
break;
default:
break;
}
}
void HelloWorld::moveLeft()
{
bool israndom = false;
for (int i = 0; i < 4;i ++)
{
for (int j = 0; j <4; j++)
{
for (int moveJ = j+1; moveJ < 4; moveJ++)
{
if (_carSpriteAcrry[i][moveJ]->getNum() > 0)
{
if (_carSpriteAcrry[i][j]->getNum() <= 0)
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[i][moveJ]->getNum());
_carSpriteAcrry[i][moveJ]->setNum(0);
j --;
israndom = true;
}
else if (_carSpriteAcrry[i][moveJ]->getNum() ==
_carSpriteAcrry[i][j]->getNum())
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[i][j]->getNum()
* 2);
_carSpriteAcrry[i][moveJ]->setNum(0);
updateSorce(_carSpriteAcrry[i][j]->getNum());
israndom = true;
}
break;
}
}
}
}
if (israndom){
randSprite();
}
checkFaile();
log("moveLeft");
}
void HelloWorld::moveRight()
{
bool israndom = false;
for (int i = 0; i < 4; i++)
{
for (int j = 3; j >=0; j--)
{
for (int moveJ = j - 1; moveJ >= 0; moveJ--)
{
if (_carSpriteAcrry[i][moveJ]->getNum() > 0)
{
if (_carSpriteAcrry[i][j]->getNum() <= 0)
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[i][moveJ]->getNum());
_carSpriteAcrry[i][moveJ]->setNum(0);
j++;
israndom = true;
}
else if (_carSpriteAcrry[i][moveJ]->getNum() ==
_carSpriteAcrry[i][j]->getNum())
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[i][j]->getNum()
* 2);
_carSpriteAcrry[i][moveJ]->setNum(0);
updateSorce(_carSpriteAcrry[i][j]->getNum());
israndom = true;
}
break;
}
}
}
}
if (israndom){
randSprite();
}
checkFaile();
log("moveRight");
}
void HelloWorld::moveUp()
{
bool israndom = false;
for (int j = 0; j < 4; j++)
{
for (int i = 0; i <4; i++)
{
for (int moveI = i+1; moveI < 4; moveI ++)
{
if (_carSpriteAcrry[moveI][j]->getNum() > 0)
{
if (_carSpriteAcrry[i][j]->getNum() <= 0)
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[moveI][j]->getNum());
_carSpriteAcrry[moveI][j]->setNum(0);
i --;
israndom = true;
}
else if (_carSpriteAcrry[i][j]->getNum() ==
_carSpriteAcrry[moveI][j]->getNum())
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[i][j]->getNum()
* 2);
_carSpriteAcrry[moveI][j]->setNum(0);
updateSorce(_carSpriteAcrry[i][j]->getNum());
israndom = true;
}
break;
}
}
}
}
if (israndom){
randSprite();
}
checkFaile();
log("moveUp");
}
void HelloWorld::moveDw()
{
bool israndom = false;
for (int j = 0; j < 4; j++)
{
for (int i = 3; i >=0; i --)
{
for (int moveI = i - 1; moveI >= 0; moveI--)
{
if (_carSpriteAcrry[moveI][j]->getNum() > 0)
{
if (_carSpriteAcrry[i][j]->getNum() <=0)
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[moveI][j]->getNum());
_carSpriteAcrry[moveI][j]->setNum(0);
i++;
israndom = true;
}
else if (_carSpriteAcrry[i][j]->getNum() ==
_carSpriteAcrry[moveI][j]->getNum())
{
_carSpriteAcrry[i][j]->setNum(_carSpriteAcrry[i][j]->getNum()
* 2);
_carSpriteAcrry[moveI][j]->setNum(0);
updateSorce(_carSpriteAcrry[i][j]->getNum());
israndom = true;
}
break;
}
}
}
}
if (israndom){
randSprite();
}
checkFaile();
log("moveDw");
}
void HelloWorld::updateSorce(int sorce)
{
_sorce += sorce;
_sorceLable->setString(__String::createWithFormat("SORCE:%d",
_sorce)->getCString());
}