diff options
| author | Mario Kilies <MarioKilies@GMX.net> | 2011-01-24 18:56:32 +0100 |
|---|---|---|
| committer | Mario Kilies <MarioKilies@GMX.net> | 2011-01-24 18:56:32 +0100 |
| commit | a24153f14dcc95332b91e70e39028228e9b6c4dc (patch) | |
| tree | 04bb60f0192627ba61ae0b67665cf0634713b238 /src | |
| parent | 5ab5af3b1472fe93eb164f5bbece798a402eea65 (diff) | |
First attempt to implement STATE_CLIENT_WAIT_FOR_HAND_CARDS.
Diffstat (limited to 'src')
| -rw-r--r-- | src/game.c | 164 | ||||
| -rw-r--r-- | src/game.h | 10 | ||||
| -rw-r--r-- | src/net/client.h | 1 | ||||
| -rw-r--r-- | src/net/comm.c | 3 | ||||
| -rw-r--r-- | src/net/server.c | 2 |
5 files changed, 106 insertions, 74 deletions
@@ -37,20 +37,31 @@ static void init_mainstack(card *stack, const uint32_t size) static void main_loop_client(int sock) { bool running = true; - //gamestate state = STATE_CLIENT_WAIT_CARDS; + gamestate state = STATE_CLIENT_WAIT_FOR_HAND_CARDS; + uint8_t round = 1; + data_store *data = datamodel(); while(running) { - /* switch(state) { - case STATE_CLIENT_WAIT_CARDS: + case STATE_CLIENT_WAIT_FOR_HAND_CARDS: if(round == 1) - receive_and_place_table_stacks(); - wait_for_cards_from_server(); - state = STATE_CLIENT_SELECT_OPEN_CARD; - break; + { + // Receive and display table stacks + net_recv(sock, msg_type_initial_stacks); + ui_display_wnd_table_cards(&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; + sleep(1); + exit(0); + break; +#if 0 case STATE_CLIENT_SELECT_OPEN_CARD: select_open_card(); send_open_card_to_server(); @@ -101,38 +112,51 @@ static void main_loop_client(int sock) 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; } break; - +#endif default: - assert(false); // should never happen + printf("main_loop_client: entered unknown state\n"); + exit(EXIT_FAILURE); } - */ } - } -static void main_loop_server(socket_list_t* sock) +static void main_loop_server(socket_list_t* client_socks) { bool running = true; - //gamestate state = STATE_SERVER_DEAL_CARDS; + gamestate state = STATE_SERVER_DEAL_HAND_CARDS; + uint8_t round = 1; + data_store *data = datamodel(); while(running) { - /* switch(state) { - case STATE_SERVER_DEAL_CARDS: + case STATE_SERVER_DEAL_HAND_CARDS: if(round == 1) - send_and_place_table_stacks(); - deal_cards_to_clients(); - state = STATE_SERVER_WAIT_OPEN_CARDS; - break; + { + // Send table stacks to clients + for(int i = 0; i < data->players.count; i++) + { + net_send(client_socks->sockets[i], msg_type_initial_stacks, NULL); + } + } + + // Deal hand cards to clients + for(int i = 0; i < data->players.count; i++) + { + net_send(client_socks->sockets[i], msg_type_deal_hand, &data->hand); + } + //state = STATE_SERVER_WAIT_FOR_OPEN_CARDS; + break; +#if 0 case STATE_SERVER_WAIT_FOR_OPEN_CARDS: receive_open_cards_from_clients(); sort_open_card_list(); // in ascending order @@ -169,8 +193,9 @@ static void main_loop_server(socket_list_t* sock) { if (main_stack_has_enough_cards_for_clients) { - send_action_to_client(DEAL_CARDS); - state = STATE_SERVER_DEAL_CARDS; + send_action_to_client(DEAL_HAND_CARDS); + round++; + state = STATE_SERVER_DEAL_HAND_CARDS; } else { @@ -179,13 +204,12 @@ static void main_loop_server(socket_list_t* sock) } } break; - +#endif default: - assert(false); // should never happen + printf("main_loop_server: entered unknown state\n"); + exit(EXIT_FAILURE); } - */ } - } void start_game(const bool servermode, const char* addr, const char* port) @@ -193,49 +217,6 @@ void start_game(const bool servermode, const char* addr, const char* port) assert(addr != NULL && port != NULL); bool server_process = false; - int cards = MAX_CARD - MIN_CARD + 1; - card mainstack[cards]; - data_store* data = datamodel(); - - srand(time(0)); - - init_mainstack(mainstack, cards); - - // Example data set for table cards window - const card_stack_t _cs1 = { { 1, 2, 3, 4, 101 } }; - const card_stack_t _cs2 = { { 6, 7, 53, 0, 0 } }; - const card_stack_t _cs3 = { { 11, 55, 0, 0, 0 } }; - const card_stack_t _cs4 = { { 17, 29, 36, 42, 0 } }; - //data->table_stacks = { { _cs1, _cs2, _cs3, _cs4 } }; - data->table_stacks.stacks[0] = _cs1; - data->table_stacks.stacks[1] = _cs2; - data->table_stacks.stacks[2] = _cs3; - data->table_stacks.stacks[3] = _cs4; - //const table_stacks_t ts = { { _cs1, _cs2, _cs3, _cs4 } }; - - // The stack points window uses ts, too, so there is no separate data set - - // Example data set for current state window - pnoc_t pnoc[10] = { - {0, "$you", 10}, - {1, "1234567890", 23}, - {2, "baz", 38}, - {3, "foo_bar", 14}, - {4, "lolcat", 60}, - {5, "blablub123", 15}, - {6, "abcdefg", 103}, - {7, "hello", 98}, - {8, "hornoxe", 33}, - {9, "1337nick", 74} - }; - pnoc_sort(pnoc, 10); - const uint8_t num_players = 10; - const uint32_t score = 10; - - // Example data set for hand cards window - const hand_t h = { {22, 0, 12, 85, 27, 69, 78, 0, 77, 0} }; - data->hand = h; - hand_sort(&data->hand); if(servermode) { @@ -249,6 +230,49 @@ void start_game(const bool servermode, const char* addr, const char* port) socket_list_t client_socks; uint8_t num_players = 1; + int cards = MAX_CARD - MIN_CARD + 1; + card mainstack[cards]; + data_store* data = datamodel(); + + srand(time(0)); + + init_mainstack(mainstack, cards); + + // Example data set for table cards window + const card_stack_t _cs1 = { { 1, 2, 3, 4, 101 } }; + const card_stack_t _cs2 = { { 6, 7, 53, 0, 0 } }; + const card_stack_t _cs3 = { { 11, 55, 0, 0, 0 } }; + const card_stack_t _cs4 = { { 17, 29, 36, 42, 0 } }; + //data->table_stacks = { { _cs1, _cs2, _cs3, _cs4 } }; + data->table_stacks.stacks[0] = _cs1; + data->table_stacks.stacks[1] = _cs2; + data->table_stacks.stacks[2] = _cs3; + data->table_stacks.stacks[3] = _cs4; + //const table_stacks_t ts = { { _cs1, _cs2, _cs3, _cs4 } }; + + // The stack points window uses ts, too, so there is no separate data set + + // Example data set for current state window + pnoc_t pnoc[10] = { + {0, "$you", 10}, + {1, "1234567890", 23}, + {2, "baz", 38}, + {3, "foo_bar", 14}, + {4, "lolcat", 60}, + {5, "blablub123", 15}, + {6, "abcdefg", 103}, + {7, "hello", 98}, + {8, "hornoxe", 33}, + {9, "1337nick", 74} + }; + pnoc_sort(pnoc, 10); + const uint32_t score = 10; + + // Example data set for hand cards window + const hand_t h = { {22, 0, 12, 85, 27, 69, 78, 0, 77, 0} }; + data->hand = h; + hand_sort(&data->hand); + server_sock = server_start(port); server_get_players(server_sock, &client_socks, num_players); data->players.count = num_players; @@ -272,19 +296,17 @@ void start_game(const bool servermode, const char* addr, const char* port) sleep(1); // TODO make sure server process is listening sock = client_connect_server(addr, port); + data_store* data = datamodel(); strncpy(data->nickname, "nickname", 10); net_send(sock, msg_type_hello, NULL); net_recv(sock, msg_type_start_game); - net_recv(sock, msg_type_deal_hand); - net_recv(sock, msg_type_initial_stacks); ui_init(); // Display all windows ui_display_wnd_table_cards(&data->table_stacks, false, 0); ui_display_wnd_stack_points(&data->table_stacks, false, 0); - ui_display_wnd_current_state(pnoc, num_players, 2, score); ui_display_wnd_hand_cards(&data->hand, false, 0); main_loop_client(sock); @@ -7,7 +7,15 @@ #define MIN_CARD 1 #define MAX_CARD 104 -typedef enum { STATE_CLIENT_WAIT_CARDS, STATE_CLIENT_SELECT_OPEN_CARD, STATE_CLIENT_WAIT_FOR_OPEN_CARDS, STATE_CLIENT_PLAY_CARDS, STATE_SERVER_DEAL_CARDS, STATE_SERVER_WAIT_FOR_OPEN_CARDS, STATE_SERVER_PLAY_CARDS } gamestate; +typedef enum { + STATE_CLIENT_WAIT_FOR_HAND_CARDS, + STATE_CLIENT_SELECT_OPEN_CARD, + STATE_CLIENT_WAIT_FOR_OPEN_CARDS, + STATE_CLIENT_PLAY_CARDS, + STATE_SERVER_DEAL_HAND_CARDS, + STATE_SERVER_WAIT_FOR_OPEN_CARDS, + STATE_SERVER_PLAY_CARDS +} gamestate; void start_game(const bool servermode, const char* addr, const char* port); diff --git a/src/net/client.h b/src/net/client.h index 29f9720..918b98f 100644 --- a/src/net/client.h +++ b/src/net/client.h @@ -14,5 +14,6 @@ void client_prep_selected_stack(msg_t *m); bool client_parse_player_list(const msg_t *m); bool client_parse_deal_hand(const msg_t *m); bool client_parse_selected_stack(const msg_t *m); +bool client_parse_initial_stacks(const msg_t *m); #endif // OXEN_CLIENT_H diff --git a/src/net/comm.c b/src/net/comm.c index 0cb6233..7f9c6c4 100644 --- a/src/net/comm.c +++ b/src/net/comm.c @@ -39,8 +39,7 @@ bool net_recv(const int sock, const msg_type_t type) result = client_parse_deal_hand(&m); break; case msg_type_initial_stacks: - printf("not yet implemented: msg_type_initial_stacks\n"); - exit(EXIT_FAILURE); + result = client_parse_initial_stacks(&m); break; case msg_type_selected_card: result = server_parse_selected_card(&m); diff --git a/src/net/server.c b/src/net/server.c index 1e35efd..c6c4613 100644 --- a/src/net/server.c +++ b/src/net/server.c @@ -184,6 +184,8 @@ void server_prep_selected_stack(msg_t *m) void server_prep_deal_hand(msg_t *m, const hand_t *h) { + assert(h != NULL); + m->hdr.type = msg_type_deal_hand; for(int i=0; i<MAX_HAND_CARDS; i++) |
