blob: 39dcec70d22cda63534a0f6a68a097dc016a0efa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include "game.h"
#include "card.h"
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <unistd.h>
#include <assert.h>
#include <curses.h>
void init_mainstack(card* stack, const uint32_t size)
{
// assign card values to main stack
for(uint32_t i=0, val=MIN_CARD; i<size; i++, val++)
stack[i] = val;
// shuffle stack
for(uint32_t i=0; i<3*size; i++)
{
uint32_t x = rand() % size;
uint32_t y = rand() % size;
card tmp = stack[x];
stack[x] = stack[y];
stack[y] = tmp;
}
}
void start_game(void)
{
bool running = true;
int cards = MAX_CARD - MIN_CARD + 1;
card mainstack[cards];
enum gamestate state = STATE_DEALCARDS;
srand(time(0));
init_mainstack(mainstack, cards);
// main game loop
while(running)
{
switch(state)
{
case STATE_DEALCARDS: // deal cards to players (on host)
// dealcards(mainstack);
state = STATE_SELECTCARD;
break;
case STATE_WAIT_CARDS: // wait on client until host has dealt cards
break;
case STATE_SELECTCARD: // player has to select own card, if done, set state to STATE_WAIT_OPPONENTCARDS
break;
case STATE_WAIT_OPPONENTCARDS: // wait until all opponents have selected their open card. Then check if we have the lowest open card. If so, set state to STATE_SELECTSTACK, otherwise to STATE_WAIT_OPPONENTSTACK
break;
case STATE_WAIT_OPPONENTSTACK: // wait until opponent has selected a stack
break;
case STATE_SELECTSTACK: // player has to select a stack and update it (add card/take whole stack). If it was the last player's turn, set state to STATE_SELECTCARD, otherwise to STATE_WAIT_OPPONENTSTACK
break;
default:
assert(false); // should never happen
}
}
}
|