PBO-B Tugas Rumah Menggambar Pemandangan

Nama  : Putri Endah Puspitasari
NRP    : 05111740000039
Kelas  : PBO-B

Minggu lalu hari Senin, 10 Sepetember 2018 kelas kami mendapat tugas rumah untuk membuat pemandangan gunung dari bangun-bangun dua dimensi. Bangun 2 dimensi yang saya gunakan disini adalah lingkaran, segitiga, dan persegi.

Berikut ini class-class yang saya buat :




1. Canvas 
Merupakan media yang membantu kita untuk menggambar.
Berikut ini merupakan codingan Canvas menggunakan BlueJ


 import javax.swing.*;   
  import java.awt.*;   
  import java.util.List;   
  import java.util.*;   
  public class Canvas   
  {   
   // Note: The implementation of this class (specifically the handling of   
   // shape identity and colors) is slightly more complex than necessary. This   
   // is done on purpose to keep the interface and instance fields of the   
   // shape objects in this project clean and simple for educational purposes.   
   private static Canvas canvasSingleton;   
   /**   
   * Factory method to get the canvas singleton object.   
   */   
   public static Canvas getCanvas()   
   {   
    if(canvasSingleton == null) {   
     canvasSingleton = new Canvas("BlueJ Shapes Demo", 600, 400,    
       Color.white);   
    }   
    canvasSingleton.setVisible(true);   
    return canvasSingleton;   
   }   
   // ----- instance part -----   
   private JFrame frame;   
   private CanvasPane canvas;   
   private Graphics2D graphic;   
   private Color backgroundColour;   
   private Image canvasImage;   
   private List<Object> objects;   
   private HashMap<Object, ShapeDescription> shapes;   
   /**   
   * Create a Canvas.   
   * @param title title to appear in Canvas Frame   
   * @param width the desired width for the canvas   
   * @param height the desired height for the canvas   
   * @param bgClour the desired background colour of the canvas   
   */   
   private Canvas(String title, int width, int height, Color bgColour)   
   {   
    frame = new JFrame();   
    canvas = new CanvasPane();   
    frame.setContentPane(canvas);   
    frame.setTitle(title);   
    canvas.setPreferredSize(new Dimension(width, height));   
    backgroundColour = bgColour;   
    frame.pack();   
    objects = new ArrayList<Object>();   
    shapes = new HashMap<Object, ShapeDescription>();   
   }   
   /**   
   * Set the canvas visibility and brings canvas to the front of screen   
   * when made visible. This method can also be used to bring an already   
   * visible canvas to the front of other windows.   
   * @param visible boolean value representing the desired visibility of   
   * the canvas (true or false)    
   */   
   public void setVisible(boolean visible)   
   {   
    if(graphic == null) {   
     // first time: instantiate the offscreen image and fill it with   
     // the background colour   
     Dimension size = canvas.getSize();   
     canvasImage = canvas.createImage(size.width, size.height);   
     graphic = (Graphics2D)canvasImage.getGraphics();   
     graphic.setColor(backgroundColour);   
     graphic.fillRect(0, 0, size.width, size.height);   
     graphic.setColor(Color.black);   
    }   
    frame.setVisible(visible);   
   }   
   /**   
   * Draw a given shape onto the canvas.   
   * @param referenceObject an object to define identity for this shape   
   * @param color   the color of the shape   
   * @param shape   the shape object to be drawn on the canvas   
   */   
   // Note: this is a slightly backwards way of maintaining the shape   
   // objects. It is carefully designed to keep the visible shape interfaces   
   // in this project clean and simple for educational purposes.   
   public void draw(Object referenceObject, String color, Shape shape)   
   {   
    objects.remove(referenceObject); // just in case it was already there   
    objects.add(referenceObject);  // add at the end   
    shapes.put(referenceObject, new ShapeDescription(shape, color));   
    redraw();   
   }   
   /**   
   * Erase a given shape's from the screen.   
   * @param referenceObject the shape object to be erased    
   */   
   public void erase(Object referenceObject)   
   {   
    objects.remove(referenceObject); // just in case it was already there   
    shapes.remove(referenceObject);   
    redraw();   
   }   
   /**   
   * Set the foreground colour of the Canvas.   
   * @param newColour the new colour for the foreground of the Canvas    
   */   
   public void setForegroundColor(String colorString)   
   {   
    if(colorString.equals("red"))   
     graphic.setColor(Color.red);   
    else if(colorString.equals("black"))   
     graphic.setColor(Color.black);   
    else if(colorString.equals("blue"))   
     graphic.setColor(Color.blue);   
    else if(colorString.equals("yellow"))   
     graphic.setColor(Color.yellow);   
    else if(colorString.equals("green"))   
     graphic.setColor(Color.green);   
    else if(colorString.equals("magenta"))   
     graphic.setColor(Color.magenta);   
    else if(colorString.equals("white"))   
     graphic.setColor(Color.white);   
    else   
     graphic.setColor(Color.black);   
   }   
   /**   
   * Wait for a specified number of milliseconds before finishing.   
   * This provides an easy way to specify a small delay which can be   
   * used when producing animations.   
   * @param milliseconds the number    
   */   
   public void wait(int milliseconds)   
   {   
    try   
    {   
     Thread.sleep(milliseconds);   
    }    
    catch (Exception e)   
    {   
     // ignoring exception at the moment   
    }   
   }   
   /**   
   * Redraw ell shapes currently on the Canvas.   
   */   
   private void redraw()   
   {   
    erase();   
    for(Iterator i=objects.iterator(); i.hasNext(); ) {   
     ((ShapeDescription)shapes.get(i.next())).draw(graphic);   
    }   
    canvas.repaint();   
   }   
   /**   
   * Erase the whole canvas. (Does not repaint.)   
   */   
   private void erase()   
   {   
    Color original = graphic.getColor();   
    graphic.setColor(backgroundColour);   
    Dimension size = canvas.getSize();   
    graphic.fill(new Rectangle(0, 0, size.width, size.height));   
    graphic.setColor(original);   
   }   
   /************************************************************************   
   * Inner class CanvasPane - the actual canvas component contained in the   
   * Canvas frame. This is essentially a JPanel with added capability to   
   * refresh the image drawn on it.   
   */   
   private class CanvasPane extends JPanel   
   {   
    public void paint(Graphics g)   
    {   
     g.drawImage(canvasImage, 0, 0, null);   
    }   
   }   
   /************************************************************************   
   * Inner class CanvasPane - the actual canvas component contained in the   
   * Canvas frame. This is essentially a JPanel with added capability to   
   * refresh the image drawn on it.   
   */   
   private class ShapeDescription   
   {   
    private Shape shape;   
    private String colorString;   
    public ShapeDescription(Shape shape, String color)   
    {   
     this.shape = shape;   
     colorString = color;   
    }   
    public void draw(Graphics2D graphic)   
    {   
     setForegroundColor(colorString);   
     graphic.fill(shape);   
    }   
   }   
  }   


2. Picture
Untuk menampilkan keseluruhan gambar. Disini dapat mengubah ukuran bangun serta warna sesuai yang diinginkan.
Berikut ini merupakan codingan Picture menggunakan BlueJ


  public class Picture   
  {   
   private Square TopBackground;  
   private Square BotBackground;  
   private Triangle leftMount;  
   private Triangle rightMount;  
   private Triangle rood;  
   private Circle sun;  
   private Circle Cloud;   
   private Circle Cloud1;  
   private Circle Cloud2;  
   private Circle Cloud3;  
   private Circle Cloud4;  
   private Circle Cloud5;  
   private Square leftTrunk;  
   private Square leftTrunk1;  
   private Circle leftTree;  
   private Square rightTrunk;  
   private Square rightTrunk1;  
   private Square rightTree;  
   /**   
   * Constructor for objects of class Picture   
   */   
   public Picture()   
   {  
     TopBackground = new Square();  
     TopBackground.changeColor("black");   
     TopBackground.moveHorizontal(-267);   
     TopBackground.moveVertical(-200);   
     TopBackground.changeSize(1000);   
     TopBackground.makeVisible();  
     BotBackground = new Square();  
     BotBackground.changeColor("green");   
     BotBackground.moveHorizontal(-267);   
     BotBackground.changeSize(1000);   
     BotBackground.makeVisible();  
     leftMount = new Triangle();  
     leftMount.changeSize(150, 400);   
     leftMount.moveHorizontal(50);   
     leftMount.moveVertical(40);   
     leftMount.changeColor("blue");  
     leftMount.makeVisible();  
     rightMount = new Triangle();  
     rightMount.changeSize(150,400);  
     rightMount.moveHorizontal(400);  
     rightMount.moveVertical(40);  
     rightMount.changeColor("blue");  
     rightMount.makeVisible();  
     sun = new Circle();  
     sun.changeColor("yellow");  
     sun.moveHorizontal(210);  
     sun.moveVertical(-40);  
     sun.changeSize(80);  
     sun.makeVisible();  
     Cloud = new Circle();  
     Cloud.changeColor("white");  
     Cloud.moveHorizontal(250);  
     Cloud.moveVertical(-40);  
     Cloud.changeSize(40);  
     Cloud.makeVisible();  
     Cloud1 = new Circle();  
     Cloud1.changeColor("white");  
     Cloud1.moveHorizontal(270);  
     Cloud1.moveVertical(-25);  
     Cloud1.changeSize(40);  
     Cloud1.makeVisible();  
     Cloud2 = new Circle();  
     Cloud2.changeColor("white");  
     Cloud2.moveHorizontal(290);  
     Cloud2.moveVertical(-25);  
     Cloud2.changeSize(40);  
     Cloud2.makeVisible();  
     Cloud3 = new Circle();  
     Cloud3.changeColor("white");  
     Cloud3.moveHorizontal(310);  
     Cloud3.moveVertical(-40);  
     Cloud3.changeSize(40);  
     Cloud3.makeVisible();  
     Cloud4 = new Circle();  
     Cloud4.changeColor("white");  
     Cloud4.moveHorizontal(270);  
     Cloud4.moveVertical(-55);  
     Cloud4.changeSize(40);  
     Cloud4.makeVisible();  
     Cloud5 = new Circle();  
     Cloud5.changeColor("white");  
     Cloud5.moveHorizontal(290);  
     Cloud5.moveVertical(-55);  
     Cloud5.changeSize(40);  
     Cloud5.makeVisible();      
     rood = new Triangle();  
     rood.changeSize(195,100);  
     rood.moveHorizontal(225);  
     rood.moveVertical(190);  
     rood.changeColor("grey");  
     rood.makeVisible();  
     leftTrunk = new Square();  
     leftTrunk.changeColor("magenta");  
     leftTrunk.moveHorizontal(220);  
     leftTrunk.moveVertical(130);  
     leftTrunk.changeSize(35);  
     leftTrunk.makeVisible();  
     leftTrunk1 = new Square();  
     leftTrunk1.changeColor("magenta");  
     leftTrunk1.moveHorizontal(220);  
     leftTrunk1.moveVertical(165);  
     leftTrunk1.changeSize(35);  
     leftTrunk1.makeVisible();  
     leftTree = new Circle();  
     leftTree.changeColor("white");  
     leftTree.moveHorizontal(448);  
     leftTree.moveVertical(225);  
     leftTree.changeSize(60);  
     leftTree.makeVisible();  
    // nothing to do... instance variables are automatically set to null   
   }   
   /**   
   * Draw this picture.   
   */   
   public void draw()   
   {   
   }    
  }   


3. Square
Untuk menghasilkan bentuk Persegi yang dapat digambar di canvas.
Berikut ini merupakan codingan Square menggunakan BlueJ

 import java.awt.*;   
  public class Square   
  {   
   private int size;   
   private int xPosition;   
   private int yPosition;   
   private String color;   
   private boolean isVisible;   
   /**   
   * Create a new square at default position with default color.   
   */   
   public Square()   
   {   
    size = 100;   
    xPosition = 260;   
    yPosition = 200;   
    color = "red";   
    isVisible = false;   
   }   
   /**   
   * Make this square visible. If it was already visible, do nothing.   
   */   
   public void makeVisible()   
   {   
    isVisible = true;   
    draw();   
   }   
   /**   
   * Make this square invisible. If it was already invisible, do nothing.   
   */   
   public void makeInvisible()   
   {   
    erase();   
    isVisible = false;   
   }   
   /**   
   * Move the square a few pixels to the right.   
   */   
   public void moveRight()   
   {   
    moveHorizontal(20);   
   }   
   /**   
   * Move the square a few pixels to the left.   
   */   
   public void moveLeft()   
   {   
    moveHorizontal(-20);   
   }   
   /**   
   * Move the square a few pixels up.   
   */   
   public void moveUp()   
   {   
    moveVertical(-20);   
   }   
   /**   
   * Move the square a few pixels down.   
   */   
   public void moveDown()   
   {   
    moveVertical(20);   
   }   
   /**   
   * Move the square horizontally by 'distance' pixels.   
   */   
   public void moveHorizontal(int distance)   
   {   
    erase();   
    xPosition += distance;   
    draw();   
   }   
   /**   
   * Move the square vertically by 'distance' pixels.   
   */   
   public void moveVertical(int distance)   
   {   
    erase();   
    yPosition += distance;   
    draw();   
   }   
   /**   
   * Slowly move the square horizontally by 'distance' pixels.   
   */   
   public void slowMoveHorizontal(int distance)   
   {   
    int delta;   
    if(distance < 0)    
    {   
     delta = -1;   
     distance = -distance;   
    }   
    else    
    {   
     delta = 1;   
    }   
    for(int i = 0; i < distance; i++)   
    {   
     xPosition += delta;   
     draw();   
    }   
   }   
   /**   
   * Slowly move the square vertically by 'distance' pixels.   
   */   
   public void slowMoveVertical(int distance)   
   {   
    int delta;   
    if(distance < 0)    
    {   
     delta = -1;   
     distance = -distance;   
    }   
    else    
    {   
     delta = 1;   
    }   
    for(int i = 0; i < distance; i++)   
    {   
     yPosition += delta;   
     draw();   
    }   
   }   
   /**   
   * Change the size to the new size (in pixels). Size must be >= 0.   
   */   
   public void changeSize(int newSize)   
   {   
    erase();   
    size = newSize;   
    draw();   
   }   
   /**   
   * Change the color. Valid colors are "red", "yellow", "blue", "green",   
   * "magenta" and "black".   
   */   
   public void changeColor(String newColor)   
   {   
    color = newColor;   
    draw();   
   }   
   /*   
   * Draw the square with current specifications on screen.   
   */   
   private void draw()   
   {   
    if(isVisible) {   
     Canvas canvas = Canvas.getCanvas();   
     canvas.draw(this, color,   
       new Rectangle(xPosition, yPosition, size, size));   
     canvas.wait(10);   
    }   
   }   
   /*   
   * Erase the square on screen.   
   */   
   private void erase()   
   {   
    if(isVisible) {   
     Canvas canvas = Canvas.getCanvas();   
     canvas.erase(this);   
    }   
   }   
  }   


4. Triangle
Untuk menghasilkan bentuk Segitiga yang dapat digambar di canvas.
Berikut ini merupakan codingan Triangle menggunakan BlueJ


  import java.awt.*;   
  public class Triangle   
  {   
   private int height;   
   private int width;   
   private int xPosition;   
   private int yPosition;   
   private String color;   
   private boolean isVisible;   
   /**   
   * Create a new triangle at default position with default color.   
   */   
   public Triangle()   
   {   
    height = 30;   
    width = 40;   
    xPosition = 50;   
    yPosition = 15;   
    color = "blue";   
    isVisible = false;   
   }   
   /**   
   * Make this triangle visible. If it was already visible, do nothing.   
   */   
   public void makeVisible()   
   {   
    isVisible = true;   
    draw();   
   }   
   /**   
   * Make this triangle invisible. If it was already invisible, do nothing.   
   */   
   public void makeInvisible()   
   {   
    erase();   
    isVisible = false;   
   }   
   /**   
   * Move the triangle a few pixels to the right.   
   */   
   public void moveRight()   
   {   
    moveHorizontal(20);   
   }   
   /**   
   * Move the triangle a few pixels to the left.   
   */   
   public void moveLeft()   
   {   
    moveHorizontal(-20);   
   }   
   /**   
   * Move the triangle a few pixels up.   
   */   
   public void moveUp()   
   {   
    moveVertical(-20);   
   }   
   /**   
   * Move the triangle a few pixels down.   
   */   
   public void moveDown()   
   {   
    moveVertical(20);   
   }   
   /**   
   * Move the triangle horizontally by 'distance' pixels.   
   */   
   public void moveHorizontal(int distance)   
   {   
    erase();   
    xPosition += distance;   
    draw();   
   }   
   /**   
   * Move the triangle vertically by 'distance' pixels.   
   */   
   public void moveVertical(int distance)   
   {   
    erase();   
    yPosition += distance;   
    draw();   
   }   
   /**   
   * Slowly move the triangle horizontally by 'distance' pixels.   
   */   
   public void slowMoveHorizontal(int distance)   
   {   
    int delta;   
    if(distance < 0)    
    {   
     delta = -1;   
     distance = -distance;   
    }   
    else    
    {   
     delta = 1;   
    }   
    for(int i = 0; i < distance; i++)   
    {   
     xPosition += delta;   
     draw();   
    }   
   }   
   /**   
   * Slowly move the triangle vertically by 'distance' pixels.   
   */   
   public void slowMoveVertical(int distance)   
   {   
    int delta;   
    if(distance < 0)    
    {   
     delta = -1;   
     distance = -distance;   
    }   
    else    
    {   
     delta = 1;   
    }   
    for(int i = 0; i < distance; i++)   
    {   
     yPosition += delta;   
     draw();   
    }   
   }   
   /**   
   * Change the size to the new size (in pixels). Size must be >= 0.   
   */   
   public void changeSize(int newHeight, int newWidth)   
   {   
    erase();   
    height = newHeight;   
    width = newWidth;   
    draw();   
   }   
   /**   
   * Change the color. Valid colors are "red", "yellow", "blue", "green",   
   * "magenta" and "black".   
   */   
   public void changeColor(String newColor)   
   {   
    color = newColor;   
    draw();   
   }   
   /*   
   * Draw the triangle with current specifications on screen.   
   */   
   private void draw()   
   {   
    if(isVisible) {   
     Canvas canvas = Canvas.getCanvas();   
     int[] xpoints = { xPosition, xPosition + (width/2), xPosition - (width/2) };   
     int[] ypoints = { yPosition, yPosition + height, yPosition + height };   
     canvas.draw(this, color, new Polygon(xpoints, ypoints, 3));   
     canvas.wait(10);   
    }   
   }   
   /*   
   * Erase the triangle on screen.   
   */   
   private void erase()   
   {   
    if(isVisible) {   
     Canvas canvas = Canvas.getCanvas();   
     canvas.erase(this);   
    }   
   }   
  }   


5. Circle
Untuk menghasilkan bentuk Ligkaran yang dapat digambar di canvas.
Berikut ini merupakan codingan Circle menggunakan BlueJ

  import java.awt.*;   
  import java.awt.geom.*;   
  public class Circle   
  {   
   private int diameter;   
   private int xPosition;   
   private int yPosition;   
   private String color;   
   private boolean isVisible;   
   /**   
   * Create a new circle at default position with default color.   
   */   
   public Circle()   
   {   
    diameter = 30;   
    xPosition = 20;   
    yPosition = 60;   
    color = "blue";   
    isVisible = false;   
   }   
   /**   
   * Make this circle visible. If it was already visible, do nothing.   
   */   
   public void makeVisible()   
   {   
    isVisible = true;   
    draw();   
   }   
   /**   
   * Make this circle invisible. If it was already invisible, do nothing.   
   */   
   public void makeInvisible()   
   {   
    erase();   
    isVisible = false;   
   }   
   /**   
   * Move the circle a few pixels to the right.   
   */   
   public void moveRight()   
   {   
    moveHorizontal(20);   
   }   
   /**   
   * Move the circle a few pixels to the left.   
   */   
   public void moveLeft()   
   {   
    moveHorizontal(-20);   
   }   
   /**   
   * Move the circle a few pixels up.   
   */   
   public void moveUp()   
   {   
    moveVertical(-20);   
   }   
   /**   
   * Move the circle a few pixels down.   
   */   
   public void moveDown()   
   {   
    moveVertical(20);   
   }   
   /**   
   * Move the circle horizontally by 'distance' pixels.   
   */   
   public void moveHorizontal(int distance)   
   {   
    erase();   
    xPosition += distance;   
    draw();   
   }   
   /**   
   * Move the circle vertically by 'distance' pixels.   
   */   
   public void moveVertical(int distance)   
   {   
    erase();   
    yPosition += distance;   
    draw();   
   }   
   /**   
   * Slowly move the circle horizontally by 'distance' pixels.   
   */   
   public void slowMoveHorizontal(int distance)   
   {   
    int delta;   
    if(distance < 0)    
    {   
     delta = -1;   
     distance = -distance;   
    }   
    else    
    {   
     delta = 1;   
    }   
    for(int i = 0; i < distance; i++)   
    {   
     xPosition += delta;   
     draw();   
    }   
   }   
   /**   
   * Slowly move the circle vertically by 'distance' pixels.   
   */   
   public void slowMoveVertical(int distance)   
   {   
    int delta;   
    if(distance < 0)    
    {   
     delta = -1;   
     distance = -distance;   
    }   
    else    
    {   
     delta = 1;   
    }   
    for(int i = 0; i < distance; i++)   
    {   
     yPosition += delta;   
     draw();   
    }   
   }   
   /**   
   * Change the size to the new size (in pixels). Size must be >= 0.   
   */   
   public void changeSize(int newDiameter)   
   {   
    erase();   
    diameter = newDiameter;   
    draw();   
   }   
   /**   
   * Change the color. Valid colors are "red", "yellow", "blue", "green",   
   * "magenta" and "black".   
   */   
   public void changeColor(String newColor)   
   {   
    color = newColor;   
    draw();   
   }   
   /*   
   * Draw the circle with current specifications on screen.   
   */   
   private void draw()   
   {   
    if(isVisible) {   
     Canvas canvas = Canvas.getCanvas();   
     canvas.draw(this, color, new Ellipse2D.Double(xPosition, yPosition,    
       diameter, diameter));   
     canvas.wait(10);   
    }   
   }   
   /*   
   * Erase the circle on screen.   
   */   
   private void erase()   
   {   
    if(isVisible) {   
     Canvas canvas = Canvas.getCanvas();   
     canvas.erase(this);   
    }   
   }   
  }   

Berikut ini merupakan hasil akhir atau hasil gambar dari codingan saya 



Komentar

Postingan populer dari blog ini

ETS PBO - B Manless Parking System

Foxes and Rabbits Project

Evaluasi Akhir Semester PBO 2018 : Image Editor