自己写的一个小游戏!
总共有八张,(当然可以更多咯!)点一下就翻过来,如果有两个一样的就消掉!
首先自己写了一个类,主要包含了以个结构!头文件如下:
#ifndef __CARD_H__
#define __CARD_H__
#include "cocos2d.h"
class Card
{
public:
Card();
~Card();
public:
cocos2d::CCSprite* FrontSprite;//前面的精灵
cocos2d::CCSprite* EndSprite;//后面的精灵
cocos2d::CCRect rect;//精灵的区域
};
#endif //__CARD_H__
#include "Card.h"
Card::Card(){
}
Card::~Card(){
}
头文件:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "../extensions/GUI/CCControlExtension/CCControlSlider.h"
#include "cocos2d.h"
#include "Card.h"
USING_NS_CC;
USING_NS_CC_EXT;
using namespace std;
class HelloWorld : public cocos2d::CCLayer
{
public:
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
void myinit();
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::CCScene* scene();
// a selector callback
void menuCloseCallback(CCObject* pSender);
void changescene(CCObject* pSender);
// implement the "static node()" method manually
CREATE_FUNC(HelloWorld);
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
virtual void onEnter();
virtual void onExit();
void update(float t);
void Show(CCNode * node);
void Conceal(CCNode* node);
public:
list<Card> mycard; //牌链表
int mycount;
CCSprite* mysprite[2];
bool istwo;
CCControlSlider* slider;
int count_down;
};
#endif // __HELLOWORLD_SCENE_H__
cpp
#include "HelloWorldScene.h"
USING_NS_CC;
USING_NS_CC_EXT;
CCScene* HelloWorld::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HelloWorld *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()
{
//
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
/
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
// add a "close" icon to exit the progress. it's an autorelease object
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
origin.y + pCloseItem->getContentSize().height/2));
// create menu, it's an autorelease object
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);
/
// 3. add your codes below...
// add a label shows "Hello World"
// create and initialize a label
// add "HelloWorld" splash screen"
CCSprite* pSprite = CCSprite::create("wu.jpg");
// position the sprite on the center of the screen
pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(pSprite, 0);
CCMenuItemFont * fontitem=CCMenuItemFont::create("turn 2",this,menu_selector(HelloWorld::changescene));
fontitem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2, 20));
CCMenu* turnmenu = CCMenu::create(fontitem, NULL);
turnmenu->setPosition(CCPointZero);
this->addChild(turnmenu, 1);
myinit();
istwo = true;
mycount = 0;
this->setTouchEnabled(true);
/*------------------------------------------------------------*/
slider = CCControlSlider::create(
"200.jpg","300.jpg","sliderThumb2.png");
count_down = 20;
slider->setPosition(ccp(240,290));
slider->setMinimumValue(0);
slider->setMaximumValue(count_down);
slider->setValue(20);
slider->setTouchEnabled(false);
this->addChild(slider,1);
/*------------------------------------------------------------*/
schedule(schedule_selector(HelloWorld::update),1.0f);
return true;
}
void HelloWorld::update(float t){
if (count_down == 0 )
{
this->unschedule(schedule_selector(HelloWorld::update));
return;
}
count_down--;
slider->setValue(count_down);
}
void HelloWorld::changescene(CCObject* pSender){
CCScene * scene2=HelloWorld::scene();
CCTransitionJumpZoom切换方式
CCTransitionScene * s10=CCTransitionJumpZoom::create(2,scene2);
CCDirector::sharedDirector()->replaceScene(s10);
}
void HelloWorld::myinit(){
srand(time(NULL));
int a[8] = {1,1,2,2,3,3,4,4};
int b[8] = {0};
int x = 10;
int y = 200;
char str[20] = {0};
for (int i = 0;i < 8;i++)
{
int num = 0;
while (1)
{
num = rand()%8;
if (b[num] == 0)
{
b[num] = 1;
num = a[num];
break;
}else{
continue;
}
}
if (i <= 3)
{
x += 90;
}else if (i == 4)
{
y -= 100;
}else{
x -= 90;
}
sprintf(str,"%d.jpg",num);
mycard.push_back(Card());
mycard.back().FrontSprite = CCSprite::create("11.jpg");
mycard.back().rect = CCRect(x,y,75,75);
mycard.back().EndSprite = CCSprite::create(str);
mycard.back().FrontSprite->setPosition(ccp(x + 75/2.0,
y + 75/2.0));
addChild(mycard.back().FrontSprite);
mycard.back().EndSprite->setPosition(ccp(x + 75/2.0,
y + 75/2.0));
addChild(mycard.back().EndSprite,1,num);
mycard.back().EndSprite->setVisible(false);
}
}
int mynum = 0;
bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){
return true;
}
void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){
}
void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){
if (mynum == 2)
{
return;
}
float time;
CCPoint point = pTouch->getLocationInView();
point = CCDirector::sharedDirector()->convertToGL(point);
list<Card>::iterator it = mycard.begin();
for (;it != mycard.end();it++)
{
if ((*it).rect.containsPoint(point))
{
if (mycount%2 == 1)
{
mysprite[0] = (*it).EndSprite;
time = 1;
}else{
mysprite[1] = (*it).EndSprite;
time = 1;
}
CCFiniteTimeAction* ShowSprite = CCCallFuncN::create(this,
callfuncN_selector(HelloWorld::Show));
CCDelayTime* LoadTime = CCDelayTime::create(time);
CCFiniteTimeAction* ConcealSprite = CCCallFuncN::create(this,
callfuncN_selector(HelloWorld::Conceal));
mycount++;
if (mycount%2 ==0)
{
mynum = 2;
}
(*it).EndSprite->runAction(CCSequence::create(ShowSprite,LoadTime,ConcealSprite,NULL));
break;
}
}
}
void HelloWorld::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent){
}
void HelloWorld::Show(CCNode * node){
CCSprite* sprite = (CCSprite*)node;
sprite->setVisible(true);
}
void HelloWorld::Conceal(CCNode* node){
CCSprite* sprite = (CCSprite*)node;
if (sprite != NULL)
{
sprite->setVisible(false);
}
if (mycount%2 == 0 && mysprite[0]->getTag() == mysprite[1]->getTag() && mysprite[0] != mysprite[1])
{
list<Card>::iterator it = mycard.begin();
int i = 0;
for (it = mycard.begin();it != mycard.end();it++){
if ((*it).EndSprite == mysprite[0] )
{
removeChild((*it).EndSprite,true);
removeChild((*it).FrontSprite,true);
(*it).EndSprite = NULL;
(*it).FrontSprite = NULL;
mycard.erase(it);
break;
}
}
for (it = mycard.begin();it != mycard.end();it++){
if ( (*it).EndSprite == mysprite[1])
{
removeChild((*it).EndSprite,true);
removeChild((*it).FrontSprite,true);
(*it).EndSprite = NULL;
(*it).FrontSprite = NULL;
mycard.erase(it);
break;
}
}
}
if (mycount%2== 0)
{
mynum = 0;
}
}
void HelloWorld::onEnter(){
//开启触屏监听;
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,false);
CCLayer::onEnter();
}
void HelloWorld::onExit(){
//关闭触屏监听;
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCLayer::onExit();
}
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
#endif
}
资源下载:http://pan.baidu.com/s/106Yrf