/** Initialize your data structure here.
@param width - screen width
@param height - screen height
@param food - A list of food positions
E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. */
public SnakeGame(int width, int height, int[][] food) {
deque = new LinkedList<>();
@param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down
@return The game's score after the move. Return -1 if game over.
Game over when snake crosses the screen boundary or bites its body. */
public int move(String direction) {
int row = deque.peekFirst() / width;
int col = deque.peekFirst() % width;
int head = row * width + col;
int tail = deque.peekLast();
// temporarily remove tail so that snake's head can move to its last tail
// When snake is out of bound or it touches its body, game is over
if (row < 0 || col < 0 || row >= height || col >= width || set.contains(head)) {
if (foodIndex < food.length && row == food[foodIndex][0] && col == food[foodIndex][1]) {
// 吃食物之后长度会加1,所以把tail放回set里
* Your SnakeGame object will be instantiated and called as such:
* SnakeGame obj = new SnakeGame(width, height, food);
* int param_1 = obj.move(direction);