Search code examples
javahelpergetter

Writing Java helper method


I have 4 classes, Rocket, Triangle, Square, and Circle.

Rocket is the main class, which allows a representation of a rocket to be created in an animated screen. The rocket is made up of the 3 shapes, the triangle being the nose, the square the body, and the circle the jet. The rocket is orientated in a vertical formation. The 3 other classes define the characteristics of the shapes.

I need to write a helper method 'getBodyXPos()' so it returns an appropriate value, relative to the position of the nose. The position of the nose has already been defined, so I need to use existing values within the code so that if the nose is moved the body will move its position with it, i.e not hardcoded values.

This is my first post, so sorry for the code dump. I'm pretty sure this has a very simple solution, but I'm pretty new to Java and can't for the life of me find a way to get the values I need. Any help would be appreciated, thanks!

The Rocket Class

import ou.*;
public class Rocket
{   
   private Triangle nose;      // represents the rocket's nose cone
   private Square body;        // represents the rocket's body
   private Circle jet;         // represents the blast from the rocket's engine

   /**
    * Constructor for objects of class Rocket
    */
   public Rocket(Triangle t, Square s, Circle c)
   {
      //references to the  shape objects
      this.nose = t;
      this.body = s; 
      this.jet = c;    

      //sets the initial positions of the nose.
      //The other parts need to be set relative to these positions.
      this.nose.setXPos(50);
      this.nose.setYPos(300);

      //sets the body relative to the nose, using the helper methods
      this.body.setXPos(getBodyXPos());
      this.body.setYPos(getBodyYPos());      

      this.jet.setColour(OUColour.WHITE); 
      this.jet.setDiameter(10);           

      this.jet.setXPos(getJetXPos()); 
      this.jet.setYPos(getJetYPos()); 
   }

   private int getBodyXPos()
   {
     //SOLUTION HERE
     return 0;
   }

   private int getBodyYPos()
   {
          
     return 0;
   }
}

The Triangle Class

import ou.*;

public class Triangle extends OUAnimatedObject
{
/* Instance variables */

   private OUColour colour;
   private int xPos;
   private int yPos;
   private int width;
   private int height;
   
   /**
    * Constructor for objects of class Triangle with the default characteristics.
    */
   public Triangle()
   {
      this.colour = OUColour.RED;
      this.xPos = 0;
      this.yPos = 0;
      this.width = 20;
      this.height = 20;
   }

/* Instance methods */     
     
   /**
    * Sets the colour of the receiver to the value of the argument aColour.
    */
   public void setColour (OUColour aColour)
   {
      this.colour = aColour;
      this.update();
   }
   
   /**
    * Returns the colour of the receiver.
    */
   public OUColour getColour ()
   {
      return this.colour;
   }
   
   /**
    * Sets the horizontal position of the receiver to the value of the argument x.
    */
   public void setXPos(int x)
   {
      this.xPos = x;
      this.update();
   }
   
   /**
    * Returns the horizontal position of the receiver.
    */
   public int getXPos()
   {
      return this.xPos;
   }
   
   /**
    * Sets the vertical position of the receiver to the value of the argument y.
    */
   public void setYPos(int y)
   {
      this.yPos = y;
      this.update();
   }
   
   /**
    * Returns the vertical position of the receiver.
    */
   public int getYPos()
   {
      return this.yPos;
   }
   
   /**
    * Sets the width of the receiver to the value of the argument aWidth.
    */
   public void setWidth(int aWidth)
   {
      this.width = aWidth;
      this.update();
   }
   
   /**
    * Returns the width of the receiver.
    */
   public int getWidth()
   {
      return this.width;
   }
   
   /**
    * Sets the height of the receiver to the value of the argument aHeight.
    */
   public void setHeight(int aHeight)
   {
      this.height = aHeight;
      this.update();
   }
   
   /**
    * Returns the height of the receiver.
    */
   public int getHeight()
   {
      return this.height;
   }
   
   /**
    * Returns a string representation of the receiver.
    */
   public String toString()
   {
      return "An instance of class "+ this.getClass().getName() 
             + ": position (" + this.getXPos() + ", " + this.getYPos()
             + "), width " + this.getWidth() + ", height " + this.getHeight()
             + ", colour " + this.getColour();
   }
}

The Square Class

import ou.*;
 
public class Square extends OUAnimatedObject
{
/* Instance variables */

   private int length;
   private OUColour colour;
   private int xPos;
   private int yPos;
   
   /**
    * Constructor for objects of class Square with the default characteristics.
    */
   public Square()
   {
      this.length = 20;
      this.colour = OUColour.BLUE;
      this.xPos = 0;
      this.yPos = 0;
   }

/* Instance methods */    
    
   /**
    * Sets the length of the receiver to the value of the argument aLength.
    */
   public void setLength(int aLength)
   {
      this.length = aLength;
      this.update();
   }
   
   /**
    * Returns the length of the receiver.
    */
   public int getLength()
   {
      return this.length;
   }
   
   /**
    * Sets the colour of the receiver to the value of the argument aColour.
    */
   public void setColour (OUColour aColour)
   {
      this.colour = aColour;
      this.update();
   }
   
   /**
    * Returns the colour of the receiver.
    */
   public OUColour getColour ()
   {
      return this.colour;
   }
   
   /**
    * Sets the horizontal position of the receiver to the value of the argument x.
    */
   public void setXPos(int x)
   {
      this.xPos = x;
      this.update();
   }
   
   /**
    * Returns the horizontal position of the receiver.
    */
   public int getXPos()
   {
      return this.xPos;
   }
   
   /**
    * Sets the vertical position of the receiver to the value of the argument y.
    */
   public void setYPos(int y)
   {
      this.yPos = y;
      this.update();
   }
   
   /**
    * Returns the vertical position of the receiver.
    */
   public int getYPos()
   {
      return this.yPos;
   }
   
   /**
    * Returns a string representation of the receiver.
    */
   public String toString()
   {
      return "An instance of class "+ this.getClass().getName() 
             + ": position (" + this.getXPos() + ", " + this.getYPos() 
             + "), length " + this.getLength() + ", colour " + this.getColour();
   }
   
}

Solution

  • Hoping Body start position will always align with Nose start some thing like

      /\
     /  \ 
     ----
     |__|
    

    In that case X of Nose will be X of Body and bodyY = noseY + noseHeight

    private int getBodyXPos(){
        return nose.getXpos();
    }
    
    private int getBodyYPos(){
        return nose.getYpos() + nose.getheight();
    }