Advertisement
WizartCraftCode

move.c

Mar 17th, 2024 (edited)
698
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.71 KB | Source Code | 0 0
  1. //
  2. // Created by merlin on 2/26/2024.
  3. //
  4. #include <malloc.h>
  5. #include "move.h"
  6.  
  7.  
  8. void setup_move_stack(move_stack_t *stack)
  9. {
  10.     for(int i=0;i<MOVE_HISTORY_SIZE;i++)
  11.     {
  12.         stack->move_history[i] = NO_MOVE;
  13.     }
  14.     stack->size = MOVE_HISTORY_SIZE;
  15.     stack->stack_top = -1;
  16. }
  17.  
  18. bool push(enum move_direction item, move_stack_t *stack) {
  19.     if (!is_full(*stack)) {
  20.         ++(stack->stack_top);
  21.         stack->move_history[stack->stack_top] = item;
  22.         return true;
  23.     } else {
  24.         return false;
  25.     }
  26. }
  27.  
  28. bool pop(move_stack_t *stack, enum move_direction *dir_popped) {
  29.     if (!is_empty(*stack)) {
  30.         *dir_popped = stack->move_history[stack->stack_top];
  31.         --(stack->stack_top);
  32.         return true;
  33.     } else {
  34.         return false;
  35.     }
  36. }
  37.  
  38. bool is_full(move_stack_t stack) {
  39.     return (stack.stack_top >= stack.size - 1);
  40. }
  41.  
  42. bool is_empty(move_stack_t stack) {
  43.     return stack.stack_top < 0;
  44. }
  45.  
  46. int height(move_stack_t stack)
  47. {
  48.     return stack.stack_top+1;
  49. }
  50.  
  51. #define CHANGE_FOR_X 0
  52. #define CHANGE_FOR_Y 1
  53. int change_in_position[][2] =
  54.         {{0,  0},
  55.          {0,  1},
  56.          {1,  0},
  57.          {0,  -1},
  58.          {-1, 0}};
  59.  
  60. void move(player_t *player, enum move_direction direction)
  61. {
  62.     player->x_position += change_in_position[direction][CHANGE_FOR_X];
  63.     player->y_position += change_in_position[direction][CHANGE_FOR_Y];
  64.     push(direction, &(player->move_stack));
  65. }
  66.  
  67. void undo(player_t *player)
  68. {
  69.     enum move_direction move_to_undo;
  70.     pop(&(player->move_stack), &move_to_undo);
  71.     player->x_position -= change_in_position[move_to_undo][CHANGE_FOR_X];
  72.     player->y_position -= change_in_position[move_to_undo][CHANGE_FOR_Y];
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement