From 3fc586325f8fc8fb4f1990bf87ad4c37e722f381 Mon Sep 17 00:00:00 2001 From: Mario Kilies Date: Tue, 25 Jan 2011 11:11:47 +0100 Subject: Created a mainstack datatype. Refactored server game states into separate functions. --- src/server_game_states.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/server_game_states.c (limited to 'src/server_game_states.c') diff --git a/src/server_game_states.c b/src/server_game_states.c new file mode 100644 index 0000000..c00fc26 --- /dev/null +++ b/src/server_game_states.c @@ -0,0 +1,110 @@ +#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; +} -- cgit v1.2.3