示例#1
0
state newStartingState(unsigned char pTypes)
{
    state s;
    pile deck = newDeck();
    pile p1Hand = getNRandCards(deck, 5);
    deck = removeCards(deck, p1Hand);
    pile p2Hand = getNRandCards(deck, 5);
    deck = removeCards(deck, p2Hand);
    card trumpCard = getRandCard(deck);
    deck = removeCard(deck, trumpCard);
    unsigned long long pHands = (((unsigned long long) p2Hand) << 32) +
        (unsigned long long) p1Hand;

    s.deckWithIndex = deck;
    for(unsigned int i=0; i < 9; i++)
    {
        s.deckOrder[i] = getRandCard(deck);
        deck = removeCard(deck, s.deckOrder[i]);
    }
    s.pHands = pHands;
    s.trumpCard = trumpCard;
    s.pRevCards = 0;
    s.pScores = 0;
    unsigned int p1PlayedFirst = rand() % 2;
    unsigned char allBools = 0;
    allBools |= (p1PlayedFirst * 0b1100);
    s.allBools = allBools;
    s.pPossGamePoints = 0;
    s.pCurrGamePoints = 0;
    s.pLastMoves = 0;
    s.pTypes = pTypes;
    return s;
}
示例#2
0
state resetNextDeal(state s)
{
    pile deck = newDeck();
    pile p1Hand = getNRandCards(deck, 5);
    deck = removeCards(deck, p1Hand);
    pile p2Hand = getNRandCards(deck, 5);
    deck = removeCards(deck, p2Hand);
    card trumpCard = getRandCard(deck);
    deck = removeCard(deck, trumpCard);
    unsigned long long pHands = (((unsigned long long) p2Hand) << 32) +
        (unsigned long long) p1Hand;
    s.deckWithIndex = deck;
    for(unsigned int i=0; i < 9; i++)
    {
        s.deckOrder[i] = getRandCard(deck);
        deck = removeCard(deck, s.deckOrder[i]);
    }
    s.pHands = pHands;
    s.trumpCard = trumpCard;
    s.pRevCards = 0;
    s.pScores = 0;
    unsigned int p1PlayedFirst = s.allBools & 0b100;
    s.allBools = 0;
    s.allBools |= (!p1PlayedFirst * 0b1100);
    s.pPossGamePoints = 0;
    s.pLastMoves = 0;
    return s;
}
void PeopleGroupedView::rowsRemoved(const QModelIndex& parent, int start, int end)
{
    Q_UNUSED(parent);
    qDebug() << "[PeopleGroupedView] Rows Removed" << start << end;
    for (int i=start; i<=end; i++)
        removeCard(i);
}
void PeopleGroupedView::dataChanged(const QModelIndex& topLeft,
                                    const QModelIndex& bottomRight)
{
    qDebug() << "[PeopleGroupedView] Data Changed" << topLeft.row() << bottomRight.row();

    int start = topLeft.row();
    int end = bottomRight.row();

    for (int i=start; i<=end; i++) {
        removeCard(i);
        insertCard(m_itemModel->index(i, 0));
    }
}
示例#5
0
文件: Deck.cpp 项目: jbobrow/Set
void Deck::findSet()
{
    for( int i=0; i<cardsDealt.size(); i++ ) {

        for (int j=i+1; j<cardsDealt.size(); j++) {

            //printf("permutation: %i, %i\n", i, j);
            Card *c1 = (Card *) cardsDealt[i];
            Card *c2 = (Card *) cardsDealt[j];
            Card *c3 = c1->findCardToCompleteSet(c2);

            if(c3 != NULL) {
                for( int k=0; k<cardsDealt.size(); k++ ) {

                    Card *s = (Card *) cardsDealt[k];

                    if( c3->isCardEqual(s)) {

                        printf("--------removing found set---------\n");
                        c1->printCard();
                        c2->printCard();
                        c3->printCard();
                        printf("-----------------------------------\n");

                        removeCard(c1, &cardsDealt);
                        removeCard(c2, &cardsDealt);
                        removeCard(c3, &cardsDealt);

                        printHand();
                    }
                }
            }
            else {
                printf("Null Card!!!!\n");
            }
        }
    }
}
示例#6
0
moveGroup addTrumpSwapMoves_CLOSE(state s, pile hand, moveGroup mg)
{
    card trumpCard = getTrumpCard(s);
    rank marrPartner = getMarriagePartner(trumpCard);
    if(isKingOrQueen(trumpCard) && contains(hand, marrPartner))
    {
        card trumpMask = getCardSuitMask(getTrumpCard(s));
        pile suitQueenKing = trumpCard | marrPartner;
        mg.groups[6] |= suitQueenKing & trumpMask;
        mg.groups[7] |= suitQueenKing & (~trumpMask);
    }
    card trumpJack = getTrumpJack(trumpCard);
    hand = removeCard(hand, trumpJack);
    hand = addCards(hand, trumpCard);
    mg.groups[6] |= mg.groups[9];
    mg.groups[7] |= mg.groups[10];
    mg.groups[8] |= hand;
    return mg;
}
示例#7
0
文件: testing.c 项目: TuuCal/Cards
void runTests() {

	Deck testDeck;
	testDeck.length = 0;

	if(!isEmpty(testDeck)) {
		printf("isEmpty test 1 failed!\n");
	}

	testDeck.length = 1;

	if(isEmpty(testDeck)) {
		printf("isEmpty test 2 failed!\n");
	}

    testDeck.length = 0;

    Card testCard;
    testCard.suit = Hearts;
    testCard.value = 13;

    addCard(&testDeck, testCard);

    printCard(testDeck.cards[0]);
    printf("\n======\n");

	if(isEmpty(testDeck)) {
		printf("addCard test 1 failed!\n");
	}

	//Card yourmom = 
	removeCard(&testDeck);
	//printCard(yourmom);




}
示例#8
0
文件: View.c 项目: marcospgp/big-2
/** \brief Imprime o html correspondente a uma carta

    @param path	         O URL correspondente à pasta que contém todas as cartas
    @param x             A coordenada x da carta
    @param y             A coordenada y da carta
    @param suit	         O naipe da carta (inteiro entre 0 e 3)
    @param value	     O valor da carta (inteiro entre 0 e 12)
    @param gameState     O estado de jogo atual (para determinar urls após cliques nas cartas)
    @param cardPosition  Usado para a rotação. 0 - cima, 1 - direita, 2 - baixo, 3 - esquerda
*/
void printCard (char *path, int x, int y, int suit, int value, state gameState, int cardPosition) {

	/* Criar um estado que será usado se o utilizador clicar nesta carta */

	state stateAfterClick = gameState;

	/* Se a carta pertence ao utilizador */
	bool isUserCard = cardExists(gameState.hands[0], suit, value);

    /* Classes html desta carta */
	char cardElementClasses[256] = "card";

	/* Classe de rotação da carta */
	char cardRotationClass[32];

	if (cardPosition == 0) {

        strcpy(cardRotationClass, "card-top");

	} else if (cardPosition == 1) {

	    strcpy(cardRotationClass, "card-right");

	} else if (cardPosition == 2) {

	    strcpy(cardRotationClass, "card-bottom");

	} else if (cardPosition == 3) {

	    strcpy(cardRotationClass, "card-left");
	}

	/* Classe que desativa cliques na carta */
	char cardDisableClass[32] = "disabled";

    /* Se a carta for do utilizador */
    if (isUserCard) {

        /* Não adicionar à carta a classe que a desativa */
        cardDisableClass[0] = '\0';

        /* Mudar as classes html desta carta (para aplicar estilos personalizados) */
        strcpy(cardElementClasses, "card user-card");

        /* Se a carta já está selecionada */
        if (cardExists(gameState.selection, suit, value)) {

            /* Ao clicar nela será descelecionada */
            stateAfterClick.selection = removeCard(stateAfterClick.selection, suit, value);

        } else {

            /* Ao clicar nela será selecionada */
             stateAfterClick.selection = addCard(stateAfterClick.selection, suit, value);
        }

    } /* Else, clicar na carta não faz nada */

	/* Criar url que será usado se esta carta for clicada, usando o estado que já foi criado acima */
	char onClickUrl[10240];

	sprintf(onClickUrl, "%s?q=%s", SCRIPT, stateToString(stateAfterClick));

	printf("<a href=\"%s\"><img src=\"%s/%c%c.svg\" class=\"%s %s %s\" style=\"position: absolute; left:%dpx; top: %dpx; height: 110px; width: 76px;\"></a>\n", onClickUrl, path, VALUES[value], SUITS[suit], cardElementClasses, cardRotationClass, cardDisableClass, x, y);
}
示例#9
0
	connect(ui.editCardName, SIGNAL(textChanged(QString)), this, SLOT(nameChanged()));

	// Validate Values on change
	connect(ui.tableResources, SIGNAL(itemChanged( QTableWidgetItem* )), this, SLOT(validateValues()));
	connect(ui.tableModifiers, SIGNAL(itemChanged( QTableWidgetItem* )), this, SLOT(validateValues()));

	// Connect Change Listener
	connect(ui.editCardName, SIGNAL(editingFinished()), this, SLOT(somethingChanged()));
	connect(ui.spinDamageOpponent, SIGNAL(valueChanged(int)), this, SLOT(somethingChanged()));
	connect(ui.spinDamageSelf, SIGNAL(valueChanged(int)), this, SLOT(somethingChanged()));
	connect(ui.checkAddTurn, SIGNAL(clicked()), this, SLOT(somethingChanged()));
	connect(ui.checkDiscard, SIGNAL(clicked()), this, SLOT(somethingChanged()));
	connect(ui.checkNotDiscardable, SIGNAL(clicked()), this, SLOT(somethingChanged()));
	connect(ui.tableResources, SIGNAL(itemDoubleClicked( QTableWidgetItem* )), this, SLOT(somethingChanged()));
	connect(ui.tableModifiers, SIGNAL(itemDoubleClicked( QTableWidgetItem* )), this, SLOT(somethingChanged()));
	connect(ui.buttonRemoveCard, SIGNAL(clicked()), this, SLOT(removeCard()));
	connect(ui.buttonAddCard, SIGNAL(clicked()), this, SLOT(addCard()));
	connect(ui.buttonOpenImage, SIGNAL(clicked()), this, SLOT(selectImage()));
}

// -----------------------------------------------------------------------------
void CardEditor::populateTree() {
	// If we're simply loading a new Project, refresh the view
	if(!ui.cardList->size().isEmpty()) {
		ui.cardList->clear();
		reset();
	}

	// Populate List
	int i = 0;
	foreach(Arcomage::Card* c, cards) {
示例#10
0
void EditDeckScreen::keyPressEvent(int keyCode) {
	String all = "";
	int ind = listBox->getSelectedIndex();
	int max = listBox->getChildren().size();
	Widget *currentSoftKeys = mainLayout->getChildren()[mainLayout->getChildren().size() - 1];
	switch (screenType) {
		case ST_LIST:
			switch(keyCode) {
				case MAK_UP:
					if(currentSelectedKey!=NULL){
						currentSelectedKey->setSelected(false);
						currentSelectedKey = NULL;
						currentKeyPosition = -1;
						listBox->getChildren()[listBox->getChildren().size()-1]->setSelected(true);
					}
					else if (ind == 0) {
						listBox->setSelectedIndex(max-1);
					} else {
						listBox->selectPreviousItem();
					}
					break;
				case MAK_DOWN:
					if (ind+1 < max ) {
						listBox->setSelectedIndex(ind+1);
					} else if(currentSelectedKey==NULL) {
						listBox->getChildren()[ind]->setSelected(false);
						for(int i = 0; i < currentSoftKeys->getChildren().size();i++){
							if(((Button *)currentSoftKeys->getChildren()[i])->isSelectable()){
								currentKeyPosition=i;
								currentSelectedKey= currentSoftKeys->getChildren()[i];
								currentSelectedKey->setSelected(true);
								break;
							}
						}
					}
					break;
				case MAK_BACK:
				case MAK_SOFTRIGHT:
					previous->show();
					break;
				case MAK_FIRE:
					if(currentSoftKeys->getChildren()[0]->isSelected()){
						keyPressEvent(MAK_SOFTLEFT);
						break;
					}else if(currentSoftKeys->getChildren()[2]->isSelected()){
						keyPressEvent(MAK_SOFTRIGHT);
						break;
					}
					if (listBox->getSelectedIndex() == 0 && cards.size() < 10) {
						if (next != NULL) {
							delete next;
							feed->remHttp();
							next = NULL;
						}
						next = new AlbumLoadScreen(this, feed, AlbumLoadScreen::ST_DECK, NULL, false, NULL, deckCategory);
						((AlbumLoadScreen*)next)->setDeckId(deckId);
						next->show();
					}
					else if ((listBox->getSelectedIndex() == 0 && cards.size() == 10) ||
							(listBox->getSelectedIndex() == 1 && cards.size() < 10)) {
						drawConfirm();
					}
					break;
				case MAK_SOFTLEFT:
					if (listBox->getSelectedIndex() == 0 && cards.size() < 10) {
						if (next != NULL) {
							delete next;
							feed->remHttp();
							next = NULL;
						}
						next = new AlbumLoadScreen(this, feed, AlbumLoadScreen::ST_DECK, NULL, false, NULL, deckCategory);
						((AlbumLoadScreen*)next)->setDeckId(deckId);
						next->show();
					}
					else if ((listBox->getSelectedIndex() == 0 && cards.size() == 10) ||
							(listBox->getSelectedIndex() == 1 && cards.size() < 10)) {
						drawConfirm();
					}
					else {
						removeCard();
					}
					break;
				case MAK_LEFT:
					if(currentSelectedKey!=NULL){
						if(currentKeyPosition > 0){
							currentKeyPosition = currentKeyPosition - 1;
							for(int i = currentKeyPosition; i >= 0;i--){
								if(((Button *)currentSoftKeys->getChildren()[i])->isSelectable()){
									currentSelectedKey->setSelected(false);
									currentKeyPosition=i;
									currentSelectedKey= currentSoftKeys->getChildren()[i];
									currentSelectedKey->setSelected(true);
									break;
								}
							}
						}
					}
					break;
				case MAK_RIGHT:
					if(currentSelectedKey!=NULL){
						if(currentKeyPosition+1 < currentSelectedKey->getParent()->getChildren().size()){
							currentKeyPosition = currentKeyPosition + 1;
							for(int i = currentKeyPosition; i < currentSoftKeys->getChildren().size();i++){
								if(((Button *)currentSoftKeys->getChildren()[i])->isSelectable()){
									currentSelectedKey->setSelected(false);
									currentKeyPosition=i;
									currentSelectedKey= currentSoftKeys->getChildren()[i];
									currentSelectedKey->setSelected(true);
									break;
								}
							}
						}
					}
					break;
			}
			break;
		case ST_CONFIRM_DELETE:
			switch(keyCode) {
				case MAK_FIRE:
					if(currentSoftKeys->getChildren()[0]->isSelected()){
						keyPressEvent(MAK_SOFTLEFT);
					}else if(currentSoftKeys->getChildren()[2]->isSelected()){
						keyPressEvent(MAK_SOFTRIGHT);
					}
					break;
				case MAK_UP:
					if(currentSelectedKey!=NULL){
						currentSelectedKey->setSelected(false);
						currentSelectedKey = NULL;
						currentKeyPosition = -1;
						listBox->getChildren()[listBox->getChildren().size()-1]->setSelected(true);
					}
					else if (ind == 0) {
						listBox->setSelectedIndex(max-1);
					} else {
						listBox->selectPreviousItem();
					}
					break;
				case MAK_DOWN:
					if (ind+1 < max ) {
						listBox->setSelectedIndex(ind+1);
					} else if(currentSelectedKey==NULL) {
						listBox->getChildren()[ind]->setSelected(false);
						for(int i = 0; i < currentSoftKeys->getChildren().size();i++){
							if(((Button *)currentSoftKeys->getChildren()[i])->isSelectable()){
								currentKeyPosition=i;
								currentSelectedKey= currentSoftKeys->getChildren()[i];
								currentSelectedKey->setSelected(true);
								break;
							}
						}
					}
				break;
				case MAK_BACK:
				case MAK_SOFTRIGHT:
					if (!busy) {
						busy = true;
						drawList();
					}
					break;
				case MAK_SOFTLEFT:
					if (!busy) {
						busy = true;
						deleteDeck();
					}
					break;
				case MAK_LEFT:
					if(currentSelectedKey!=NULL){
						if(currentKeyPosition > 0){
							currentKeyPosition = currentKeyPosition - 1;
							for(int i = currentKeyPosition; i >= 0;i--){
								if(((Button *)currentSoftKeys->getChildren()[i])->isSelectable()){
									currentSelectedKey->setSelected(false);
									currentKeyPosition=i;
									currentSelectedKey= currentSoftKeys->getChildren()[i];
									currentSelectedKey->setSelected(true);
									break;
								}
							}
						}
					}
					break;
				case MAK_RIGHT:
					if(currentSelectedKey!=NULL){
						if(currentKeyPosition+1 < currentSelectedKey->getParent()->getChildren().size()){
							currentKeyPosition = currentKeyPosition + 1;
							for(int i = currentKeyPosition; i < currentSoftKeys->getChildren().size();i++){
								if(((Button *)currentSoftKeys->getChildren()[i])->isSelectable()){
									currentSelectedKey->setSelected(false);
									currentKeyPosition=i;
									currentSelectedKey= currentSoftKeys->getChildren()[i];
									currentSelectedKey->setSelected(true);
									break;
								}
							}
						}
					}
					break;
			}
			break;
	}
}