Exemple #1
0
/**
 * getUseableCard - 获得牌手可行着法
 * @card _OUT_: 返回可行着法
 * @return: 返回可行着法数量
 */
int BridgeModel::getUseableCard(int card[13]) {
    int num = 0;
    int player = getCurPlayer();
    if (player == leader[turn]) {//领出
        for (int i = 0; i < 13; i++) {
            if (handCard[player][i] != -1) {
                card[num++] = handCard[player][i];
            }
        }
    } else {
        for (int i = 0; i < 13; i++) {
            if ((handCard[player][i] != -1) && (handCard[player][i] % 4 == historyCard[turn * 4][0] % 4)) {
                card[num++] = handCard[player][i];
            }
        }
        if (num == 0) {//没有领出花色则任出一张
            for (int i = 0; i < 13; i++) {
                if (handCard[player][i] != -1) {
                    card[num++] = handCard[player][i];
                }
            }
        }
    }
    return num;
}
Exemple #2
0
//生成局面标识 已出牌52bit:手牌52bit:明手牌52bit:定约花色3bit:当前轮已出牌信息18bit
void BridgeModel::getInfoSet(char infoSet[INFOSETLEN]) {
    for (int i = 0; i < INFOSETLEN - 1; i++) {
        infoSet[i] = (char)64;
    }
    infoSet[INFOSETLEN - 1] = 0;
    int i, m, n, index;
    int historyNum = turn * 4 + num;
    for (i = 0; i < historyNum; i++) {
        index = historyCard[i][0];
        m = index / INFOLEN;
        n = index % INFOLEN;
        infoSet[m] |= (1 << n);
    }
    int player = getCurPlayer();
    for (int i = 0; i < 13; i++) {
        index = handCard[player][i] + 52;
        m = index / INFOLEN;
        n = index % INFOLEN;
        infoSet[m] |= (1 << n);
    }
    if (player == 2) {
        for (int i = 0; i < 13; i++) {
            index = handCard[0][i] + 104;
            m = index / INFOLEN;
            n = index % INFOLEN;
            infoSet[m] |= (1 << n);
        }
    } else {
        for (int i = 0; i < 13; i++) {
            index = handCard[2][i] + 104;
            m = index / INFOLEN;
            n = index % INFOLEN;
            infoSet[m] |= (1 << n);
        }
    }
    infoSet[INFOSETLEN - 5] |= stone;
    if (num == 3) {
        infoSet[INFOSETLEN - 2] |= historyCard[turn * 4 + 2][0];
        infoSet[INFOSETLEN - 3] |= historyCard[turn * 4 + 1][0];
        infoSet[INFOSETLEN - 4] |= historyCard[turn * 4][0];
    }
    else if(num == 2) {
        infoSet[INFOSETLEN - 2] |= 52;
        infoSet[INFOSETLEN - 3] |= historyCard[turn * 4 + 1][0];
        infoSet[INFOSETLEN - 4] |= historyCard[turn * 4][0];
    }
    else if (num == 1) {
        infoSet[INFOSETLEN - 2] |= 52;
        infoSet[INFOSETLEN - 3] |= 52;
        infoSet[INFOSETLEN - 4] |= historyCard[turn * 4][0];
    }
    else {
        infoSet[INFOSETLEN - 2] |= 52;
        infoSet[INFOSETLEN - 3] |= 52;
        infoSet[INFOSETLEN - 4] |= 52;
    }
}
Exemple #3
0
void Game::nextPlayer()
{
	if(getCurHole()->tiles->at(getCurPlayer()->curTile-1)->tilePlane.distance(getCurPlayer()->pos) <= 0)
	{
		if(getCurPlayer()->velocity.length() < 0.00005f && getCurHole()->tiles->at(getCurPlayer()->curTile-1)->angle == 0)
		{
			getCurPlayer()->moving = false;
			getCurPlayer()->velocity.coords[1] = 0.0f;
			getCurPlayer()->speed = getCurPlayer()->startSpeed;
			curBall = (curBall+1) % numPlayers;
		}
	}
}
Exemple #4
0
//出牌
bool BridgeModel::lead(const int card) {
    int player = getCurPlayer();
    for (int i = 0; i < 13; i++) {
        if (handCard[player][i] == card) {
            historyCard[turn * 4 + num][0] = card;
            historyCard[turn * 4 + num][1] = i;
            handCard[player][i] = -1;
            return true;
        }
    }
    return false;
}
Exemple #5
0
//恢复
bool BridgeModel::recover() {
    num--;
    if (num < 0) {
        if (leader[turn] % 2 == 0) {
            bankerPayoff--;
        } else {
            breakerPayoff--;
        }
        turn--;
        num = 3;
    }
    int player = getCurPlayer();
    handCard[player][historyCard[turn * 4 + num][1]] = historyCard[turn * 4 + num][0];
    return true;
}