你的位置:首页 > 操作系统

[操作系统]分享一个《连连看》的小游戏,cocos2dx版本


先上效果图:

  



在设计算法上还是很值得钻研一下的!不过我自己实在是没有什么耐心了,就扔下不管了!
没有做好,就先这样吧
再贴一下代码:
#include "GameScene.h"GameScene::GameScene(void){  this->selected = -1;}GameScene::~GameScene(void){}bool GameScene::init(){  CCSize base_coord = CCSize(570,46);  CCLayer::init();  CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();  this->background = CCSprite::create("board.png");  this->background->setPosition(CCSize(visibleSize.width/2,visibleSize.height/2));  this->addChild(this->background);  for(int i=0;i<8;i++)  {    for(int j=0;j<8;j++)    {      ItemNode* node = new ItemNode(this,i*8 + j);      node->init();      node->setPosition(CCSize(base_coord.width + (node->getContentSize().width + 2) * i ,base_coord.height + (node->getContentSize().height + 2) * j));            this->addChild(node);      this->item_vect.push_back(node);    }  }  return true;}void GameScene::update(float tick){}void GameScene::set_selected(int id){  if(this->selected != -1)  {    ItemNode* node = this->item_vect[this->selected];    if(node != NULL)    {      node->un_select();    }    ItemNode* new_node = this->item_vect[id];    if(node->get_index() == new_node->get_index() && this->is_node_reach(id,selected))    {      new_node->setVisible(false);      node->setVisible(false);      this->selected = -1;      return ;    }  }    this->selected = id;}int GameScene::get_selected(){  return this->selected;}bool GameScene::is_node_reach(int start,int end){  if(start == end)  {    return false;  }  int start_x = start/8;  int start_y = start%8;  int end_x = end/8;  int end_y = end%8;  int result = 0;  result = abs(start_x - end_x) + abs(start_y - end_y);  if(result == 1)  {    return true;  }  if(start_x == end_x)  {    if(start_y > end_y)    {      int temp = start_y;      start_y = end_y;      end_y = temp;    }    bool is_reach = true;    for( int i = start_y + 1 ; i < end_y ; i++)    {      ItemNode* node = this->item_vect[start_x * 8 + i];      if(node->isVisible())      {        is_reach = false;      }    }    if(is_reach)    {      return true;    }      }  if(start_y == end_y)  {    bool is_reach = true;    if(start_x > end_x)    {      int temp = start_x;      start_x = end_x;      end_x = temp;    }    for(int i = start_x + 1 ; i < end_x ; i++)    {      ItemNode* node = this->item_vect[i*8 + start_y];      if(node->isVisible())      {        is_reach = false;      }    }    if(is_reach)    {      return true;    }  }  {    //检测 拐角    //start_x,start_y  //end_x,end_y        //start_x,end_y    //end_x,start_y    if(is_coord_reach(start_x,start_y,end_x,end_y))    {      return true;    }      }  return false;}bool GameScene::is_coord_reach(int start_x,int start_y,int end_x,int end_y){  if(start_x > end_x)  {    int temp = start_x;    start_x = end_x;    end_x = temp;  }  if(start_y > end_y)  {    int temp = start_y;    start_y = end_y;    end_y = temp;  }  {    bool is_reach = true;    for(int i=start_x + 1;i < end_x;i++)    {      ItemNode* node = this->item_vect[i*8 + start_y];        if(node->isVisible())      {        is_reach = false;      }    }    for(int i = start_y + 1;i<end_y;i++)    {      ItemNode* node = this->item_vect[end_x*8 + i];      if(node->isVisible())      {        is_reach = false;      }    }    if(is_reach)    {      return true;    }  }  {    bool is_reach = true;    for(int i=start_y+1;i < end_y;i++)    {      ItemNode* node = this->item_vect[start_x*8 + i];      if(node->isVisible())      {        is_reach = false;      }    }    for(int i=start_x+1;i < end_x;i++)    {      ItemNode* node = this->item_vect[i*8 + end_y];      if(node->isVisible())      {        is_reach = false;      }    }    if(is_reach)    {      return true;    }  }  return false;}bool GameScene::is_coord_reach_i(int start_x,int start_y,int end_x,int end_y){  return true;}#include "ItemNode.h"#include "GameStruct.h"#include "GameScene.h"ItemNode::ItemNode(GameScene* scene,int id){  this->scene = scene;  this->index = 0;  this->image = NULL;  this->background = NULL;  this->id = id;}ItemNode::~ItemNode(void){}bool ItemNode::init(){  CCNode::init();    this->index = rand()%7;  this->image = CCSprite::create(item_file_name[this->index].c_str());  CCSize item_size = this->image->getContentSize();  this->setContentSize(item_size);  this->image->setPosition(CCSize(item_size.width/2,item_size.height/2));  this->addChild(this->image);  return true;}void ItemNode::onEnter(){  CCDirector* pDirector = CCDirector::sharedDirector();  pDirector->getTouchDispatcher()->addTargetedDelegate(this, -128, false);  CCNode::onEnter();}void ItemNode::onExit(){  CCDirector* pDirector = CCDirector::sharedDirector();  pDirector->getTouchDispatcher()->removeDelegate(this);  CCNode::onExit();}int ItemNode::get_index(){  return this->index;}void ItemNode::selected(){  this->background = CCSprite::create("selector.png");  this->background->setPosition(CCSize(background->getContentSize().width/2,background->getContentSize().height/2));  this->addChild(this->background);}void ItemNode::un_select(){  if(this->background != NULL)  {    this->removeChild(this->background);  }}bool ItemNode::is_in_sprite(CCTouch* touch){  CCPoint touchPoint = touch->getLocation();  CCPoint reallyPoint = this->convertToNodeSpace(touchPoint);  CCRect rect = this->boundingBox();    if(rect.containsPoint(touchPoint))  {    return true;  }  return false;}bool ItemNode::ccTouchBegan(CCTouch* touch, CCEvent* event){  if(this->isVisible())  {    if(this->is_in_sprite(touch))    {      this->scene->set_selected(this->id);      this->selected();    }  }  return true;}void ItemNode::ccTouchMoved(CCTouch* touch, CCEvent* event){  }void ItemNode::ccTouchEnded(CCTouch* touch, CCEvent* event){}

不能再这样写了,准备去谈几个生意了!做赚钱的东西!