示例#1
0
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();
    }
  }
}
示例#2
0
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], &not_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;
}