import java.awt.*; import java.awt.event.*; import javax.swing.*; /** Huvudklassen som visar fönstret och sköter kommunikationen * med spelmaskinen. * @author Markus Forsberg * @version 2003-03-04 */ public class Game extends JFrame implements KeyListener{ Board board; Engine engine; JLabel score; JLabel highscore; /** * @param title Namnet på fönstret * @param width bredden på spelplanen * @param height höjden på spelplanen * @param columns antal kolumner på spelplanen * @param rows antal rader på spelplanen * @param grid om vi skall visa rutmönstret eller inte. */ public Game( String title, int width, int height, int columns, int rows, boolean grid ){ setTitle(title); board = new Board(width,height,columns,rows,grid); board.addKeyListener(this); // tangentbordslyssnare engine = new Engine(board); getContentPane().add(BorderLayout.CENTER,board); Font f = new Font("Monospaced",Font.BOLD,24); score = new JLabel("Score: " + engine.score()); score.setFont(f); highscore = new JLabel("Highscore: " + engine.highscore()); highscore.setFont(f); JPanel label_panel = new JPanel(new GridLayout(1,2)); label_panel.add(score); label_panel.add(highscore); getContentPane().add(BorderLayout.NORTH,label_panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addKeyListener(this); // lägger till tangentbordslyssnare till // fönstret också. pack(); show(); } /** metod för att pausa ett antal millisekunder. * @param milliseconds Antal millisekunder som vi pausar. */ public void wait(int milliseconds){ try { Thread.sleep(milliseconds);} catch (InterruptedException e){} } /** Startar spelet. */ public void run(){ while(!engine.collision()){ // Så länge vi inte kolliderat med något wait(engine.speed()); // vi väntar ett antal millisekunder. engine.move(); // vi förflyttar oss. score.setText("Score: " + engine.score()); // uppdaterar poängen. board.repaint(); // ritar om spelbrädet. } // Vi har kolliderat... board.gameover(); // Visar Game Over på spelplanen. highscore.setText("Highscore: " + engine.highscore()); // updaterar highscore. wait(1000); // pausar en sekund. board.reset(); // rensar spelplanen. engine.restart(); // startar om spelmaskinen. run(); // Startar om spelet. } /** Tar hand om tangentstyrningen. * Vi lyssnar på två tangenter, vänsterpil och högerpil. * @param e information om vilken tangent som trycks ned. */ public void keyPressed(KeyEvent e){ if(e.getKeyCode() == KeyEvent.VK_LEFT) // vänsterpil engine.turnLeft(); // Svänger vänster. else if(e.getKeyCode() == KeyEvent.VK_RIGHT) // högerpil. engine.turnRight(); // Svänger höger. } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} /** Skapar och kör ett spel */ public static void main(String[] args){ Game game = new Game("Game",500,400,50,40,true); game.run(); } }