int main(int argc, char** argv){ printf("**********************************************************\n"); printf("* Runbai Ma *\n"); printf("* Final Project *\n"); printf("* Five draw Card Game *\n"); printf("* *\n"); printf("* *\n"); printf("**********************************************************\n"); printf("1.start game \n"); printf("2.quit\n"); char input = getchar(); char play_again = '1'; if(input == '1'){ while(play_again == '1'){ putchar('\n'); srand((unsigned int)time(NULL)); Deck* deck = (Deck*) malloc(sizeof(Deck)); Card* card_arr = malloc (sizeof(Card)*52); int* ret_value = malloc(sizeof(int)); card_arr = shuffle_card(); deck_init(deck,card_arr); /* initial the four player*/ char* name2 = malloc(sizeof(char)*15); name2 = "Computer 1"; Player* p2 = malloc(sizeof(Player)); player_init(p2,name2); deal_card(p2->hand,deck,5); printf("computer 1 hand: "); hand_print(p2->hand); char* name3 = malloc(sizeof(char)*15); name3 = "Computer 2"; Player* p3 = malloc(sizeof(Player)); player_init(p3,name3); deal_card(p3->hand,deck,5); printf("computer 2 hand: "); hand_print(p3->hand); char* name4 = malloc(sizeof(char)*15); name4 = "Computer 3"; Player* p4 = malloc(sizeof(Player)); player_init(p4,name4); deal_card(p4->hand,deck,5); printf("computer 3 hand: "); hand_print(p4->hand); char* name = malloc(sizeof(char)*15); name = "Poker King"; Player* p1 = malloc(sizeof(Player)); player_init(p1,name); deal_card(p1->hand,deck,5); printf("your hand: "); hand_print(p1->hand); printf("----------------------------------------------------------\n"); putchar('\n'); ret_value = monte_carlo_advisor(p2->hand); change_card_by_montecarlo(ret_value,p2->hand,deck); compute_hand_afterchange(p2->hand); ret_value = monte_carlo_advisor(p3->hand); change_card_by_montecarlo(ret_value,p3->hand,deck); compute_hand_afterchange(p3->hand); ret_value = monte_carlo_advisor(p4->hand); change_card_by_montecarlo(ret_value,p4->hand,deck); compute_hand_afterchange(p4->hand); printf("Monte Carlor suggestion for u: \n"); putchar('\n'); ret_value= monte_carlo_advisor(p1->hand); print_montecarlo_result(ret_value); printf("----------------------------------------------------------\n"); putchar('\n'); printf("Your hand: "); hand_print(p1->hand); putchar('\n'); char c; c = getchar(); printf("Enter the card index you want to change: \n"); while((c = getchar()) != '\n'){ //int i = atoi(&c); //printf("oh god: %d\n", i); if(c == '1') change_card(p1->hand, deck, 1); else if(c == '2') change_card(p1->hand, deck, 2); else if(c == '3') change_card(p1->hand, deck, 3); else if(c == '4') change_card(p1->hand, deck, 4); else if(c == '5') change_card(p1->hand, deck, 5); } compute_hand_afterchange(p1->hand); printf("----------------------------------------------------------\n"); putchar('\n'); printf("computer 1 after change is: "); hand_print(p2->hand); printf("computer 2 after change is: "); hand_print(p3->hand); printf("computer 3 after change is: "); hand_print(p4->hand); printf("your hand after change is : "); hand_print(p1->hand); printf("----------------------------------------------------------\n"); putchar('\n'); printf("the game result is: \n"); Player* p[4] = {p1,p2,p3,p4}; int winner = get_winner(p); if(winner == 0){ printf("You won the game!\n"); } else{ printf("%s won the game!\n", p[winner]->name); } putchar('\n'); putchar('\n'); putchar('\n'); printf("1.play again\n"); printf("2.quit\n"); play_again = getchar(); } } }
int main(int argc, char const *argv[]) { setvbuf(stdout, (char *)NULL, _IONBF, 0); while(1) { char command; printf("=============================\n"); printf(" [SERVER CREATER] \n"); printf(" Blackjack (b) \n"); printf(" Gusee Number (g) \n"); printf(" Quit (q) \n"); printf("=============================\n"); printf("Enter your choice: "); scanf(" %c", &command); printf("=============================\n"); printf("Loading...\n"); if(command != 'b' && command != 'g') break; else { int player_num; while(1){ printf("=============================\n"); printf("Enter the capacity: "); scanf(" %d", &player_num); printf("=============================\n"); if (player_num > MAX_PLAYER || player_num < MIN_PLAYER) printf("Enter 1 to 10.\n"); else break; } int sock_fd; int conn_fd[player_num]; char game_type_uppercase, game_type_lowercase; char not_fit = 'D'; //don't fit the game type char msg[100], msg0[100] ,msg1[100], msg2[100], msg3[100], msg4[100], msg5[100], msg6[300]; struct sockaddr_in ser_addr, cli_addr; socklen_t cli_len = sizeof(cli_addr); if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) fprintf(stderr, "socket error\n"); int timeout = 1; setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&timeout, sizeof(int)); bzero(&ser_addr , sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_addr.s_addr = INADDR_ANY; if(command == 'G' || command == 'g') ser_addr.sin_port = htons(PORT_FOR_GM); else ser_addr.sin_port = htons(PORT_FOR_BJ); bind(sock_fd, (struct sockaddr *)&ser_addr, sizeof(ser_addr)); listen(sock_fd, 1); if (command == 'G' || command =='B'){ game_type_uppercase = command; game_type_lowercase = command + 32; //transfrom ascii to lowercase if(command == 'G') printf("Server is going to hold Guess Number.\n"); else printf("Server is going to hold Blackjack.\n"); } else if (command == 'g' || command == 'b') { game_type_lowercase = command; game_type_uppercase = command - 32; //transfrom ascii to uppercase if(command == 'g') printf("Server is going to hold Guess Number.\n"); else printf("Server is going to hold Blackjack.\n"); } else printf("Game type error, please try again.\n"); int i; int player_state[player_num]; for (i = 0; i < player_num; ++i) { char tmp_type; conn_fd[i] = accept(sock_fd , (struct sockaddr *)&cli_addr, &cli_len); read(conn_fd[i], &tmp_type, sizeof(char)); if (tmp_type == game_type_uppercase || tmp_type == game_type_lowercase){ write(conn_fd[i], &game_type_uppercase, sizeof(char)); sprintf(msg, "You are the %d player.\nWait for other %d player(s) join.\n" , i+1, player_num - (i+1)); write(conn_fd[i], &msg, sizeof(msg)); read(conn_fd[i], &player_state[i], sizeof(int)); } else{ write(conn_fd[i], ¬_fit, sizeof(char)); i--; } } int bet[10]; for (i = 0; i < player_num; ++i) //ask every player to enter bet. { sprintf(msg0, "Enter your bet: "); write(conn_fd[i], msg0, sizeof(msg0)); read(conn_fd[i], &bet[i], sizeof(int)); player_state[i] -= bet[i]; } if (game_type_uppercase == 'G') { int ans[4]; int is_Over[player_num]; int end = 0; gen_num(ans); Overset_init(is_Over, player_num); printf("=============================\n"); printf(" GAME START \n"); printf("=============================\n"); printf("The answer is : %d %d %d %d\n", ans[0], ans[1], ans[2], ans[3]); sprintf(msg1, " GAME START \n"); for(i = 0; i < 10; ++i){ if (end == 1) break; int j, k, l; for(j = 0; j < player_num; j++){ int A = 0, B = 0; int tmp_num[4]; if (i == 0) write(conn_fd[j], msg1, sizeof(msg)); sprintf(msg2, "Round %d.\n", i + 1); write(conn_fd[j], msg2, sizeof(msg)); for(k = 0; k < 4; k++ ) read(conn_fd[j], &tmp_num[k], sizeof(int)); printf("=============================\n"); printf("Round %d.\nThe %d player entered %d %d %d %d.\n", i + 1, j + 1, tmp_num[0], tmp_num[1], tmp_num[2], tmp_num[3]); calculate(&A, &B, tmp_num, ans); if (A == 4){ is_Over[j] = 1; end = 1; } write(conn_fd[j], &A, sizeof(int)); write(conn_fd[j], &B, sizeof(int)); } if (end == 1){ for(l = 0; l < player_num; l++) if(is_Over[l] == 1){ int money = Stake_count(l , bet, i + 1); sprintf(msg3, "Correct answer!\nYou get $%d.\n", money); write(conn_fd[l], &msg3, sizeof(msg)); player_state[l] += money; //fprintf(stderr, "player_state = %d\n", player_state[l]); } else{ sprintf(msg4, "Game Over.\nThe correct answer is %d%d%d%d.\nOthers wins, you lose %d dollars.\n", ans[0], ans[1], ans[2], ans[3], bet[l]); write(conn_fd[l], &msg4, sizeof(msg)); //fprintf(stderr, "player_state = %d\n", player_state[l]); } } else for(l = 0; l < player_num; l++) if(i != 9){ sprintf(msg5, "No one is correct. Continue...\n"); write(conn_fd[l], &msg5, sizeof(msg)); } else{ sprintf(msg6, "=============================\n GAME OVER \n=============================\nCorrect answer is %d%d%d%d.\nNo one wins, you lose %d dollars.\n", ans[0], ans[1], ans[2], ans[3], bet[l]); write(conn_fd[l], &msg6, sizeof(msg)); //fprintf(stderr, "player_state = %d\n", player_state[l]); } } int m; for (m = 0; m < player_num; ++m) write(conn_fd[m], &player_state[m], sizeof(int)); printf("=============================\n"); printf(" GAME OVER \n"); printf("=============================\n"); for (m = 0; m < player_num; ++m) close(conn_fd[m]); close(sock_fd); } else if(game_type_uppercase == 'B'){ int i, j, k; int card[52]; int deal_card_num = 0; int current = 0, visible_cur = 0; int visible_card[52] = {0};//visible card int deal_card[10] = {0}; int player_card_num = 0; char option = 'I'; // init shuffle_card(card); printf(" GAME START \n"); sprintf(msg1, " GAME START \n"); printf("Card order: \n"); print_card(card); printf("\n"); printf("=============================\n"); deal_card[deal_card_num++] = card[current++]; visible_card[visible_cur++] = card[current]; deal_card[deal_card_num++] = card[current++]; for (i = 0; i < player_num; ++i) { visible_card[visible_cur] = card[2 * visible_cur + 1]; visible_cur++; } for (i = 0; i < player_num; ++i) { write(conn_fd[i], &msg1, sizeof(msg));//1 write(conn_fd[i], &deal_card[1], sizeof(int)); //2 //send deal_card to player write(conn_fd[i], &card[current++], sizeof(int));//3 //send player card to player //visible_card[visible_cur++] = card[current]; write(conn_fd[i], &card[current++], sizeof(int));//4 //write(conn_fd[i], &visible_cur, sizeof(int));//5 //for (j = 0; j < visible_cur; ++j) //write(conn_fd[i], &visible_card[j], sizeof(int ));//6 7 } printf("You get: "); print_card(deal_card); printf("=============================\n"); int test[2] = {0}; for(i = 0; i < player_num; ++i) { write(conn_fd[i], &visible_cur, sizeof(int)); for (j = 0; j < visible_cur; ++j) write(conn_fd[i], &visible_card[j], sizeof(int)); while(option != 'S'){ read(conn_fd[i], &option, sizeof(char)); if(option == 'H'){//hit visible_card[visible_cur++] = card[current]; test[0] = card[current]; printf("send to client: "); print_card(test); printf("=============================\n"); write(conn_fd[i], & card[current++], sizeof(int)); } else if(option == 'S')//stand break; else if(option == 'P'){//split visible_card[visible_cur++] = card[current]; write(conn_fd[i], & card[current++], sizeof(int)); visible_card[visible_cur++] = card[current]; write(conn_fd[i], & card[current++], sizeof(int)); } else{ perror("Error input.\n"); } } option = 'I'; } char buffer; int Dealer; while (1) { Dealer = (count_for_BJ(deal_card, deal_card_num)); if (Dealer == -1) { printf(" You BUST!!!\n"); break; } printf("Now %d points\n", Dealer); printf("You have: "); print_card(deal_card); printf("\n"); printf(" HIT (h) \n"); printf(" STAND (s) \n"); printf("=============================\n"); printf("Enter your choice: "); scanf(" %c", &buffer); printf("=============================\n"); if (buffer == 's') if ( Dealer < 17) printf("Need to get over 17.\n"); else break; else if (buffer == 'h') { test[0] = card[current]; printf("=============================\n"); printf("Send card to server: "); print_card(test); printf("=============================\n"); deal_card[deal_card_num++] = card[current++]; } } printf("=============================\n"); printf(" GAME OVER \n"); printf("=============================\n"); for(i = 0; i < player_num; i++){ write(conn_fd[i], &Dealer, sizeof(int)); close(conn_fd[i]); } close(sock_fd); } } } return 0; }