diff options
| author | Mario Kilies <MarioKilies@GMX.net> | 2011-01-25 13:14:17 +0100 |
|---|---|---|
| committer | Mario Kilies <MarioKilies@GMX.net> | 2011-01-25 13:14:17 +0100 |
| commit | 52f95177eb8050f073a3d65413feb16cfce93baa (patch) | |
| tree | f94b78be6d4b09fe3ee7d93d4b40c80387a80f33 /src | |
| parent | 3fc586325f8fc8fb4f1990bf87ad4c37e722f381 (diff) | |
Removed awkward pnoc_t and refactored its contents to the new player_list_entry_t.
Diffstat (limited to 'src')
| -rw-r--r-- | src/client_game_states.c | 4 | ||||
| -rw-r--r-- | src/game.c | 12 | ||||
| -rw-r--r-- | src/global.h | 2 | ||||
| -rw-r--r-- | src/net/client.c | 16 | ||||
| -rw-r--r-- | src/net/server.c | 34 | ||||
| -rw-r--r-- | src/player.c | 21 | ||||
| -rw-r--r-- | src/player.h | 19 | ||||
| -rw-r--r-- | src/pnoc.c | 18 | ||||
| -rw-r--r-- | src/pnoc.h | 17 | ||||
| -rw-r--r-- | src/server_game_states.c | 16 | ||||
| -rw-r--r-- | src/ui.c | 20 | ||||
| -rw-r--r-- | src/ui.h | 4 |
12 files changed, 88 insertions, 95 deletions
diff --git a/src/client_game_states.c b/src/client_game_states.c index 1f398ee..3dd8d90 100644 --- a/src/client_game_states.c +++ b/src/client_game_states.c @@ -46,9 +46,9 @@ game_state_t state_client_wait_for_open_cards(const int sock) data_store *d = datamodel(); net_recv(sock, msg_type_selected_card_all); - pnoc_sort(d->players.players, d->players.count); // sort in ascending order + player_list_sort_by_open_card(&d->player_list, d->player_list.count); // sort in ascending order - ui_display_wnd_current_state(d->players.players, d->players.count, true, 0, 0); // TODO fix parameters + ui_display_wnd_current_state(&d->player_list, d->player_list.count, true, 0, 0); // TODO fix parameters //return STATE_CLIENT_PLAY_CARDS; return STATE_CLIENT_SELECT_OPEN_CARD;; // just for testing @@ -106,18 +106,18 @@ void start_game(const bool servermode, const char* addr, const char* port) server_sock = server_start(port); server_get_players(server_sock, &client_socks, num_players); - data->players.count = num_players; + data->player_list.count = num_players; - for(int i=0; i<num_players; i++) + for(int i = 0; i < num_players; i++) { net_recv(client_socks.sockets[i], msg_type_hello); // assign ids (starting with 1; 0 is invalid) client_socks.player_ids[i] = i+1; - data->players.players[i].player_id = i+1; - printf("Player connected: %s\n", data->players.players[i].player_name); + data->player_list.players[i].player_id = i+1; + printf("Player connected: %s\n", data->player_list.players[i].player_name); } - for(int i=0; i<num_players; i++) + for(int i = 0; i < num_players; i++) { net_send(client_socks.sockets[i], msg_type_start_game, NULL); } @@ -141,7 +141,7 @@ void start_game(const bool servermode, const char* addr, const char* port) // 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(data->players.players, data->players.count, false, 0, 0); + ui_display_wnd_current_state(&data->player_list, data->player_list.count, false, 0, 0); ui_display_wnd_hand_cards(&data->hand, false, 0); main_loop_client(sock); diff --git a/src/global.h b/src/global.h index 7385a0a..14bbc62 100644 --- a/src/global.h +++ b/src/global.h @@ -8,7 +8,7 @@ typedef struct { char nickname[MAX_PLAYER_NAME_LENGTH+1]; - player_list players; + player_list_t player_list; table_stacks_t table_stacks; hand_t hand; uint8_t stack_index; diff --git a/src/net/client.c b/src/net/client.c index 73d889a..7f1f98a 100644 --- a/src/net/client.c +++ b/src/net/client.c @@ -69,17 +69,17 @@ bool client_parse_player_list(const msg_t *m) data_store* ds = datamodel(); uint32_t pos = 0; - ds->players.count = m->payload[pos++]; + ds->player_list.count = m->payload[pos++]; // read usernames from buffer - for(int i=0; i<ds->players.count; i++) + for(int i=0; i<ds->player_list.count; i++) { uint8_t namelen; - ds->players.players[i].player_id = m->payload[pos++]; + ds->player_list.players[i].player_id = m->payload[pos++]; namelen = m->payload[pos++]; assert(namelen <= MAX_PLAYER_NAME_LENGTH); - strncpy(ds->players.players[i].player_name, (const char*) m->payload+pos, namelen); - ds->players.players[i].player_name[namelen] = '\0'; + strncpy(ds->player_list.players[i].player_name, (const char*) m->payload+pos, namelen); + ds->player_list.players[i].player_name[namelen] = '\0'; pos += namelen; } @@ -132,9 +132,9 @@ bool client_parse_selected_card_all(const msg_t *m) data_store* ds = datamodel(); for(int i=0; i<m->hdr.payload_length; i+=2) { - uint8_t pid = m->payload[i]; - pnoc_t* pnoc = get_pnoc_from_playerid(&ds->players, pid); - pnoc->open_card = m->payload[i+1]; + player_id_t pid = m->payload[i]; + player_list_entry_t *ple = get_player_list_entry_by_player_id(&ds->player_list, pid); + ple->open_card = m->payload[i+1]; } return true; diff --git a/src/net/server.c b/src/net/server.c index d05d7a9..faad773 100644 --- a/src/net/server.c +++ b/src/net/server.c @@ -115,12 +115,12 @@ bool server_parse_hello(const msg_t *m) data_store* ds = datamodel(); - for(int i=0; i<ds->players.count; i++) + for(int i=0; i<ds->player_list.count; i++) { - if(strlen(ds->players.players[i].player_name) > 0) // search for first empty (not yet assigned) slot + if(strlen(ds->player_list.players[i].player_name) > 0) // search for first empty (not yet assigned) slot continue; - memcpy(ds->players.players[i].player_name, m->payload, m->hdr.payload_length); - ds->players.players[i].player_name[m->hdr.payload_length] = '\0'; + memcpy(ds->player_list.players[i].player_name, m->payload, m->hdr.payload_length); + ds->player_list.players[i].player_name[m->hdr.payload_length] = '\0'; } return true; @@ -152,20 +152,20 @@ uint8_t* server_parse_selected_stack(const msg_t *m) void server_prep_start_game(msg_t *m) { uint16_t pos = 0; - data_store* ds = datamodel(); - player_list* players = &ds->players; + data_store *ds = datamodel(); + player_list_t *player_list = &ds->player_list; m->hdr.type = msg_type_start_game; - m->payload[pos++] = players->count; + m->payload[pos++] = player_list->count; // copy player_ids, length and nicknames to message payload - for(int i=0; i<players->count; i++) + for(int i = 0; i < player_list->count; i++) { - pnoc_t* pl = &players->players[i]; - m->payload[pos++] = pl->player_id; - uint8_t len = strlen(pl->player_name); + player_list_entry_t *ple = &player_list->players[i]; + m->payload[pos++] = ple->player_id; + uint8_t len = strlen(ple->player_name); m->payload[pos++] = len; - memcpy(m->payload+pos, pl->player_name, len); + memcpy(m->payload+pos, ple->player_name, len); pos += len; } @@ -213,13 +213,13 @@ void server_prep_selected_card_all(msg_t *m) m->hdr.type = msg_type_selected_card_all; - for(int i=0; i<ds->players.count; i++) + for(int i = 0; i < ds->player_list.count; i++) { - pnoc_t* pnoc = &ds->players.players[i]; - if(pnoc->player_id == 0) // invalid player + player_list_entry_t *ple = &ds->player_list.players[i]; + if(ple->player_id == 0) // invalid player continue; - m->payload[pos++] = pnoc->player_id; - m->payload[pos++] = pnoc->open_card; + m->payload[pos++] = ple->player_id; + m->payload[pos++] = ple->open_card; } m->hdr.payload_length = pos; diff --git a/src/player.c b/src/player.c index 3e03729..b264922 100644 --- a/src/player.c +++ b/src/player.c @@ -1,9 +1,12 @@ #include "player.h" #include <stdlib.h> +#include <assert.h> -pnoc_t* get_pnoc_from_playerid(player_list* pl, const uint8_t pid) +player_list_entry_t *get_player_list_entry_by_player_id(player_list_t *pl, const player_id_t pid) { - for(int i=0; i<pl->count; i++) + assert(pl != NULL); + + for(int i = 0; i < pl->count; i++) { if(pl->players[i].player_id != pid) continue; @@ -13,3 +16,17 @@ pnoc_t* get_pnoc_from_playerid(player_list* pl, const uint8_t pid) return NULL; } +static int ple_comparator(const void *a, const void *b) +{ + player_list_entry_t ple1 = *(player_list_entry_t *)a; + player_list_entry_t ple2 = *(player_list_entry_t *)b; + + return ple1.open_card - ple2.open_card; +} + +void player_list_sort_by_open_card(player_list_t *pl, const uint8_t num_entries) +{ + assert(pl != NULL); + + qsort(pl, num_entries, sizeof(player_list_entry_t), ple_comparator); +} diff --git a/src/player.h b/src/player.h index f162cfa..41e928b 100644 --- a/src/player.h +++ b/src/player.h @@ -2,16 +2,27 @@ #define OXEN_PLAYER_H #define MAX_PLAYERS 10 +#define MAX_PLAYER_NAME_LENGTH 10 #include <stdint.h> -#include "pnoc.h" +#include "card.h" + +typedef uint8_t player_id_t; + +typedef struct +{ + player_id_t player_id; + char player_name[MAX_PLAYER_NAME_LENGTH + 1]; + card open_card; +} player_list_entry_t; typedef struct { uint8_t count; - pnoc_t players[MAX_PLAYERS]; -} player_list; + player_list_entry_t players[MAX_PLAYERS]; +} player_list_t; -pnoc_t* get_pnoc_from_playerid(player_list* pl, const uint8_t pid); +player_list_entry_t *get_player_list_entry_by_player_id(player_list_t *pl, const player_id_t pid); +void player_list_sort_by_open_card(player_list_t *pl, const uint8_t num_entries); #endif // OXEN_PLAYER_H diff --git a/src/pnoc.c b/src/pnoc.c deleted file mode 100644 index 387f127..0000000 --- a/src/pnoc.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "pnoc.h" -#include <assert.h> -#include <stdlib.h> - -static int pnoc_comparator(const void *a, const void *b) -{ - pnoc_t pnoc1 = *(pnoc_t *)a; - pnoc_t pnoc2 = *(pnoc_t *)b; - - return pnoc1.open_card - pnoc2.open_card; -} - -void pnoc_sort(pnoc_t pnoc[], const uint8_t num_tuples) -{ - assert(pnoc != NULL); - - qsort(pnoc, num_tuples, sizeof(pnoc_t), pnoc_comparator); -} diff --git a/src/pnoc.h b/src/pnoc.h deleted file mode 100644 index 8ef8606..0000000 --- a/src/pnoc.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef OXEN_PNOC_H -#define OXEN_PNOC_H - -#include "card.h" - -#define MAX_PLAYER_NAME_LENGTH 10 - -typedef struct -{ - uint8_t player_id; - char player_name[MAX_PLAYER_NAME_LENGTH+1]; // Player name length + 1 for string termination - card open_card; -} pnoc_t; - -void pnoc_sort(pnoc_t pnoc[], const uint8_t num_tuples); - -#endif // OXEN_PNOC_H diff --git a/src/server_game_states.c b/src/server_game_states.c index c00fc26..1a86814 100644 --- a/src/server_game_states.c +++ b/src/server_game_states.c @@ -15,18 +15,18 @@ game_state_t state_server_deal_hand_cards(const socket_list_t *client_socks, con 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++) + for(int i = 0; i < d->player_list.count; i++) { net_send(client_socks->sockets[i], msg_type_initial_stacks, NULL); } } - int num_dealcards = main_stack_size(m) / d->players.count; + int num_dealcards = main_stack_size(m) / d->player_list.count; if(num_dealcards > 10) num_dealcards = 10; // Deal hand cards to clients - for(int i = 0; i < d->players.count; i++) + for(int i = 0; i < d->player_list.count; i++) { hand_t h; memset(h.cards, 0, MAX_HAND_CARDS); @@ -47,15 +47,15 @@ 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++) + for(int i = 0; i < d->player_list.count; i++) { - pnoc_t* pl = get_pnoc_from_playerid(&d->players, client_socks->player_ids[i]); - assert(pl != NULL); + player_list_entry_t *ple = get_player_list_entry_by_player_id(&d->player_list, client_socks->player_ids[i]); + assert(ple != NULL); net_recv(client_socks->sockets[i], msg_type_selected_card); - pl->open_card = d->selected_card; + ple->open_card = d->selected_card; } - for(int i = 0; i < d->players.count; i++) + for(int i = 0; i < d->player_list.count; i++) net_send(client_socks->sockets[i], msg_type_selected_card_all, NULL); //return STATE_SERVER_PLAY_CARDS; @@ -207,15 +207,15 @@ void ui_display_wnd_stack_points(const table_stacks_t *ts, const bool highlight, /** * Displays the current state window, showing all player names and their open cards and the client player's score. - * @param[in] pnoc Array of (player name, open card) tuples. Array has to be sorted by open card, lowest open card first + * @param[in] pl Player list. List has to be sorted by open card, in ascending order * @param[in] num_players The number of players to show a player name and open card for * @param[in] highlight If true, a player in the player table will be highlighted * @param[in] highlighted_player The player to highlight * @param[in] score The players score */ -void ui_display_wnd_current_state(const pnoc_t pnoc[], const uint8_t num_players, const bool highlight, const uint8_t highlighted_player, const uint32_t score) +void ui_display_wnd_current_state(const player_list_t *pl, const uint8_t num_players, const bool highlight, const uint8_t highlighted_player, const uint32_t score) { - assert(pnoc != NULL); + assert(pl != NULL); uint8_t pos = 0; wattron(w_current_state, A_BOLD); @@ -228,7 +228,7 @@ void ui_display_wnd_current_state(const pnoc_t pnoc[], const uint8_t num_players for (uint8_t i = 0; i < num_players; i++) { - if (pnoc[i].player_id == 0) // invalid player + if (pl->players[i].player_id == 0) // invalid player continue; if (highlight && i == highlighted_player) @@ -236,19 +236,19 @@ void ui_display_wnd_current_state(const pnoc_t pnoc[], const uint8_t num_players if (pos < 5) { - mvwprintw(w_current_state, 2+pos, 1, "%-s", pnoc[i].player_name); - if (0 == pnoc[i].open_card) + mvwprintw(w_current_state, 2+pos, 1, "%-s", pl->players[i].player_name); + if (0 == pl->players[i].open_card) mvwprintw(w_current_state, 2+pos, 15, "-"); else - mvwprintw(w_current_state, 2+pos, 13, "%3d", pnoc[i].open_card); + mvwprintw(w_current_state, 2+pos, 13, "%3d", pl->players[i].open_card); } else { - mvwprintw(w_current_state, 2+(pos-5), 22, "%-s", pnoc[i].player_name); - if (0 == pnoc[i].open_card) + mvwprintw(w_current_state, 2+(pos-5), 22, "%-s", pl->players[i].player_name); + if (0 == pl->players[i].open_card) mvwprintw(w_current_state, 2+(pos-5), 36, "-"); else - mvwprintw(w_current_state, 2+(pos-5), 34, "%3d", pnoc[i].open_card); + mvwprintw(w_current_state, 2+(pos-5), 34, "%3d", pl->players[i].open_card); } if (highlight && i == highlighted_player) @@ -5,11 +5,11 @@ #include "card.h" #include "table_stacks.h" #include "hand.h" -#include "pnoc.h" +#include "player.h" void ui_display_wnd_table_cards(const table_stacks_t *ts, const bool highlight, const uint8_t highlighted_stack); void ui_display_wnd_stack_points(const table_stacks_t *ts, const bool highlight, const uint8_t highlighted_points); -void ui_display_wnd_current_state(const pnoc_t pnoc[], const uint8_t num_players, const bool highlight, const uint8_t highlighted_player, const uint32_t score); +void ui_display_wnd_current_state(const player_list_t *pl, const uint8_t num_players, const bool highlight, const uint8_t highlighted_player, const uint32_t score); void ui_display_wnd_hand_cards(const hand_t *h, const bool highlight, const uint8_t highlighted_card); uint8_t ui_choose_card(hand_t *h); uint8_t ui_choose_stack(const table_stacks_t *ts); |
