示例#1
0
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;
		}
	}
}
示例#2
0
void SceneGame::Regret(CCObject*)
{
	// 轮到谁走,谁有权点悔棋,不然不能点
	if (_bRedSide != _bRedTurn)
		return;

	// 走棋还没走两步,不让悔棋
	if (_steps.size() < 2)
		return;

	doRegret2();

	// 发送信息
	char buf = 3;
	Net::Send(&buf, 1);

}
示例#3
0
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);
}
示例#4
0
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;
		}
	}
}