Exemplo n.º 1
0
bool Board::canMoveJiang(int moveid, int killid, int row, int col)
{
    // 可直接吃对方将
    if (killid != -1 && _s[killid]._type == Stone::JIANG)
    {
        return canMoveChe(moveid, killid, row, col);
    }

    GetRowCol(row1, col1, moveid);
    int r = relation(row1, col1, row, col);
    if (r != 1 || r != 10) {
        return false;
    }

    if (col < 3 || col > 5) {
        return false;
    }

    if (isBottomSide(moveid)) {
        if (row < 7) {
            return false;
        }
    }
    else {
        if (row > 2) {
            return false;
        }
    }

    return true;
}
Exemplo n.º 2
0
bool SceneGame::canMove(int moveid, int row, int col, int killid)
{
	Chess* s =_c->at(moveid);
	switch (s->_type)
	{
	case Chess::CHE:
		return canMoveChe(moveid, row, col);

	case Chess::MA:
		return canMoveMa(moveid, row, col);

	case Chess::PAO:
		// 炮有两种走法,走直线(吃) 和 跳子(不吃)
		return canMovePao(moveid, row, col, killid);

	case Chess::BING:
		return canMoveBing(moveid, row, col);

	case Chess::JIANG:
		return canMoveJiang(moveid, row, col, killid);

	case Chess::SHI:
		return canMoveShi(moveid, row, col);

	case Chess::XIANG:
		return canMoveXiang(moveid, row, col);
		break;
	}
	return false;
}
Exemplo n.º 3
0
bool SceneGame::canMoveJiang(int moveid, int row, int col, int killid)
{
	Chess *s = _c->at(moveid);
	//将照面
	if (killid != -1)
	{
		Chess *kill = _c->at(killid);
		if (kill->_type == Chess::JIANG)
		{
			return canMoveChe(moveid, row, col);
		}
	}

	int dRow = abs(s->_row - row);
	int dCol = abs(s->_col - col);
	int d = dRow * 10 + dCol;

	if (d != 1 && d != 10 && d != 11)
		return false;
	
	if (col < 3 || col > 5) return false;
#if IS_NET
	if (s->_red)
#endif
	{
		if (row < 0 || row > 2) return false;
		if (d == 11)
		{
			bool crossline = (s->_col == 3 && (s->_row == 0 || s->_row == 2)) || ((s->_col == 5) && (s->_row == 0 || s->_row == 2)) ||
				(s->_col == 4 && s->_row == 1);
			if (!crossline)
			{
				return false;
			}
		}
	}
#if IS_NET
	else
	{
		if (row < 7 || row > 9) return false;

		if (d == 11)
		{
			bool crossline = (s->_col == 3 && (s->_row == 7 || s->_row == 9)) || ((s->_col == 5) && (s->_row == 7 || s->_row == 9)) ||
				(s->_col == 4 && s->_row == 8);
			if (!crossline)
			{
				return false;
			}
		}
	}
#endif
	return true;
}
Exemplo n.º 4
0
bool Board::canMove(int moveid, int killid, int row, int col)
{
    // 如果moveid和killid颜色相同,则不能移动,还需要换选择
    if (_s[moveid]._red == _s[killid]._red) {
        _selectid = killid;
        update();
        return false;
    }


    switch (_s[moveid]._type) {
    case Stone::JIANG:
        return canMoveJiang(moveid, killid, row, col);

    case Stone::SHI:
        return canMoveShi(moveid, killid, row, col);

    case Stone::XIANG:
        return canMoveXiang(moveid, killid, row, col);

    case Stone::CHE:
        return canMoveChe(moveid, killid, row, col);

    case Stone::MA:
        return canMoveMa(moveid, killid, row, col);

    case Stone::PAO:
        return canMovePao(moveid, killid, row, col);

    case Stone::BING:
        return canMoveBing(moveid, killid, row, col);
    }

    return true;

}