game.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #pragma once
  2. #include <stdbool.h>
  3. #include <string.h>
  4. #define NUMBER_OF_PLAYERS 4
  5. #define NUMBER_OF_CARDS 108
  6. #define MAX_HAND_SIZE 30
  7. #define NUMBER_OF_STARTING_CARDS 7
  8. #define PLAYER_NUMBER 1
  9. typedef struct List List;
  10. typedef enum ActionType {
  11. ActionType_None,
  12. ActionType_Skip,
  13. ActionType_Invert,
  14. ActionType_Plus2,
  15. ActionType_ChangeSuit,
  16. ActionType_ChangeSuitPlus4,
  17. } ActionType;
  18. typedef enum CardSuit {
  19. CardSuit_None,
  20. CardSuit_Spades,
  21. CardSuit_Hearts,
  22. CardSuit_Diamonds,
  23. CardSuit_Clubs,
  24. } CardSuit;
  25. typedef struct Card {
  26. CardSuit suit;
  27. int number;
  28. ActionType action;
  29. } Card;
  30. extern Card AllCardsData[NUMBER_OF_CARDS];
  31. extern const int CARD_NONE;
  32. typedef struct GameState GameState;
  33. GameState* game_alloc();
  34. void game_free(GameState* state);
  35. void game_reset(GameState* state);
  36. int game_get_winner(GameState* state);
  37. void game_update_winner(GameState* state);
  38. void game_set_card_to_play(GameState* state, int cardIndex, int forcedSuit);
  39. int game_get_card_to_play(GameState* state);
  40. CardSuit game_get_forced_suit_to_play(GameState* state);
  41. bool game_is_card_valid_to_play(GameState* state, int cardIndex);
  42. void game_apply_card_to_play(GameState* state);
  43. int game_step_draw_card(GameState* state, int playerNumber);
  44. void game_step_play_card(GameState* state, int cardIndex);
  45. void game_step_next_player(GameState* state);
  46. void game_step_reverse(GameState* state);
  47. void game_step_set_suit(GameState* state, int suit);
  48. int game_get_player_turn(GameState* state);
  49. int game_get_next_player(GameState* state);
  50. int game_calculate_next_player(GameState* state, int playerIndex);
  51. int game_get_top_card(GameState* state);
  52. int game_get_card_location(GameState* state, int index);
  53. CardSuit game_get_forced_suit(GameState* state);
  54. void game_get_player_hand(GameState* state, int playerIndex, List* result);
  55. int game_get_player_hand_count(GameState* state, int playerIndex);
  56. void game_get_player_hand_valid_cards(GameState* state, int playerIndex, List* result);
  57. int game_get_player_hand_valid_cards_count(GameState* state, int playerIndex);
  58. int game_get_direction(GameState* state);