summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client_game_states.c4
-rw-r--r--src/game.c12
-rw-r--r--src/global.h2
-rw-r--r--src/net/client.c16
-rw-r--r--src/net/server.c34
-rw-r--r--src/player.c21
-rw-r--r--src/player.h19
-rw-r--r--src/pnoc.c18
-rw-r--r--src/pnoc.h17
-rw-r--r--src/server_game_states.c16
-rw-r--r--src/ui.c20
-rw-r--r--src/ui.h4
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
diff --git a/src/game.c b/src/game.c
index 3f6973d..1c86c73 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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;
diff --git a/src/ui.c b/src/ui.c
index 5dd7196..661219a 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -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)
diff --git a/src/ui.h b/src/ui.h
index 47a45b0..048aca6 100644
--- a/src/ui.h
+++ b/src/ui.h
@@ -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);