Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.badui;
- import java.awt.AWTException;
- import java.awt.BorderLayout;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Robot;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.InputEvent;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import javax.swing.JTextArea;
- import javax.swing.JTextField;
- import javax.swing.UIManager;
- public class MouseTurtle extends JFrame implements ActionListener {
- private static final long serialVersionUID = -1318655831513696878L;
- private final JTextArea commands = new JTextArea();
- private final JTextField textField = new JTextField();
- private final Robot robot;
- private int mouseX, mouseY;
- private double angle = 0;
- public MouseTurtle(Robot robot) {
- super("Give me the sweet release of death");
- this.robot = robot;
- getContentPane().add(this.commands, BorderLayout.CENTER);
- getContentPane().add(this.textField, BorderLayout.SOUTH);
- this.commands.setPreferredSize(new Dimension(500, 200));
- this.commands.setEnabled(false);
- this.textField.setPreferredSize(new Dimension(500, 25));
- this.textField.addActionListener(this);
- robot.mouseMove(mouseX, mouseY);
- pack();
- setLocationRelativeTo((Component)null);
- setVisible(true);
- setResizable(false);
- this.textField.requestFocus();
- }
- private void parseCommand(String command) {
- String[] parts = command.split(" ");
- if(parts.length != 2 && !parts[0].equalsIgnoreCase("quit")) {
- printLine("Bad command!");
- } else {
- switch(parts[0].toLowerCase()) {
- case "forward":
- moveForward(parts[1], 1);
- break;
- case "backward":
- moveForward(parts[1], -1);
- break;
- case "turn":
- turn(parts[1]);
- break;
- case "mouse":
- if(parts[1].equalsIgnoreCase("down")) {
- robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
- } else if(parts[1].equalsIgnoreCase("up")) {
- robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
- } else {
- printLine("Bad mouse click");
- }
- break;
- case "quit":
- System.exit(0);
- break;
- default:
- printLine("Bad command");
- break;
- }
- }
- }
- private void moveForward(String distStr, double mul) {
- try {
- double dist = Double.parseDouble(distStr) * mul;
- double dx = dist * Math.cos(angle);
- double dy = dist * Math.sin(angle);
- mouseX += (int)dx;
- mouseY += (int)dy;
- robot.mouseMove(mouseX, mouseY);
- printLine("Took " + dist + " steps forward");
- } catch(NumberFormatException e) {
- printLine("Enter a number!");
- }
- }
- private void turn(String angleStr) {
- try {
- double angle = Math.toRadians(Double.parseDouble(angleStr));
- this.angle = (this.angle + angle) % (2 * Math.PI);
- printLine("Turned around by " + Math.toDegrees(angle) + " degrees");
- } catch(NumberFormatException e) {
- printLine("Enter a number!");
- }
- }
- @Override
- public void actionPerformed(ActionEvent e) {
- parseCommand(this.textField.getText());
- this.textField.setText("");
- }
- private void printLine(String line) {
- if(this.commands.getText().isEmpty()) {
- this.commands.setText(line);
- } else {
- this.commands.setText(line + "\n" + this.commands.getText());
- }
- }
- public static void main(String[] args) {
- try {
- try {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- } catch (Exception e) {
- System.err.println("Failed to set look and feel");
- }
- Robot robot = new Robot();
- new MouseTurtle(robot);
- } catch (AWTException e) {
- e.printStackTrace();
- JOptionPane.showMessageDialog(null, "Sorry your computer is too lame to support turtle commands", "Error", JOptionPane.ERROR_MESSAGE);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement