package ge.edu.freeuni.sdp.snake.view.swing;
import ge.edu.freeuni.sdp.snake.model.Configuration;
import ge.edu.freeuni.sdp.snake.model.Size;
import ge.edu.freeuni.sdp.snake.presenter.DirectionKey;
import ge.edu.freeuni.sdp.snake.presenter.MazePresenter;
import ge.edu.freeuni.sdp.snake.view.MazeView;
import ge.edu.freeuni.sdp.snake.view.swing.screen.Screen;
import ge.edu.freeuni.sdp.snake.view.swing.screen.SwingBlackScreen;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class SwingMazeView implements MazeView, KeyListener {
private DirectionKey key;
private MazePresenter presenter;
private JFrame frame;
private void sleep() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public SwingMazeView(MazePresenter presenter, JFrame frame) {
this.frame = frame;
this.presenter = presenter;
this.key = DirectionKey.None;
}
@Override
public void show() {
Size size = Configuration.getInstance().getSize();
Screen screen = new SwingBlackScreen(size, 15);
frame.addKeyListener(this);
frame.add(screen);
frame.pack();
center();
frame.setVisible(true);
this.presenter.setCellUpdateListener(new SwingMazeViewUpdater(screen));
this.presenter.setLivesUpdateListener(new SwingLivesViewUpdater());
while (true) {
if (presenter.isGameOver())
break;
presenter.tick(key);
key = DirectionKey.None;
this.sleep();
}
frame.setVisible(false);
}
public void center() {
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(
dim.width/2-frame.getSize().width/2,
dim.height/2-frame.getSize().height/2);
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
this.key = DirectionKey.Up;
break;
case KeyEvent.VK_DOWN:
this.key = DirectionKey.Down;
break;
case KeyEvent.VK_LEFT:
this.key = DirectionKey.Left;
break;
case KeyEvent.VK_RIGHT:
this.key = DirectionKey.Right;
break;
default:
this.key = DirectionKey.None;
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}