Advertisement
jackd5011

Turtle Mouse Movement

Mar 8th, 2022
1,081
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.72 KB | None | 0 0
  1. package com.badui;
  2.  
  3. import java.awt.AWTException;
  4. import java.awt.BorderLayout;
  5. import java.awt.Component;
  6. import java.awt.Dimension;
  7. import java.awt.Robot;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.awt.event.InputEvent;
  11.  
  12. import javax.swing.JFrame;
  13. import javax.swing.JOptionPane;
  14. import javax.swing.JTextArea;
  15. import javax.swing.JTextField;
  16. import javax.swing.UIManager;
  17.  
  18. public class MouseTurtle extends JFrame implements ActionListener {
  19.  
  20.     private static final long serialVersionUID = -1318655831513696878L;
  21.  
  22.     private final JTextArea commands = new JTextArea();
  23.     private final JTextField textField = new JTextField();
  24.    
  25.     private final Robot robot;
  26.    
  27.     private int mouseX, mouseY;
  28.     private double angle = 0;
  29.    
  30.     public MouseTurtle(Robot robot) {
  31.         super("Give me the sweet release of death");
  32.         this.robot = robot;
  33.        
  34.         getContentPane().add(this.commands, BorderLayout.CENTER);
  35.         getContentPane().add(this.textField, BorderLayout.SOUTH);
  36.        
  37.         this.commands.setPreferredSize(new Dimension(500, 200));
  38.         this.commands.setEnabled(false);
  39.         this.textField.setPreferredSize(new Dimension(500, 25));
  40.         this.textField.addActionListener(this);
  41.        
  42.         robot.mouseMove(mouseX, mouseY);
  43.        
  44.         pack();
  45.         setLocationRelativeTo((Component)null);
  46.         setVisible(true);
  47.         setResizable(false);
  48.         this.textField.requestFocus();
  49.     }
  50.    
  51.     private void parseCommand(String command) {
  52.         String[] parts = command.split(" ");
  53.         if(parts.length != 2 && !parts[0].equalsIgnoreCase("quit")) {
  54.             printLine("Bad command!");
  55.         } else {
  56.             switch(parts[0].toLowerCase()) {
  57.             case "forward":
  58.                 moveForward(parts[1], 1);
  59.                 break;
  60.             case "backward":
  61.                 moveForward(parts[1], -1);
  62.                 break;
  63.             case "turn":
  64.                 turn(parts[1]);
  65.                 break;
  66.             case "mouse":
  67.                 if(parts[1].equalsIgnoreCase("down")) {
  68.                     robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
  69.                 } else if(parts[1].equalsIgnoreCase("up")) {
  70.                     robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
  71.                 } else {
  72.                     printLine("Bad mouse click");
  73.                 }
  74.                 break;
  75.             case "quit":
  76.                 System.exit(0);
  77.                 break;
  78.             default:
  79.                 printLine("Bad command");
  80.                 break;
  81.             }
  82.         }
  83.     }
  84.    
  85.     private void moveForward(String distStr, double mul) {
  86.         try {
  87.             double dist = Double.parseDouble(distStr) * mul;
  88.             double dx = dist * Math.cos(angle);
  89.             double dy = dist * Math.sin(angle);
  90.             mouseX += (int)dx;
  91.             mouseY += (int)dy;
  92.             robot.mouseMove(mouseX, mouseY);
  93.             printLine("Took " + dist + " steps forward");
  94.         } catch(NumberFormatException e) {
  95.             printLine("Enter a number!");
  96.         }
  97.     }
  98.    
  99.     private void turn(String angleStr) {
  100.         try {
  101.             double angle = Math.toRadians(Double.parseDouble(angleStr));
  102.             this.angle = (this.angle + angle) % (2 * Math.PI);
  103.             printLine("Turned around by " + Math.toDegrees(angle) + " degrees");
  104.         } catch(NumberFormatException e) {
  105.             printLine("Enter a number!");
  106.         }
  107.     }
  108.    
  109.     @Override
  110.     public void actionPerformed(ActionEvent e) {
  111.         parseCommand(this.textField.getText());
  112.         this.textField.setText("");
  113.     }
  114.    
  115.     private void printLine(String line) {
  116.         if(this.commands.getText().isEmpty()) {
  117.             this.commands.setText(line);
  118.         } else {
  119.             this.commands.setText(line + "\n" + this.commands.getText());
  120.         }
  121.     }
  122.    
  123.     public static void main(String[] args) {
  124.         try {
  125.             try {
  126.                 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  127.             } catch (Exception e) {
  128.                 System.err.println("Failed to set look and feel");
  129.             }
  130.            
  131.             Robot robot = new Robot();
  132.             new MouseTurtle(robot);
  133.         } catch (AWTException e) {
  134.             e.printStackTrace();
  135.             JOptionPane.showMessageDialog(null, "Sorry your computer is too lame to support turtle commands", "Error", JOptionPane.ERROR_MESSAGE);
  136.         }
  137.     }
  138.  
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement