import java.awt.Color;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class SnakeFrame extends JFrame {
private JLabel statusLabel;
private JLabel speedLabel;
private JLabel scoreLabel;
private SnakePanel snakePanel;
private Snake snake;
private JMenuBar bar;
private JMenu gameMenu;
private JMenu speedMenu;
private JMenu helpMenu;
private JMenuItem newItem;
private JMenuItem pauseItem;
private JMenuItem beginItem;
private JMenuItem aboutItem;
private JMenuItem slowItem;
private JMenuItem midItem;
private JMenuItem fastItem;
private Image image;
public SnakeFrame(){
init();
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == pauseItem) {
snake.isMove = false;
snake.status = Snake.PAUSED;
statusLabel.setText("Pause");
}
if (e.getSource() == beginItem) {
snake.isMove = true;
snake.status = Snake.MOVING;
statusLabel.setText("Moving");
}
if (e.getSource() == newItem) {
newGame();
}
if (e.getSource() == slowItem) {
snake.speed = Snake.SLOW;
speedLabel.setText("Slow");
}
if (e.getSource() == midItem) {
snake.speed = Snake.MID;
speedLabel.setText("Mid");
}
if (e.getSource() == fastItem) {
snake.speed = Snake.FAST;
speedLabel.setText("Fast");
}
}
};
pauseItem.addActionListener(listener);
beginItem.addActionListener(listener);
newItem.addActionListener(listener);
aboutItem.addActionListener(listener);
slowItem.addActionListener(listener);
midItem.addActionListener(listener);
fastItem.addActionListener(listener);
addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN:
snake.changeDirection(Snake.DOWN);
break;
case KeyEvent.VK_UP:
snake.changeDirection(Snake.UP);
break;
case KeyEvent.VK_LEFT:
snake.changeDirection(Snake.LEFT);
break;
case KeyEvent.VK_RIGHT:
snake.changeDirection(Snake.RIGHT);
break;
case KeyEvent.VK_SPACE:
if (snake.isMove == true) {
snake.isMove = false;
snake.status = Snake.PAUSED;
break;
} else {
snake.isMove = true;
snake.status = Snake.MOVING;
break;
}
}
}
});
}
private void init(){
Toolkit toolkit=Toolkit.getDefaultToolkit();
image=toolkit.getImage("image/heart.png");
speedLabel = new JLabel();
snake = new Snake();
setSize(380, 460);
setLayout(null);
this.setResizable(false);
this.setTitle("Snake");
this.setIconImage(image);
bar = new JMenuBar();
gameMenu = new JMenu("Game");
newItem = new JMenuItem("New Game");
pauseItem = new JMenuItem("Pause");
beginItem = new JMenuItem("Continue");
gameMenu.add(newItem);
gameMenu.add(pauseItem);
gameMenu.add(beginItem);
helpMenu = new JMenu("Help");
aboutItem = new JMenuItem("About");
helpMenu.add(aboutItem);
speedMenu = new JMenu("Speed");
slowItem = new JMenuItem("Slow");
fastItem = new JMenuItem("Fast");
midItem = new JMenuItem("Middle");
speedMenu.add(slowItem);
speedMenu.add(midItem);
speedMenu.add(fastItem);
bar.add(gameMenu);
bar.add(speedMenu);
bar.add(helpMenu);
setJMenuBar(bar);
statusLabel = new JLabel();
scoreLabel = new JLabel();
snakePanel = new SnakePanel(snake);
snakePanel.setBounds(0, 0, 300, 400);
snakePanel.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
add(snakePanel);
statusLabel.setBounds(310, 40, 60, 20);
scoreLabel.setBounds(310, 60, 60, 20);
speedLabel.setBounds(310, 80, 60, 20);
add(statusLabel);
add(scoreLabel);
add(speedLabel);
}
private void newGame() {
this.remove(snakePanel);
this.remove(statusLabel);
this.remove(scoreLabel);
speedLabel.setText("Slow");
statusLabel = new JLabel();
scoreLabel = new JLabel();
snake = new Snake();
snakePanel = new SnakePanel(snake);
snakePanel.setBounds(0, 0, 300, 400);
snakePanel.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
Runnable snakeRunnable = new SnakeRunnable(snake, snakePanel);
Runnable statusRunnable = new StatusRunnable(snake, statusLabel,
scoreLabel);
Thread snakeThread = new Thread(snakeRunnable);
Thread statusThread = new Thread(statusRunnable);
snakeThread.start();
statusThread.start();
add(snakePanel);
statusLabel.setBounds(310, 40, 60, 20);
scoreLabel.setBounds(310, 60, 60, 20);
speedLabel.setBounds(310, 80, 60, 20);
add(statusLabel);
add(scoreLabel);
add(speedLabel);
}
}