| 99 | } |
| 100 | |
| 101 | void move_snake(int snk[2], int ply[2], char maze[l][w]) |
| 102 | { |
| 103 | int x = snk[0]; |
| 104 | int y = snk[1]; |
| 105 | |
| 106 | maze[x][y] = ' '; |
| 107 | int num = 0; |
| 108 | int dist = 1e8; |
| 109 | |
| 110 | // If chaser move up |
| 111 | if (maze[x - 1][y] != 'O' && maze[x - 1][y] != 'X' && x - 1 > 0) |
| 112 | { |
| 113 | int diff = abs(ply[0] - (x - 1)) + abs(ply[1] - (y)); |
| 114 | if (diff < dist) |
| 115 | { |
| 116 | dist = diff; |
| 117 | num = 1; |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | // If chaser move down |
| 122 | if (maze[x + 1][y] != 'O' && maze[x + 1][y] != 'X' && x + 1 < l - 1) |
| 123 | { |
| 124 | int diff = abs(ply[0] - (x + 1)) + abs(ply[1] - (y)); |
| 125 | if (diff < dist) |
| 126 | { |
| 127 | dist = diff; |
| 128 | num = 2; |
| 129 | } |
| 130 | } |
| 131 | |
| 132 | // If chaser move right |
| 133 | if (maze[x][y + 1] != 'O' && maze[x][y + 1] != 'X' && y + 1 < w - 1) |
| 134 | { |
| 135 | int diff = abs(ply[0] - x) + abs(ply[1] - (y + 1)); |
| 136 | if (diff < dist) |
| 137 | { |
| 138 | dist = diff; |
| 139 | num = 3; |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | // If chaser move left |
| 144 | if (maze[x][y - 1] != 'O' && maze[x][y - 1] != 'X' && y - 1 > 0) |
| 145 | { |
| 146 | int diff = abs(ply[0] - x) + abs(ply[1] - (y - 1)); |
| 147 | if (diff < dist) |
| 148 | { |
| 149 | dist = diff; |
| 150 | num = 4; |
| 151 | } |
| 152 | } |
| 153 | |
| 154 | if (num == 1) |
| 155 | { |
| 156 | snk[0]--; |
| 157 | } |
| 158 | else if (num == 2) |