import [Link].
*;
import [Link].*;
import [Link].*;
import [Link];
import [Link];
public class SnakeGame extends JPanel implements ActionListener, KeyListener {
private class Tile {
int x;
int y;
Tile(int x, int y) {
this.x = x;
this.y = y;
}
}
Tile snakeHead;
ArrayList<Tile> snakeBody;
Tile food;
Random random;
Timer gameLoop;
int velocityX;
int velocityY;
boolean gameOver = false;
int tileSize = 25;
int boardWidth = 600;
int boardHeight = 600;
JFrame frame = new JFrame();
public void initialBoard() {
[Link]("Snake");
[Link](boardWidth, boardHeight);
[Link](false);
[Link](null);
[Link](JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(boardWidth, boardHeight));
setBackground([Link]);
addKeyListener(this);
setFocusable(true);
[Link](this);
[Link]();
[Link](true);
}
public void SnakeGame() {
snakeHead = new Tile(5, 5);
snakeBody = new ArrayList<Tile>();
food = new Tile(10, 10);
random = new Random();
placeFood();
velocityX = 0;
velocityY = 1;
gameLoop = new Timer(130, this);
[Link]();
}
public void paintComponent(Graphics g) {
[Link](g);
draw(g);
}
public void draw(Graphics g) {
//food
[Link]([Link]);
g.fill3DRect(food.x * tileSize, food.y * tileSize, tileSize, tileSize,
true);
//Snake Head
[Link]([Link]);
g.fill3DRect(snakeHead.x * tileSize, snakeHead.y * tileSize, tileSize,
tileSize, true);
for (int i = 0; i < [Link](); i++) {
Tile snakePart = [Link](i);
g.fill3DRect(snakePart.x * tileSize, snakePart.y * tileSize, tileSize,
tileSize, true);
}
public void placeFood() {
food.x = [Link](boardWidth/tileSize);
food.y = [Link](boardHeight/tileSize);
}
public boolean collision (Tile tileSnake, Tile tileFood) {
return tileSnake.x == tileFood.x && tileSnake.y == tileFood.y;
}
public void move() {
if (collision(snakeHead, food)) {
[Link](new Tile(food.x, food.y));
placeFood();
}
for (int i = [Link]()-1; i >= 0; i--){
Tile snakePart = [Link](i);
if (i == 0) {
snakePart.x = snakeHead.x;
snakePart.y = snakeHead.y;
}
else {
Tile prevSnakePart = [Link](i-1);
snakePart.x = prevSnakePart.x;
snakePart.y = prevSnakePart.y;
}
}
snakeHead.x += velocityX;
snakeHead.y += velocityY;
for (int i = 0; i <[Link](); i++) {
Tile snakePart = [Link](i);
if (collision(snakeHead, snakePart)) {
gameOver = true;
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
move();
repaint();
if (gameOver) {
[Link]();
}
}
@Override
public void keyPressed(KeyEvent e) {
if ([Link]() == KeyEvent.VK_UP) {
velocityX = 0;
velocityY = -1;
}
else if ([Link]() == KeyEvent.VK_DOWN) {
velocityX = 0;
velocityY = 1;
}
else if ([Link]() == KeyEvent.VK_LEFT) {
velocityX = -1;
velocityY = 0;
}
else if ([Link]() == KeyEvent.VK_RIGHT) {
velocityX = 1;
velocityY = 0;
}
@Override
public void keyTyped(KeyEvent e) {
@Override
public void keyReleased(KeyEvent e) {
}
}