summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2011-01-24 19:38:28 +0100
committerReiner Herrmann <reiner@reiner-h.de>2011-01-24 19:38:28 +0100
commitb5db0fc99830aeab0fb7d055d25af666f9936f0f (patch)
treeec313c7410e5ec26b4be73e0cccd6431c8d50b30
parent7ad775bb09000d2d4ed4a2a7e5510c456998c64f (diff)
added function for drawing cards from main stack; initialize table stacks with drawn cards
-rw-r--r--src/game.c58
1 files changed, 38 insertions, 20 deletions
diff --git a/src/game.c b/src/game.c
index 8250ae0..3f1b496 100644
--- a/src/game.c
+++ b/src/game.c
@@ -34,6 +34,31 @@ static void init_mainstack(card *stack, const uint32_t size)
}
}
+static const card draw_card(card *stack, const uint32_t size)
+{
+ for(uint32_t i=0; i<size; i++)
+ {
+ card c = stack[i];
+ if(c == 0)
+ continue;
+ stack[i] = 0;
+ return c;
+ }
+ return 0; // stack empty
+}
+
+static const uint8_t num_cards_in_stack(const card *stack, const uint32_t size)
+{
+ uint8_t count = 0;
+ for(int i=0; i<size; i++)
+ {
+ if(stack[i] == 0)
+ continue;
+ count++;
+ }
+ return count;
+}
+
static void main_loop_client(int sock)
{
bool running = true;
@@ -60,6 +85,7 @@ static void main_loop_client(int sock)
state = STATE_CLIENT_SELECT_OPEN_CARD;
running = false;
+ sleep(2);
break;
#if 0
case STATE_CLIENT_SELECT_OPEN_CARD:
@@ -130,10 +156,16 @@ static void main_loop_client(int sock)
static void main_loop_server(socket_list_t* client_socks)
{
bool running = true;
- gamestate state = STATE_SERVER_DEAL_HAND_CARDS;
uint8_t round = 1;
+ int cards = MAX_CARD - MIN_CARD + 1;
+ card mainstack[cards];
+ gamestate state = STATE_SERVER_DEAL_HAND_CARDS;
+
data_store *data = datamodel();
+ srand(time(0));
+ init_mainstack(mainstack, cards);
+
while(running)
{
switch(state)
@@ -141,7 +173,11 @@ static void main_loop_server(socket_list_t* client_socks)
case STATE_SERVER_DEAL_HAND_CARDS:
if(round == 1)
{
- // Send table stacks to clients
+ // Draw cards for initial stacks and send them to clients
+ data->table_stacks.stacks[0].cards[0] = draw_card(mainstack, cards);
+ data->table_stacks.stacks[1].cards[0] = draw_card(mainstack, cards);
+ data->table_stacks.stacks[2].cards[0] = draw_card(mainstack, cards);
+ data->table_stacks.stacks[3].cards[0] = draw_card(mainstack, cards);
for(int i = 0; i < data->players.count; i++)
{
net_send(client_socks->sockets[i], msg_type_initial_stacks, NULL);
@@ -231,26 +267,8 @@ 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