void clickedButton(GtkWidget *widget, GtkWidget **buttons) { if(strlen(gtk_button_get_label(GTK_BUTTON(widget))) != 1) { gtk_button_set_label(GTK_BUTTON(widget), "X"); GtkWidget *i = 0; whoWon(buttons); while(1) { i = moveComputer(buttons); if(strlen(gtk_button_get_label(GTK_BUTTON(i))) != 1) { gtk_button_set_label(GTK_BUTTON(i), "O"); break; } } } whoWon(buttons); }
int main() { char playAgain; do { nodes_expanded = 0; //initialize the board. char *board = newBoard(); //get player and computer characters. char playerPiece = askUser("\nPlease choose your character (x or o): ", X, O); char computerPiece = getOpponentPiece(playerPiece); //check if player wants to play first. char ch = askUser("\nDo you want to play first ? (y or n): ", 'y', 'n'); if(ch == 'y') { makePlayerMove(board, playerPiece); } else if(ch == 'n') { } char winner; int turn = COMPUTER; //game loop. while(!isFilled(board) && (winner = whoWon(board)) == NONE) { if(turn == COMPUTER) { makeComputerMove(board, computerPiece); turn = PLAYER; } else { makePlayerMove(board, playerPiece); turn = COMPUTER; } } printBoard(board); //print results. if(winner == playerPiece) { printf("\n$ Congratulations! you have won. $\n"); } else if(winner == NONE) { printf("\n* The game is a draw. *\n"); } else { printf("\n@ You Lose!! @\n"); } printf("\nNumber of nodes expanded: %d", nodes_expanded); //ask if user wants to play again. playAgain = askUser("\n Do you want to play again? (y or n): ", 'y', 'n'); }while(playAgain == 'y'); return 0; }
void GameManager::runda( int zaczyna ) { //BEGGINER_INDEX JEST INDEXEM Z GRAJACYCH! std::vector<Gracz> *pgracze; int zaczyna_pierw = zaczyna; if( stol.cardsOnTable.size() == 0 && stol.pool == 0 ) { ///pierwszy ziomek licytuje w ciemno zmienWlasnosci( zaczyna, grajacych(0).at( zaczyna ).player->odzywka( stol ) ); zaczyna++; } else if( stol.cardsOnTable.size() == 0 && stol.pool != 0 ) { ///drugi ziomek licytuje w ciemno zmienWlasnosci( zaczyna, grajacych(0).at( zaczyna ).player->odzywka( stol ) ); zaczyna++; // rozdajKarty(); //rozdaj gracza // int z = 0; //index tych sprawdzanych od dolu (po przekroczeniu indexow) if( grajacych(0).size() > 2 ) { pgracze = &grajacych(0); for( unsigned int i = 0; i < pgracze->size() - 2; i++ ) { ///reszta licytuje w pol ciemno xd if( zaczyna < pgracze-> size() ) { zmienWlasnosci( zaczyna, pgracze->at( zaczyna ).player->odzywka( stol ) ); zaczyna++; } else if( zaczyna >= pgracze->size() - 1 ) { zmienWlasnosci( z, pgracze->at( z ).player->odzywka( stol ) ); z++; } } } rozdajKarty(); //rozdaje na stol pierwsze 3 } ///licytacja ponownie //nwm co jesli jest tlk 2 licytujacych if( stol.cardsOnTable.size() == 3 ) { pgracze = &grajacych(0); for( unsigned int i = 0; i < pgracze->size(); i++ ) { zmienWlasnosci( i, pgracze->at( i ).player->odzywka( stol ) ); } } if( stol.cardsOnTable.size() == 5 ) { Gracz *gracz_ptr = &whoWon(); std::cout << "Wygral gracz "; gracz_ptr->player->przedstawSie(); std::cout << " jego bilans " << gracz_ptr->money << std::endl << std::endl; gracz_ptr->wygrane++; //metoda wskazuje tego dobrego a reszte pasuje; } }
int minimax(char *board, char playerPiece, char computerPiece, int isMaximizer, int alpha, int beta) { nodes_expanded ++; char winner = whoWon(board); /* Handle leaf node cases */ //if i won. if(winner == playerPiece) { return 1; } //if my opponent won. else if(winner == computerPiece) { return -1; } //if it is a draw. else if(isFilled(board)) { return 0; } /* Minmax backtracking */ int i, move, max, min; max = -2; min = 2; move = -1; for(i = 0; i < 9; i ++) { if(board[i] == NONE) { /* for each empty cell */ if(isMaximizer) board[i] = playerPiece; else board[i] = computerPiece; int val = minimax(board, playerPiece, computerPiece, 1 - isMaximizer, alpha, beta); board[i] = NONE; if(isMaximizer) { if(val > max) { max = val; beta = max; } // 1 is the maximum possible value so break the search. // or max maybe greater than alpha. if(val == 1 || max >= alpha) { break; } } else { if(val < min) { min = val; alpha = min; } // -1 is the manimum possible value so break the search. if(val == -1 || min <= beta) { break; } } } } if(isMaximizer) return max; else return min; }
int main(void){ printf("WELCOME TO HENRYS BLACKJACK\n"); //player1 struct player player1; printf("Type name for player1: "); scanf("%s",player1.name); getchar(); player1.playerHand = NULL; player1.cardValue = 0; player1.startCards = 2; printf("utan ptr: %d\n", player1.startCards); //player2 struct player player2; printf("Type name for player2: "); scanf("%s",player2.name); getchar(); player2.playerHand = NULL; player2.cardValue = 0; player2.startCards = 2; //computer struct player comp; strcpy(comp.name, "the dealer"); comp.playerHand = NULL; comp.cardValue = 0; comp.startCards = 1; int cardCounter = 0; struct card *deck = NULL; deck = createDeck(deck); // deck created int i; for(i=0; i<20; i++) shuffleDeck(deck); // deck shuffled /* Name giving and first cards dealing */ printf("\n\nHand of %s:\n", player1.name); dealCards(&player1, deck, &cardCounter); printCards(player1.playerHand, player1.startCards); printf("\n\nHand of %s: \n", player2.name); dealCards(&player2, deck, &cardCounter); printCards(player2.playerHand, player2.startCards); printf("\n\nHand of %s: \n", comp.name); dealCards(&comp, deck, &cardCounter); printCards(comp.playerHand, comp.startCards); /* Hit or stay face */ printf("------------------------------------------------------\n"); player1.cardValue = actDealer(player1,deck, &cardCounter,22); printf("------------------------------------------------------\n"); player2.cardValue = actDealer(player2,deck, &cardCounter,22); printf("------------------------------------------------------\n"); if(player1.cardValue == -1 && player2.cardValue == -1){ // if both loses dealer does not have to continue printf("Both players lost!\n"); printf("--------------------Game-finished---------------------\n"); goto masteJagKompletteraNufragetecken; } comp.cardValue = actDealer(comp,deck,&cardCounter,17); printf("------------------------------------------------------\n"); whoWon(player1, player2, comp); printf("--------------------Game-finished---------------------\n"); masteJagKompletteraNufragetecken: /* Freeing memory */ free(deck); free(player1.playerHand); free(player2.playerHand); free(comp.playerHand); return 0; }