diff options
| author | Mario Kilies <MarioKilies@GMX.net> | 2011-01-25 10:16:53 +0100 |
|---|---|---|
| committer | Mario Kilies <MarioKilies@GMX.net> | 2011-01-25 10:16:53 +0100 |
| commit | 6dad43a768646ef0d8f06958446761eb8a1b3f93 (patch) | |
| tree | 444e202b636e5f119dacb81dfcbcb3060ae5aae4 /src/game.c | |
| parent | 2d8d54e988ced2aaf485c9640ef0a38526a4eb44 (diff) | |
Refactored client game states into separate functions instead of handling them in a huge switch() statement.
Diffstat (limited to 'src/game.c')
| -rw-r--r-- | src/game.c | 86 |
1 files changed, 4 insertions, 82 deletions
@@ -65,103 +65,25 @@ static void main_loop_client(int sock) bool running = true; game_state_t state = STATE_CLIENT_WAIT_FOR_HAND_CARDS; uint8_t round = 1; - data_store *data = datamodel(); - uint8_t open_card_idx; - uint8_t picked_stack_idx; while(running) { switch(state) { case STATE_CLIENT_WAIT_FOR_HAND_CARDS: - if(round == 1) - { - // Receive and display table stacks - net_recv(sock, msg_type_initial_stacks); - ui_display_wnd_table_cards(&data->table_stacks, false, 0); - ui_display_wnd_stack_points(&data->table_stacks, false, 0); - } - - // Wait for hand cards from server and display them - net_recv(sock, msg_type_deal_hand); - ui_display_wnd_hand_cards(&data->hand, false, 0); - - state = STATE_CLIENT_SELECT_OPEN_CARD; + state = state_client_wait_for_hand_cards(sock, round); break; case STATE_CLIENT_SELECT_OPEN_CARD: - // Select open card - open_card_idx = ui_choose_card(&data->hand); - data->selected_card = data->hand.cards[open_card_idx]; - - // Send open card to server - net_send(sock, msg_type_selected_card, NULL); - - // Remove picked open card from hand - hand_remove_card(&data->hand, open_card_idx); - ui_display_wnd_hand_cards(&data->hand, false, 0); - - state = STATE_CLIENT_WAIT_FOR_OPEN_CARDS; + state = state_client_select_open_card(sock); break; case STATE_CLIENT_WAIT_FOR_OPEN_CARDS: - net_recv(sock, msg_type_selected_card_all); - pnoc_sort(data->players.players, data->players.count); // sort in ascending order - - ui_display_wnd_current_state(data->players.players, data->players.count, true, 0, 0); // TODO fix parameters - - //state = STATE_CLIENT_PLAY_CARDS; - //sleep(2); - //return; - state = STATE_CLIENT_SELECT_OPEN_CARD;; // just for testing + state = state_client_wait_for_open_cards(sock); break; - #if 0 case STATE_CLIENT_PLAY_CARDS: - foreach(open_card) - { - play_lowest_open_card - { - determine_stack_for_open_card - { - if (stack_has_to_be_picked) - { - if (we_have_to_pick) - { - pick_stack(); - send_stack_to_server(); - } - else // another client has to pick - { - receive_stack(); - } - - clear_stack(stack_id); - } - } - place_card() - { - if(count_stack_cards == 6) - clear_stack(stack_id); - } - } - - } - if (we_have_hand_cards) - { - state = STATE_CLIENT_SELECT_OPEN_CARD; - } - else - { - receive_next_server_action(); - if (server_action == DEAL_CARDS) - { - round++; - state = STATE_CLIENT_WAIT_CARDS; - } - else if (server_action == GAME_FINISHED) - state = STATE_CLIENT_GAME_FINISHED; - } + state = state_client_play_cards(sock); break; #endif default: |
