首页 > 代码库 > 【24点游戏】cocos2dx 源码
【24点游戏】cocos2dx 源码
1. 4个数字 24点判断
double Calc(double a, double b, string oper){ double result = 0; const char *p = oper.c_str(); if (p != NULL) { switch (*p) { case ‘+‘: result = a + b; break; case ‘-‘: result = a - b; break; case ‘*‘: result = a * b; break; case ‘/‘: result = a / b; break; default: result = 0; break; } } return result;}int main(int argc,char* argv[]) { #if 0 int value; value=http://www.mamicode.com/cal(); "the result is:%d\n",value); int src[]={8, 8, 8, 1}; printf(" %d \n",calc(src)); //getchar();#endif //----------------------------------- double nums[] = { 8, 8, 8, 1 }; string x = "", y = "", z = ""; double a = 0, b = 0, c = 0, d = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { x = i == 0 ? "+" : i == 1 ? "-" : i == 2 ? "*" : "/"; y = j == 0 ? "+" : j == 1 ? "-" : j == 2 ? "*" : "/"; z = k == 0 ? "+" : k == 1 ? "-" : k == 2 ? "*" : "/"; for (int ia = 0; ia < 4; ia++) { a = nums[ia]; for (int ib = 0; ib < 4; ib++) { if (ia == ib) { continue; } b = nums[ib]; for (int ic = 0; ic < 4; ic++) { if (ic == ia || ic == ib) { continue; } c = nums[ic]; d = nums[6 - ia - ib - ic]; if (abs(Calc(Calc(a, b, x), Calc(c, d, z), y) - (double)24) < 0.01) { printf("(%f %s %f) %s ( %f %s %f) = 24 \n", a, x.c_str(), b, y.c_str(), c, z.c_str(), d); break; } if (abs(Calc(Calc(Calc(a, b, x), c, y), d, z) - (double)24) < 0.01) { printf("((%f %s %f)%s %f)%s %f = 24 \n", a, x.c_str(), b, y.c_str(), c, z.c_str(), d); break; } if (abs(Calc(Calc(a, Calc(b, c, y), x), d, z) - (double)24) < 0.01) { printf("(%f %s (%f %s %f)) %s %f = 24 \n",a, x.c_str(), b, y.c_str(), c, z.c_str(), d); break; } if (abs(Calc(a, Calc(b, Calc(c, d, z), y), x) - (double)24) < 0.01) { printf("%f %s (%f %s (%f %s %f)) = 24 \n", a, x.c_str(), b, y.c_str(), c, z.c_str(), d); break; //System.Console.WriteLine(Math.Abs(Calc(a, Calc(b, Calc(c, d, z), y), x))); } if (abs(Calc(a, Calc(Calc(b, c, y), d, z), x) - (double)24) < 0.01) { printf("%f %s ((%f %s %f)%s %f) = 24 \n", a, x.c_str(), b, y.c_str(), c, z.c_str(), d); break; } } } } } } } getchar(); return 0; }
1. HelloWorldScene.h
#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"#include "Box2D/Box2D.h"#include "MenuLayer.h"#include "SimpleAudioEngine.h"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(); // there‘s no ‘id‘ in cpp, so we recommand to return the exactly class pointer static cocos2d::CCScene* scene(); // a selector callback virtual void menuStartCallback(CCObject* pSender); // implement the "static node()" method manually LAYER_NODE_FUNC(HelloWorld);};#endif // __HELLOWORLD_SCENE_H__
3. helloworldscene.cpp
#include "HelloWorldScene.h"#include "MenuLayer.h"using namespace cocos2d;CCScene* HelloWorld::scene(){ CCScene * scene = NULL; do { // ‘scene‘ is an autorelease object scene = CCScene::node(); CC_BREAK_IF(! scene); // ‘layer‘ is an autorelease object HelloWorld *layer = HelloWorld::node(); CC_BREAK_IF(! layer); // add layer as a child to scene scene->addChild(layer); } while (0); // return the scene return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){ bool bRet = false; do { ////////////////////////////////////////////////////////////////////////// // super init first ////////////////////////////////////////////////////////////////////////// CC_BREAK_IF(! CCLayer::init()); ////////////////////////////////////////////////////////////////////////// // add your codes below... ////////////////////////////////////////////////////////////////////////// CCSize mysize = CCDirector::sharedDirector()->getWinSize(); MenuLayerMainMenu *MyMenu = new MenuLayerMainMenu(); this->addChild(MyMenu); bRet = true; } while (0); return bRet;}void HelloWorld::menuStartCallback(CCObject* pSender){ CCLog("1234");}
4.menuLayer.h
#ifndef __MENULAYER_H__#define __MENULAYER_H__#include "cocos2d.h"using namespace cocos2d;class MenuLayerMainMenu : public CCLayer{public: MenuLayerMainMenu(); ~MenuLayerMainMenu() { }public: virtual void menuCallbackEnable(CCObject* pSender);};#endif
5. menuLayer.cpp
#include "cocos2d.h"#include "MenuLayer.h"#include "HelloWorldScene.h"#include "GameScene.h"MenuLayerMainMenu::MenuLayerMainMenu(){ CCSize size = CCDirector::sharedDirector()->getWinSize(); // Font Item CCMenuItemFont *itemFont = CCMenuItemFont::itemWithString("Start Game", this, menu_selector(MenuLayerMainMenu::menuCallbackEnable) ); itemFont->setFontSizeObj(20); itemFont->setFontName("Marker Felt"); itemFont->setColor( ccc3(200,200,255) ); itemFont->setPosition(ccp(size.width/2,size.height/2)); CCMenu* menu = CCMenu::menuWithItems(itemFont, NULL); addChild(menu); menu->setPosition(CCPointZero);}void MenuLayerMainMenu::menuCallbackEnable(CCObject* pSender){ CCLog("1234"); CCScene *s=GameScene::scene(); CCDirector::sharedDirector()->replaceScene(s); }
6. poker.h
#ifndef _POKER_H_#define _POKER_H_#include "cocos2d.h"using namespace cocos2d;class PokerSprite:public CCSprite{public: PokerSprite(); static PokerSprite* createPokerSprite(int number,float pointx,float pointy,int width,int height); void setPokerRect(const CCRect& rect); CCRect& GetPokerRect(); int getNumber(); void setNumber(int number); // LAYER_NODE_FUNC(HelloWorld);private: int m_number; CCLabelTTF* m_lablenumber; CCLayerColor* m_layercolor; CCRect PokerRect; void initPokerSprite(int number,float pointx,float pointy,int width,int height);};#endif // !_SQUARE_SPRITE_H_
7. poker.cpp
#include "Poker.h"PokerSprite::PokerSprite():m_number(0),m_lablenumber(NULL),m_layercolor(NULL){}PokerSprite* PokerSprite::createPokerSprite(int number,float pointx,float pointy,int width,int height){ PokerSprite *pSprite = new PokerSprite(); if (pSprite && pSprite->init()) { pSprite->autorelease(); pSprite->initPokerSprite( number, pointx, pointy, width, height); return pSprite; } CC_SAFE_DELETE(pSprite); return NULL;}int PokerSprite::getNumber(){ return m_number;}void PokerSprite::setNumber(int number){ m_number=number; m_lablenumber->setString(""); m_layercolor->setColor(ccc3(200,190,180)); if (m_number>0) { CCString Poker ; Poker.initWithFormat("%i",m_number); m_lablenumber->setString(Poker.getCString()); }}void PokerSprite::setPokerRect(const CCRect& rect){ PokerRect = rect;}CCRect& PokerSprite::GetPokerRect(){ return PokerRect;}void PokerSprite::initPokerSprite(int number,float pointx,float pointy,int width,int height){ m_number=number; m_layercolor=CCLayerColor::layerWithColor(ccc4(200,190,180,255),width,height); m_layercolor->setPosition(ccp(pointx,pointy)); this->addChild(m_layercolor); //创建字体 m_lablenumber=CCLabelTTF::labelWithString("","arial.ttf",50); m_lablenumber->setColor(ccc3(0,0,0)); m_lablenumber->setPosition(ccp(m_layercolor->getContentSize().width/2,m_layercolor->getContentSize().height/2)); m_layercolor->addChild(m_lablenumber); setNumber(number); CCRect PokerRect = CCRect(pointx, pointy, width, height); setPokerRect(PokerRect);}
8. GameScene.h
#ifndef __GAME_SCENCE_H__#define __GAME_SCENCE_H__#include "cocos2d.h"#include "Poker.h"class GameScene : public cocos2d::CCLayer{public: virtual bool init(); virtual void registerWithTouchDispatcher(); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); static cocos2d::CCScene* scene();public: virtual void menuCallbackSUBMIT(CCObject* pSender); virtual void menuCallbackNEXT(CCObject* pSender); virtual void menuCallbackPLUS(CCObject* pSender); virtual void menuCallbackDEC(CCObject* pSender); virtual void menuCallbackMULTIPLY(CCObject* pSender); virtual void menuCallbackDIVIDE(CCObject* pSender); virtual void menuCallbackLBracket(CCObject* pSender); virtual void menuCallbackRBracket(CCObject* pSender); virtual void menuCallbackDEL(CCObject* pSender); PokerSprite* m_PokerSquares[4]; LAYER_NODE_FUNC(GameScene);public: int PokerNum[4];};#endif
9. GameScene.cpp
#include "cocos2d.h"#include "GameScene.h"#include "Poker.h"#define LABEL_IN_PUT 1int add_fun(int x,int y){return x+y;} int sub_fun(int x,int y){return x-y;} int mul_fun(int x,int y){return x*y;} int div_fun(int x,int y){return x/y;} int (*func[])(int ,int)={add_fun,sub_fun,mul_fun,div_fun}; int num,curch; char chtbl[]="+-*/()="; char corch[]="+-*/()=0123456789"; char * test = NULL;int getid() { int i; if(*test>=‘0‘&& *test<=‘9‘) { for(num=0;*test>=‘0‘&&*test<=‘9‘;test++) num=10*num+(*test-‘0‘); return -1; } else { for(i=0;chtbl[i];i++) if(chtbl[i]==*test) break; if(i<=5) test++; return i; } } int cal() { int x1,x2,x3,op1,op2,i; i=getid(); if(i==4) x1=cal(); else x1=num; op1=getid(); if(op1>=5) return x1; i=getid(); if(i==4) x2=cal(); else x2=num; op2=getid(); while(op2!=6 && op2!= 5) { i=getid(); if(i==4) x3=cal(); else x3=num; if((op1/2==0)&&(op2/2==1)) x2=(*func[op2])(x2,x3); else { x1=(*func[op1])(x1,x2); x2=x3; op1=op2; } op2=getid(); } return (*func[op1])(x1,x2); } bool GameScene::init(){ bool ret=false; do { CC_BREAK_IF(!CCLayer::init()); /* 设置允许触屏事件 */ this->setIsTouchEnabled(true); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); int SquareSize=(winSize.width-10*5)/4; CCLayerColor* layerColorBG= CCLayerColor::layerWithColor(ccc4(180,170,160,255)); this->addChild(layerColorBG,0); for (int x = 0; x < 4; x++) { int randNum = rand() % 13; randNum++; //PokerNum[x] = randNum; PokerSprite* pSquareSprite=PokerSprite::createPokerSprite(randNum,(winSize.width - SquareSize*4)/2 + (x) * (SquareSize),winSize.height - SquareSize ,SquareSize,SquareSize); m_PokerSquares[x] = pSquareSprite; this->addChild(pSquareSprite); } /* 下一题按钮 */ CCMenuItemFont *itemNEXT = CCMenuItemFont::itemWithString("NEXT", this, menu_selector(GameScene::menuCallbackNEXT) ); itemNEXT->setFontSizeObj(25); itemNEXT->setFontName("Marker Felt"); itemNEXT->setColor( ccc3(0,0,0) ); itemNEXT->setPosition(ccp(winSize.width / 2 + 100,winSize.height/5)); /* 提交按钮 */ CCMenuItemFont *itemSUBMIT = CCMenuItemFont::itemWithString("SUBMIT", this, menu_selector(GameScene::menuCallbackSUBMIT) ); itemSUBMIT->setFontSizeObj(25); itemSUBMIT->setFontName("Marker Felt"); itemSUBMIT->setColor( ccc3(0,0,0) ); itemSUBMIT->setPosition(ccp(winSize.width / 2 + 200,winSize.height/5)); /* + - * / ( ) 按钮 */ CCMenuItemFont *itemPLUS = CCMenuItemFont::itemWithString(" + ", this, menu_selector(GameScene::menuCallbackPLUS) ); itemPLUS->setColor( ccc3(0,0,0) ); itemPLUS->setPosition(ccp(20,winSize.height/5)); CCMenuItemFont *itemDEC = CCMenuItemFont::itemWithString(" - ", this, menu_selector(GameScene::menuCallbackDEC) ); itemDEC->setColor( ccc3(0,0,0) ); itemDEC->setPosition(ccp(70,winSize.height/5)); CCMenuItemFont *itemMULTIPLY = CCMenuItemFont::itemWithString(" * ", this, menu_selector(GameScene::menuCallbackMULTIPLY) ); itemMULTIPLY->setColor( ccc3(0,0,0) ); itemMULTIPLY->setPosition(ccp(120,winSize.height/5)); CCMenuItemFont *itemDIVIDE = CCMenuItemFont::itemWithString(" / ", this, menu_selector(GameScene::menuCallbackDIVIDE) ); itemDIVIDE->setColor( ccc3(0,0,0) ); itemDIVIDE->setPosition(ccp(170,winSize.height/5)); CCMenuItemFont *itemLBracket = CCMenuItemFont::itemWithString(" ( ", this, menu_selector(GameScene::menuCallbackLBracket) ); itemLBracket->setColor( ccc3(0,0,0) ); itemLBracket->setPosition(ccp(220,winSize.height/5)); CCMenuItemFont *itemRBracket = CCMenuItemFont::itemWithString(" ) ", this, menu_selector(GameScene::menuCallbackRBracket) ); itemRBracket->setColor( ccc3(0,0,0) ); itemRBracket->setPosition(ccp(270,winSize.height/5)); CCMenuItemFont *itemDEL = CCMenuItemFont::itemWithString(" Clean ", this, menu_selector(GameScene::menuCallbackDEL) ); itemDEL->setFontSizeObj(20); itemDEL->setColor( ccc3(0,0,0) ); itemDEL->setPosition(ccp(winSize.width - 30, winSize.height/2)); CCMenu* menu = CCMenu::menuWithItems(itemNEXT,itemSUBMIT,itemPLUS,itemDEC,itemMULTIPLY,itemDIVIDE,itemLBracket,itemRBracket,itemDEL, NULL); this->addChild(menu); menu->setPosition(CCPointZero); /* 静态文本框 */ CCLabelTTF* label = CCLabelTTF::labelWithString("", "Arial", 30); addChild(label, 1, LABEL_IN_PUT); label->setPosition( ccp(winSize.width/2, winSize.height/2) ); ret=true; }while(0); return ret;}CCScene* GameScene::scene(){ CCScene *scene=NULL; do { scene=CCScene::node(); CC_BREAK_IF(!scene); GameScene *my=GameScene::node();//需要定义CREATE_FUNC(MyLayer)宏 CC_BREAK_IF(!my); scene->addChild(my); }while(0); return scene;}void GameScene::menuCallbackDEL(CCObject* pSender){ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); label->setString("");}void GameScene::menuCallbackNEXT(CCObject* pSender){ for (int x = 0; x < 4; x++) { int randNum = rand() % 13; randNum++; //PokerNum[x] = randNum; m_PokerSquares[x]->setNumber(randNum); } CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); label->setString("");}void GameScene::menuCallbackSUBMIT(CCObject* pSender){ /* 计算值 */ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 2); TempString = strcpy(TempString, StringALready); *(TempString + size ) = ‘=‘; *(TempString + size + 1 ) = ‘\0‘; test = TempString; int value = http://www.mamicode.com/cal();"%d",value);}/* +按钮回调函数 */void GameScene::menuCallbackPLUS(CCObject* pSender){ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 2); TempString = strcpy(TempString, StringALready); *(TempString + size ) = ‘+‘; *(TempString + size + 1 ) = ‘\0‘; label->setString(TempString);}/* -按钮回调函数 */void GameScene::menuCallbackDEC(CCObject* pSender){ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 2); TempString = strcpy(TempString, StringALready); *(TempString + size ) = ‘-‘; *(TempString + size + 1 ) = ‘\0‘; label->setString(TempString);}/* *按钮回调函数 */void GameScene::menuCallbackMULTIPLY(CCObject* pSender){ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 2); TempString = strcpy(TempString, StringALready); *(TempString + size ) = ‘*‘; *(TempString + size + 1 ) = ‘\0‘; label->setString(TempString);}/* /按钮回调函数 */void GameScene::menuCallbackDIVIDE(CCObject* pSender){ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 2); TempString = strcpy(TempString, StringALready); *(TempString + size ) = ‘/‘; *(TempString + size + 1 ) = ‘\0‘; label->setString(TempString);}/* (按钮回调函数 */void GameScene::menuCallbackLBracket(CCObject* pSender){ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 2); TempString = strcpy(TempString, StringALready); *(TempString + size ) = ‘(‘; *(TempString + size + 1 ) = ‘\0‘; label->setString(TempString);}/* )按钮回调函数 */void GameScene::menuCallbackRBracket(CCObject* pSender){ CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 2); TempString = strcpy(TempString, StringALready); *(TempString + size ) = ‘)‘; *(TempString + size + 1 ) = ‘\0‘; label->setString(TempString);}bool GameScene::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){ //CCLog("Began"); return true;}void itoa(int i,char*string){ int power,j; j=i; for(power=1;j>=10;j/=10) power*=10; for(;power>0;power/=10) { *string++=‘0‘+i/power; i%=power; } *string=‘\0‘;}void GameScene::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){ /* 获取POKER的数字 并添加到文本框 */ CCPoint touchPoint=convertTouchToNodeSpace(pTouch); for (int x = 0; x < 4; x++) { CCRect temp = m_PokerSquares[x]->getTextureRect(); if(m_PokerSquares[x]->boundingBox().CCRectContainsPoint(m_PokerSquares[x]->GetPokerRect(),touchPoint)) { char * Temp = (char*)malloc(10); int num = m_PokerSquares[x]->getNumber(); itoa(num, Temp); CCLog(Temp); CCLabelTTF* label = (CCLabelTTF*)getChildByTag(LABEL_IN_PUT); const char * StringALready = label->getString(); int size = strlen(StringALready); char * TempString = (char *)malloc(size + 3); TempString = strcpy(TempString, StringALready); if (num >0 && num <= 9) { *(TempString + size ) = ‘0‘ + num; *(TempString + size + 1 ) = ‘\0‘; } else { *(TempString + size ) = ‘0‘ + (num / 10); *(TempString + size + 1 ) = ‘0‘ + (num % 10); *(TempString + size + 2 ) = ‘\0‘; } label->setString(TempString); } } // CCLog("%f %f",touchPoint.x, touchPoint.y);}void GameScene::registerWithTouchDispatcher(){ /* 注册触屏事件 */ CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);}
【24点游戏】cocos2dx 源码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。