diff options
| -rw-r--r-- | field.c | 42 | ||||
| -rw-r--r-- | field.h | 2 | ||||
| -rw-r--r-- | ghosts.c | 8 | ||||
| -rw-r--r-- | pac.c | 12 | ||||
| -rw-r--r-- | pacman.c | 11 | 
5 files changed, 56 insertions, 19 deletions
| @@ -60,6 +60,16 @@ int field_has_coin(int x, int y)               (x == 17 && y == 9) || (x == 17 && y == 18));  } +int field_has_energizer(const game_space field, int x, int y) +{ +    return field[y][x] = energizer; +} + +static int yellow_block_contains_coin(int x, int y) +{ +    return (x == 12 && y == 22) || (x == 15 && y == 22); +} +  void print_field(game_space field)  {      int i; @@ -73,7 +83,13 @@ void print_field(game_space field)              case one_path:              case two_paths:              case three_paths: -                if(field_has_coin(i, j)) +                if(field_has_coin(j, i)) +                    addch('.'); +                else +                    addch(' '); +                break; +            case yellow_block: +                if(yellow_block_contains_coin(j, i))                      addch('.');                  else                      addch(' '); @@ -117,7 +133,7 @@ void display_ghosts_on_field(struct ghost_type *red_ghost,                        ghost_char);  } -void clear_or_revert_symbol(game_space field, struct coordinates position, +void clear_or_revert_symbol(const game_space field, struct coordinates position,                              enum select_character character,                              struct queue *eaten_coins)  { @@ -131,8 +147,14 @@ void clear_or_revert_symbol(game_space field, struct coordinates position,          case one_path:          case two_paths:          case three_paths: +            if(field_has_coin(x, y)) +                queue_consists_point(eaten_coins, position) ? +                    addch(' ') : addch('.'); +            else +                addch(' '); +            break;          case yellow_block: -            if(field_has_coin(y, x)) +            if(yellow_block_contains_coin(x, y))                  queue_consists_point(eaten_coins, position) ?                      addch(' ') : addch('.');              else @@ -142,6 +164,8 @@ void clear_or_revert_symbol(game_space field, struct coordinates position,              addch('#');              break;          case energizer: +            field_has_energizer(field, x, y) ? addch('*') : addch(' '); +            break;          case coin:              queue_consists_point(eaten_coins, position) ?                  addch(' ') : addch('.'); @@ -182,8 +206,8 @@ enum intersection_type get_intersection(const game_space field,   * x+1 == right_outside_tunnel_x are used by only pacman (while   * cheking remaining direction)   */ -struct free_directions find_free_directions(const game_space field, int y, -                                            int x) +struct free_directions find_free_directions(const game_space field, int x, +                                            int y)  {      struct free_directions found_paths;      found_paths.left = (field[y][x-1] != '/' && field[y][x-1] != '#') || @@ -210,3 +234,11 @@ void change_point_if_outside_tunnel(struct coordinates *point)      if(point->x == right_outside_tunnel_x)          point->x = left_outside_tunnel_x + 1;  } + +void clear_energizer(game_space field, struct coordinates point) +{ +    int x, y; +    x = point.x; +    y = point.y; +    field[y][x] = ' '; +} @@ -62,4 +62,6 @@ int field_has_coin(int x, int y);  void change_point_if_outside_tunnel(struct coordinates *point); +void clear_energizer(game_space field, struct coordinates point); +  #endif @@ -116,8 +116,8 @@ void make_ghost_moves(game_space field,  static void pave_only_way(game_space field, struct ghost_type *ghost)  { -    struct free_directions path = find_free_directions(field, ghost->position.y, -                                                       ghost->position.x); +    struct free_directions path = find_free_directions(field, ghost->position.x, +                                                       ghost->position.y);      enum movement_direction reverse_direction = ghost->direction;      reverse_direction ^= 1;      if(path.left && left != reverse_direction) @@ -344,7 +344,7 @@ void compute_distance_between_points(game_space field,      initial_point = ghost->position;      min_distance = 0;      struct free_directions consider_paths = -        find_free_directions(field, initial_point.y, initial_point.x); +        find_free_directions(field, initial_point.x, initial_point.y);      if(consider_paths.right && ghost_direction != left) {          changed_initial_point.x = initial_point.x + 1;          changed_initial_point.y = initial_point.y; @@ -399,7 +399,7 @@ void random_redirect(game_space field, struct ghost_type *ghost)  {      enum movement_direction random_direction;      struct free_directions paths = -        find_free_directions(field, ghost->position.y, ghost->position.x); +        find_free_directions(field, ghost->position.x, ghost->position.y);      random_direction = get_random_direction();      while(!is_equal_directions(random_direction, paths))          random_direction = get_random_direction(); @@ -18,7 +18,7 @@ static enum movement_direction get_matching_for_directions(game_space field,                                                                      direction)  {      struct free_directions free_paths = -        find_free_directions(field, pac->position.y, pac->position.x); +        find_free_directions(field, pac->position.x, pac->position.y);      switch(direction) {      case left:          return free_paths.left ? left : none; @@ -40,7 +40,7 @@ void check_remaining_direction(game_space field, struct pacman *pac,  {      enum movement_direction temp_direction;      struct free_directions free_path = -        find_free_directions(field, pac->position.y, pac->position.x); +        find_free_directions(field, pac->position.x, pac->position.y);      enum movement_direction current_direction =          stored_direction ? *stored_direction : pac->direction;      temp_direction = get_correct_path(pac, free_path, current_direction); @@ -86,8 +86,8 @@ void change_pac_direction(game_space field, struct pacman *pac, int key,  {      enum state { no, yes } is_changed_direction;      is_changed_direction = no; -    struct free_directions path = find_free_directions(field, pac->position.y, -                                                       pac->position.x); +    struct free_directions path = find_free_directions(field, pac->position.x, +                                                       pac->position.y);      switch(key) {      case KEY_LEFT:          if(path.left) { @@ -145,8 +145,10 @@ static void eat_energizer(game_space field, struct pacman *pac)      int x, y;      x = pac->position.x;      y = pac->position.y; -    if(field[y][x] == energizer) +    if(field[y][x] == energizer) {          pac->is_energizer_eaten = 1; +        clear_energizer(field, pac->position); +    }  }  void make_pac_move(game_space field, struct pacman *pac, @@ -12,7 +12,7 @@ enum {      sleep_duration          = 190000,      key_escape              = 27,      count_get_out_moves     = 6, -    chase_move_limit        = 100, +    chase_move_limit        = 70,      scatter_move_limit      = 35,      frightened_move_limit   = 30,      phase_limit             = 4 @@ -40,7 +40,8 @@ static void change_mode(struct mode_type *mode_params)              ++mode_params->phase_number;              if(mode_params->phase_number == phase_limit)                  mode_params->current_mode = chase; -            ++mode_params->reverse_direction; +            if(mode_params->phase_number != phase_limit) +                ++mode_params->reverse_direction;          }          break;      case scatter: @@ -293,11 +294,11 @@ int main()  #if 1          move(0, 50);          if(mode_params.current_mode == chase) -            printw("CHASE"); +            printw("CHASE %d        ", mode_params.chase_count);          else if(mode_params.current_mode == scatter) -            printw("SCATTER"); +            printw("SCATTER %d      ", mode_params.scatter_count);          else if(mode_params.current_mode == frightened) -            printw("FRIGHTENED"); +            printw("FRIGHTENED %d      ", mode_params.frightened_count);          refresh();  #endif      } | 
