// Scott DeRuiter 12/3/2000 // TopViewTest.java // Use the left and right keys to move the direction of a pointer, then // use the spacebar to move that point. Also, use the up and down // arrow keys to change the magnitude of the motion. // 3/13/2013 Greenstein: changed applet to JFrame import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TopViewTest implements KeyListener, FocusListener, MouseListener { GamePiece mypiece; private JFrame frame; private DrawingArea canvas; public TopViewTest ( ) { mypiece = new GamePiece ( 350, 225, 700, 450, 20, 15, Color.blue ); } public static void main(String[] args) { TopViewTest tvt = new TopViewTest(); tvt.Run(); } public void Run ( ) { // Create a frame to hold everything frame = new JFrame ("TopViewTest"); frame.setSize(500, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //frame.setBackground(Color.black); // only needed if frame is larger than panel // Define panel to draw on canvas = new DrawingArea(); // create a panel to draw on canvas.setBackground(Color.lightGray); canvas.addFocusListener(this); canvas.addKeyListener(this); canvas.addMouseListener(this); // connects the MouseListerner to the panel window // Put frame together frame.getContentPane().add(canvas); // puts panel on frame frame.setVisible(true); } class DrawingArea extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); mypiece.draw ( g ); } } public void focusGained(FocusEvent evt) { canvas.repaint(); } public void focusLost(FocusEvent evt) { canvas.repaint(); } public void mousePressed(MouseEvent evt) { canvas.requestFocus(); } public void mouseEntered(MouseEvent evt) { } public void mouseExited(MouseEvent evt) { } public void mouseReleased(MouseEvent evt) { } public void mouseClicked(MouseEvent evt) { } public void keyTyped ( KeyEvent e ) {} public void keyPressed ( KeyEvent e ) { int value = e.getKeyCode(); if ( value == KeyEvent.VK_RIGHT ) { mypiece.changedegree ( 6 ); canvas.repaint (); } else if ( value == KeyEvent.VK_LEFT )
{ mypiece.changedegree ( -6 ); canvas.repaint (); } else if ( value == KeyEvent.VK_SPACE ) { mypiece.move(); canvas.repaint(); } else if ( value == KeyEvent.VK_UP ) { mypiece.changemagnitude ( 2 ); canvas.repaint (); } else if ( value == KeyEvent.VK_DOWN ) { mypiece.changemagnitude ( -2 ); canvas.repaint(); } } public void keyReleased ( KeyEvent e ) {} } class GamePiece { private int xpos, ypos, width, height, degree, motionmag; private Color piece; public GamePiece ( int x, int y, int w, int h, int d, int m, Color p ) { xpos = x; ypos = y; width = w; height = h; degree = d; motionmag = m; piece = p; } public void draw ( Graphics g ) { int [] x = new int [5]; int [] y = new int [5]; double dx = Math.PI / 4; double piecesize = width / 20.0; x[0] = (int) ( xpos + piecesize * Math.cos ( degree * Math.PI / 180 + 3 * dx )); x[1] = (int) ( xpos + piecesize * Math.cos ( degree * Math.PI / 180 + dx )); x[2] = (int) ( xpos + 2 * piecesize * Math.cos ( degree * Math.PI / 180 )); x[3] = (int) ( xpos + piecesize * Math.cos ( degree * Math.PI / 180 - dx )); x[4] = (int) ( xpos + piecesize * Math.cos ( degree * Math.PI / 180 - 3 * dx )); y[0] = (int) ( ypos + piecesize * Math.sin ( degree * Math.PI / 180 + 3 * dx )); y[1] = (int) ( ypos + piecesize * Math.sin ( degree * Math.PI / 180 + dx )); y[2] = (int) ( ypos + 2 * piecesize * Math.sin ( degree * Math.PI / 180 )); y[3] = (int) ( ypos + piecesize * Math.sin ( degree * Math.PI / 180 - dx )); y[4] = (int) ( ypos + piecesize * Math.sin ( degree * Math.PI / 180 - 3 * dx )); g.setColor ( piece ); g.fillPolygon ( x, y, 5 ); } public void move () { xpos = (int) ( xpos + motionmag * Math.cos( degree * Math.PI / 180 )); ypos = (int) ( ypos + motionmag * Math.sin( degree * Math.PI / 180 )); if ( xpos > width - 20 ) xpos = width - 20; if ( xpos < 20 ) xpos = 20; if ( ypos > height - 20 ) ypos = height - 20; if ( ypos < 20 ) ypos = 20; } public void changemagnitude ( int addto ) { motionmag += addto; if ( motionmag > 40 ) motionmag = 40; if ( motionmag < 6 ) motionmag = 6; } public void changedegree ( int addto ) { degree += addto; if ( degree >= 360 ) degree -= 360; else if ( degree <= 0 ) degree += 360; } }