import javax.swing.*; import java.awt.*; public class Drunkard{ private int x; private int y; private int numDirection; Drunkard(){ this.numDirection = 8; this.x = 0; this.y = 0; } private void turnLeft(){ switch (this.numDirection){ case (8): this.numDirection = 4; break; case (4): this.numDirection = 2; break; case (2): this.numDirection = 6; break; case (6): this.numDirection = 8; break; } } private void turnRight(){ switch (this.numDirection){ case (8): this.numDirection = 6; break; case (4): this.numDirection = 8; break; case (2): this.numDirection = 4; break; case (6): this.numDirection = 2; break; } } private void moveForward(){ switch (this.numDirection){ case (8): this.y -= 1; break; case (4): this.x -= 1; break; case (2): this.y += 1; break; case (6): this.x += 1; break; } } private void moveBackward(){ switch (this.numDirection){ case (8): this.y += 1; break; case (4): this.x += 1; break; case (2): this.y -= 1; break; case (6): this.x -= 1; break; } } private int getX(){ return this.x; } private int getY(){ return this.y; } private void beDrunk(){ int r = (int)(4 * Math.random()); switch (r){ case 0: turnLeft(); break; case 1: turnRight(); break; case 2: moveForward(); break; case 3: moveBackward(); break; } } private int distance(){ int d = (int)(Math.sqrt((getX()*getX()) + (getY()*getY()))); return d; } public static void main(String[] args){ JFrame window = new JFrame(); window.setSize(400,400); window.setVisible(true); Container contentPane = window.getContentPane(); Graphics g = contentPane.getGraphics(); try { Thread.sleep(5); } catch (InterruptedException e) { System.err.println("sleep exception"); } g.setColor(Color.black); g.fillRect(0,0,400,400); g.setColor(Color.blue); g.fillRect(198,198,4,4); g.setColor(Color.green); Drunkard Tom = new Drunkard(); int p; int q; for (int d = 0; d < 1000; d++){ p = (5 * Tom.getX())+200; q = (5 * Tom.getY())+200; Tom.beDrunk(); g.drawLine(p,q,(5 * Tom.getX())+200,(5 * Tom.getY())+200); g.setColor(Color.blue); g.fillRect(198,198,4,4); g.setColor(Color.green); try { Thread.sleep(5); } catch (InterruptedException e) { System.err.println("sleep exception"); } } g.setColor(Color.blue); g.fillRect((5 * Tom.getX())+198,(5 * Tom.getY())+198,4,4); g.setColor(Color.red); g.drawLine(200,200,(5 * Tom.getX()) + 200, (5 * Tom.getY()) + 200); g.setColor(Color.green); g.drawString("The Drunken Bastard has travelled no more than "+Tom.distance()+" feet!",30,20); } }