void SceneGame::CheckRecv(float) { if (Net::isRecvComplete()) { int len; char* data = Net::RecvData(len); unschedule(schedule_selector(SceneGame::CheckRecv)); // 悔棋 if (data[0] == 3) { doRegret2(); // 继续接收 Net::RecvStart(); schedule(schedule_selector(SceneGame::CheckRecv)); } // 选棋 else if (data[0] == 1) { _selectid = data[1]; _selectSprite->setPosition(_s[_selectid]->fromPlate()); _selectSprite->setVisible(true); // 继续接收 Net::RecvStart(); schedule(schedule_selector(SceneGame::CheckRecv)); } else if (data[0] == 2) { // 接受移动信息 Stone* s = _s[data[1]]; int row = 9 - data[2]; int col = 8 - data[3]; int killid = Common::getStoneFromRowCol(row, col, _s); // 记录走棋信息 recordStep(_selectid, killid, _s[_selectid]->_row, _s[_selectid]->_col, row, col); // 移动棋子 s->_row = row; s->_col = col; s->setPosition(s->fromPlate()); // 杀死棋子 if (killid != -1) { Stone* ks = _s[killid]; ks->_dead = true; ks->setVisible(false); } // 更新数据 _selectid = -1; _selectSprite->setVisible(false); _bRedTurn = !_bRedTurn; } } }
void SceneGame::Regret(CCObject*) { // 轮到谁走,谁有权点悔棋,不然不能点 if (_bRedSide != _bRedTurn) return; // 走棋还没走两步,不让悔棋 if (_steps.size() < 2) return; doRegret2(); // 发送信息 char buf = 3; Net::Send(&buf, 1); }
void SceneGame::Regret(Ref*) { /* for (int i = 0;i < 2;++i) { if (_steps->size() == 0) return; Step* step = *(_steps->rbegin()); _steps->pop_back(); Chess* s = _c->at(step->moveid); s->_row = step->rowFrom; s->_col = step->colFrom; s->setPosition(s->fromPlate()); Chess* kill; if (step->killid != -1) { kill = _c->at(step->killid); kill->_dead = false; kill->setVisible(true); } _bRedTurn = !_bRedTurn; delete step; _selectid = -1; _selectSprite->setVisible(false); } */ if (_bRedSide != _bRedTurn) return; if (_steps->size() < 2) return; doRegret2(); char buf = 3; NetBattle::Send(&buf, 1); }
void SceneGame::CheckRecv(float) { if (NetBattle::isRecvComplete()) { unschedule(schedule_selector(SceneGame::CheckRecv)); int len; char* data = NetBattle::RecvData(len); if (data[0] == 4) { _bRedSide = !_bRedSide; restartInit(); } else if (data[0] == 3) { doRegret2(); NetBattle::RecvStart(); schedule(schedule_selector(SceneGame::CheckRecv)); } else if (data[0] == 1) { _selectid = data[1]; _selectSprite->setPosition(_c->at(_selectid)->fromPlate()); _selectSprite->setVisible(true); NetBattle::RecvStart(); schedule(schedule_selector(SceneGame::CheckRecv)); } else if (data[0] == 2) { Chess* s = _c->at(data[1]); int row = 9 - data[2]; int col = 8 - data[3]; int killid = getChessFromRowCol(row, col); recordStep(_selectid, killid, _c->at(_selectid)->_row, _c->at(_selectid)->_col, row, col); s->_row = row; s->_col = col; //s->setPosition(s->fromPlate()); MoveTo* moveto = MoveTo::create(1.0f, s->fromPlate()); // CCCallFuncN* callfuncN = CCCallFuncN::create(this, callfuncN_selector(SceneGame::setChessZOrder)); CallFuncN* callfuncN = CallFuncN::create(CC_CALLBACK_1(SceneGame::AfterMove,this,(void*)(intptr_t)killid)); s->runAction(Sequence::createWithTwoActions(moveto, callfuncN)); FadeOut* fadeout = FadeOut::create(1.0f); MoveTo* SelectMoveto = MoveTo::create(1.0f, s->fromPlate()); Spawn* spawn = Spawn::createWithTwoActions(fadeout, SelectMoveto); _selectSprite->runAction(spawn); if (killid != -1) { Chess* ks = _c->at(killid); ks->_dead = true; ks->setVisible(false); } _selectid = -1; _selectSprite->setVisible(false); _bRedTurn = !_bRedTurn; } } }