#include "game_states.h" #include #include #include "global.h" game_state_t state_server_deal_hand_cards(const socket_list_t *client_socks, const uint8_t round, main_stack_t *m) { data_store *d = datamodel(); if(round == 1) { // Draw cards for initial stacks and send them to clients d->table_stacks.stacks[0].cards[0] = main_stack_remove_card(m); d->table_stacks.stacks[1].cards[0] = main_stack_remove_card(m); d->table_stacks.stacks[2].cards[0] = main_stack_remove_card(m); d->table_stacks.stacks[3].cards[0] = main_stack_remove_card(m); for(int i = 0; i < d->players.count; i++) { net_send(client_socks->sockets[i], msg_type_initial_stacks, NULL); } } int num_dealcards = main_stack_size(m) / d->players.count; if(num_dealcards > 10) num_dealcards = 10; // Deal hand cards to clients for(int i = 0; i < d->players.count; i++) { hand_t h; memset(h.cards, 0, MAX_HAND_CARDS); for(int j = 0; j < num_dealcards; j++) h.cards[j] = main_stack_remove_card(m); hand_sort(&h); net_send(client_socks->sockets[i], msg_type_deal_hand, &h); } return STATE_SERVER_WAIT_FOR_OPEN_CARDS; } game_state_t state_server_wait_for_open_cards(const socket_list_t *client_socks) { data_store *d = datamodel(); // Receive open cards from clients for(int i = 0; i < d->players.count; i++) { pnoc_t* pl = get_pnoc_from_playerid(&d->players, client_socks->player_ids[i]); assert(pl != NULL); net_recv(client_socks->sockets[i], msg_type_selected_card); pl->open_card = d->selected_card; } for(int i = 0; i < d->players.count; i++) net_send(client_socks->sockets[i], msg_type_selected_card_all, NULL); //return STATE_SERVER_PLAY_CARDS; return STATE_SERVER_WAIT_FOR_OPEN_CARDS; // just for testing } game_state_t state_server_play_cards(const socket_list_t *client_socks, const uint8_t round) { #if 0 data_store *d = datamodel(); foreach(open_card) { play_lowest_open_card { determine_stack_for_open_card { if (stack_has_to_be_picked) { receive_stack_from_client(); send_received_stack_to_other_clients(); clear_stack(stack_id); } } place_card() { if(count_stack_cards == 6) clear_stack(stack_id); } } } if (clients_have_hand_cards) { return STATE_SERVER_WAIT_FOR_OPEN_CARDS; } else { if (main_stack_has_enough_cards_for_clients) { send_action_to_client(DEAL_HAND_CARDS); round++; return STATE_SERVER_DEAL_HAND_CARDS; } else { send_action_to_client(GAME_FINISHED); return STATE_SERVER_GAME_FINISHED; } } #endif return 1337; }