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; }
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)); } }
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"); } } } }
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; }
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); }
/** \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); }
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) {
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; } }