virtual void Decide(const DataObject &, DataObject &output) { // If any player has a progress card besides this player, the Spy // is playable. bool canPlay = false; wxInt32 curPlayer = current(); for(wxInt32 i = 0; i < numPlayers(); ++i) { if(i != curPlayer) { // The player must have any progress card. wxInt32 total = 0; total += CountCards(shPlayableTradeCards, i); total += CountCards(shPlayablePoliticsCards, i); total += CountCards(shPlayableScienceCards, i); if(0 < total) { canPlay = true; break; } } } output = DataObject(canPlay); }
//Random test for adventurer int main() { int i, j, acard, foundTreasure, totalCards, prevHandCount, prevDeckDiscardCount, playerTreasure, numFailed; struct gameState g; char cardName[MAX_STRING_LENGTH]; //Create gameStates with random properties for (i = 0; i < NUMTESTS; i++) { CreateGameState(&g); /* -- Now we have everything setup, lets start testing! -- We will check for these conditions: -- - Handcount increases by number of treasure found -- - Deck + Discard count descreases by number of treasure found -- - Check that the cards in the hand contain the treasure found -- */ foundTreasure = 0; totalCards = CountCards(&g); prevHandCount = g.handCount[0]; prevDeckDiscardCount = g.deckCount[0] + g.discardCount[0]; playerTreasure = CountTreasure(&g); for (j = 0; j < g.deckCount[0]; j++) { if (g.deck[0][j] == copper || g.deck[0][j] == silver || g.deck[0][j] == gold) { if (foundTreasure >= 2) break; foundTreasure++; } } for (j = 0; j < g.discardCount[0]; j++) { if (g.discard[0][j] == copper || g.discard[0][j] == silver || g.discard[0][j] == gold) { if (foundTreasure >= 2) break; foundTreasure++; } } playCard(0, 0, 0, 0, &g); if (g.handCount[0] != prevHandCount + foundTreasure - 1) { printf("Test %d:Incorrect hand count. %d treasure in player's deck. Handcount is %d but should be %d\n", i, foundTreasure, g.handCount[0], prevHandCount + foundTreasure - 1); numFailed++; if (foundTreasure = 0) { printHand2(g, 0); } } if (g.deckCount[0] + g.discardCount[0] != prevDeckDiscardCount - foundTreasure) { printf("Test %d:Incorrect deck and discard count. %d treasure in player's deck. Deck + discard count is %d but should be %d\n", i, foundTreasure, g.deckCount[0] + g.discardCount[0], prevDeckDiscardCount - foundTreasure); numFailed++; } if (foundTreasure == 2) { //Treasure cards are going to be in first and last indicies acard = g.hand[0][g.handCount[0] - 1]; if (acard != copper && acard != silver && acard != gold) { strcpy(cardName,""); cardNumToName(acard, cardName); printf("Test %d:Incorrect cards at position %d. %d treasure in player's deck. Last card in hand should be %s, %s, or %s, is %s\n", i, g.handCount[0] - 1, foundTreasure, "copper", "silver", "gold", cardName); printHand2(g, 0); numFailed++; } acard = g.hand[0][0]; if (acard != copper && acard != silver && acard != gold) { strcpy(cardName,""); cardNumToName(acard, cardName); printf("Test %d:Incorrect cards at position %d. %d treasure in player's deck. First card in hand should be %s, %s, or %s, but is %s\n", i, 0, foundTreasure, "copper", "silver", "gold", cardName); printHand2(g, 0); numFailed++; } } else if (foundTreasure == 1) { acard = g.hand[0][0]; if (acard != copper && acard != silver && acard != gold) { strcpy(cardName,""); cardNumToName(acard, cardName); printf("Test %d:Incorrect cards at position %d. %d treasure in player's deck. First card in hand should be %s, %s, or %s, but is %s\n", i, 0, foundTreasure, "copper", "silver", "gold", cardName); printHand2(g, 0); numFailed++; } } } printf("%d of %d test were successful.\n", NUMTESTS - numFailed, NUMTESTS); return 0; }