int getChild(Count& count, Mate* mate, int level, int take) const { assert(1 <= level && level <= n); int i = n - level; Graph::EdgeInfo const* e = &graph.edgeInfo(i); if (take) { if (!doTake(count, mate, *e)) return 0; } else { if (!doNotTake(count, mate, *e)) return 0; } if (++i == n) return -1; Graph::EdgeInfo const* ee = &graph.edgeInfo(i); update(mate, *e, *ee); while (lookahead) { e = ee; Count c = count; if (takable(c, mate, *e)) break; if (!doNotTake(count, mate, *e)) return 0; if (++i == n) return -1; ee = &graph.edgeInfo(i); update(mate, *e, *ee); } assert(i < n); return n - i; }
void botmove(){ addressCard C = whichcardtake(); if(C != NULL){ doTake(Card(C)); doMeld(Card(C)); }else{ doDraw(); } botmeld(); infoCard off = whichcardoff(); doOff(off); }
/* Main program (obviously) */ int main(void) { while (1) { initialize(); clearScreen(); printf("%s", introText); while (!gameOver) { prompt(); if (buffer[0] == '\0') { } else if (tolower(buffer[0]) == 'h') { doHelp(); } else if (tolower(buffer[0]) == 'i') { doInventory(); } else if ((tolower(buffer[0]) == 'g') || !strcasecmp(buffer, "n") || !strcasecmp(buffer, "s") || !strcasecmp(buffer, "e") || !strcasecmp(buffer, "w") || !strcasecmp(buffer, "u") || !strcasecmp(buffer, "d") || !strcasecmp(buffer, "north") || !strcasecmp(buffer, "south") || !strcasecmp(buffer, "east") || !strcasecmp(buffer, "west") || !strcasecmp(buffer, "up") || !strcasecmp(buffer, "down")) { doGo(); } else if (tolower(buffer[0]) == 'l') { doLook(); } else if (tolower(buffer[0]) == 't') { doTake(); } else if (tolower(buffer[0]) == 'e') { doExamine(); } else if (tolower(buffer[0]) == 'u') { doUse(); } else if (tolower(buffer[0]) == 'd') { doDrop(); } else if (tolower(buffer[0]) == 'q') { doQuit(); } else if (!strcasecmp(buffer, "xyzzy")) { printf("Nice try, but that won't work here.\n"); } else { printf("I don't understand. Try 'help'.\n"); } /* Handle special actions. */ doActions(); } printf("Game over after %d turns.\n", turnsPlayed); printf("%s", "Do you want to play again (y/n)? "); fgets(buffer, sizeof(buffer)-1, stdin); if (tolower(buffer[0]) == 'n') { break; } } return 0; }