import java.awt.*;
import java.awt.event.*;
import java.util.LinkedList;
public class Greedy_Snake_Canvas extends Canvas {
private Snake snake;
private Food food;
private javax.swing.Timer timer;
private boolean is_running;
public Greedy_Snake_Canvas() {
is_running = false;
this.setBackground(new Color(0, 64, 64));
snake = new Snake(Color.RED, 0);
food = Food.make_new_food(snake.body);
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (!is_running) {
return;
}
switch (e.getKeyCode()) {
case KeyEvent.VK_RIGHT:
if (snake.getMove_direction() != 2) {
int ret = snake.move(0, food);
if (ret == 1) {
food = Food.make_new_food(snake.body);
}
else if (ret == 2) {
end_game();
}
}
repaint();
break;
case KeyEvent.VK_UP:
if (snake.getMove_direction() != 3) {
int ret = snake.move(1, food);
if (ret == 1) {
food = Food.make_new_food(snake.body);
}
else if (ret == 2) {
end_game();
}
}
repaint();
break;
case KeyEvent.VK_LEFT:
if (snake.getMove_direction() != 0) {
int ret = snake.move(2, food);
if (ret == 1) {
food = Food.make_new_food(snake.body);
}
else if (ret == 2) {
end_game();
}
}
repaint();
break;
case KeyEvent.VK_DOWN:
if (snake.getMove_direction() != 1) {
int ret = snake.move(3, food);
if (ret == 1) {
food = Food.make_new_food(snake.body);
}
else if (ret == 2) {
end_game();
}
}
repaint();
break;
}
}
});
timer = new javax.swing.Timer(200, new ActionListener() {
public void actionPerformed(ActionEvent e) {
int ret = snake.move(snake.getMove_direction(), food);
if (ret == 1) {
food = Food.make_new_food(snake.body);
}
else if (ret == 2) {
end_game();
}
repaint();
}
});
}
public void start_game() {
snake = new Snake(Color.RED, 0);
food = Food.make_new_food(snake.body);
timer.start();
is_running = true;
this.requestFocus();
}
public void end_game() {
is_running = false;
timer.stop();
}
public void paint(Graphics g) {
snake.paint(g);
food.paint(g);
}
}