summaryrefslogtreecommitdiff
path: root/src/game.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.c')
-rw-r--r--src/game.c164
1 files changed, 93 insertions, 71 deletions
diff --git a/src/game.c b/src/game.c
index eb157cf..d7e977d 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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);