麻烦java图形程序

时间:2013-11-15 19:18:00

标签: java

我有这个由不同类组成的java程序。但它基本上显示了一个圆形和矩形,在一个框架中移动布朗运动。

我正在尝试制作一个三角形类来为混合添加一个等边三角形,为此我必须修改我的神经形状类并创建一个等边三角形类。我做了一个三角形课,但我不知道如何修改我的紧张形状程序以使其工作。紧张的形状程序在没有分类的情况下可以正常工作

我创建了我的三角形类的形状的子类,但我不知道如何修改神经形状以使其工作。我需要用一个实例变量创建三角形类。

任何帮助将不胜感激。

               // Program name: NervousShapes

             //
               // Displays a frame containing a random mixture of circles
            // and rectangles with random colors, sizes, and positions.
              // The shapes periodically change position, with the
       // direction of motion chosen randomly for each shape. The
     // new x coordinate for each shape will either be the same
   // as the old x coordinate, one pixel smaller, or one pixel
        // larger; the new y coordinate will be computed in a
     // similar manner. Shapes will be constrained so that they
        // do not move outside the drawing area.


 public static void main(String[] args) {
createWindow();
createShapes();
animateShapes();
 }
    ///////////////////////////////////////////////////////////
         // NAME:       createWindow
     // BEHAVIOR:   Creates a frame labeled "Nervous Shapes",
         //             displays the frame, and sets the size of
         //             the frame (using the WINDOW_SIZE class
       //             variable). Assigns the frame to the df
        //             class variable, and assigns the frame's
          //             graphics context to the g class variable.
           // PARAMETERS: None
            // RETURNS:    Nothing
             ///////////////////////////////////////////////////////////

               private static void createWindow() {
        // Create a frame labeled "Nervous Shapes" and set its
         // size
             df = new DrawableFrame("Nervous Shapes");
            df.show();
           df.setSize(WINDOW_SIZE, WINDOW_SIZE);

        // Get the frame's graphics context
             g = df.getGraphicsContext();
          }

                ///////////////////////////////////////////////////////////
                  // NAME:       createShapes
           / / BEHAVIOR:   Creates enough Circle and Rectangle objects
        //             to fill the shapes array. Each shape has a
      //             random color, size, and position. The height
          //             and width of each shape must lie between
         //             MIN_SIZE and MAX_SIZE (inclusive). The
         //             position is chosen so that the shape is
              //             completely within the drawing area.
              // PARAMETERS: None
              // RETURNS:    Nothing
           ///////////////////////////////////////////////////////////


                    private static void createShapes() {
               for (int i = 0; i < shapes.length; i++) {
              // Select a random color
             int red = generateRandomInt(0, 255);
                int green = generateRandomInt(0, 255);
              int blue = generateRandomInt(0, 255);
                  Color color = new Color(red, green, blue);
                  // Decide whether to create a circle or a rectangle
                  if (Math.random() < 0.5)  {
               // Generate a circle with a random size and position
               int diameter = generateRandomInt(MIN_SIZE, MAX_SIZE);
                int x = generateRandomInt(0, WINDOW_SIZE - diameter);
             int y = generateRandomInt(0, WINDOW_SIZE - diameter);
                    shapes[i] = new Circle(x, y, color, diameter);
                   } else {
                   // Generate a rectangle with a random size and
                   // position
                  int width = generateRandomInt(MIN_SIZE, MAX_SIZE);
                    int height = generateRandomInt(MIN_SIZE, MAX_SIZE);
               int x = generateRandomInt(0, WINDOW_SIZE - width);
                     int y = generateRandomInt(0, WINDOW_SIZE - height);
             shapes[i] = new Rectangle(x, y, color, width, height);
                       }
                            }
                           }
                  ///////////////////////////////////////////////////////////
             // NAME:       animateShapes
             // BEHAVIOR:   Establishes an infinite loop in which the
               //             shapes are animated. During each loop
           //             iteration, the drawing area is cleared and
         //             the shapes are then drawn at new positions.
          //             The new x and y coordinates for each shape
             //             will either be the same as the old ones,
          //             one pixel smaller, or one pixel larger. A
           //             shape is not moved if doing so would cause
          //             any portion of the shape to go outside the
            //             drawing area. At the end of each animation
          //             cycle, there is a brief pause, which is
           //             controlled by the delay constant.
               // PARAMETERS: None
               // RETURNS:    Nothing
                ///////////////////////////////////////////////////////////




                 private static void animateShapes() {
                   while (true) {
          // Clear drawing area
                g.setColor(Color.white);
           g.fillRect(0, 0, WINDOW_SIZE - 1, WINDOW_SIZE - 1);
             for (int i = 0; i < shapes.length; i++) {
              // Change the x coordinate for shape i
                 int dx = generateRandomInt(-1, +1);
              int newX = shapes[i].getX() + dx;
    if (newX >= 0 &&
        newX + shapes[i].getWidth() < WINDOW_SIZE)
      shapes[i].move(dx, 0);

                 // Change the y coordinate for shape i
             int dy = generateRandomInt(-1, +1);
             int newY = shapes[i].getY() + dy;
                 if (newY >= 0 &&
              newY + shapes[i].getHeight() < WINDOW_SIZE)
                    shapes[i].move(0, dy);

            // Draw shape i at its new position
                  shapes[i].draw(g);
               }

              // Call repaint to update the screen
           df.repaint();
             // Pause briefly
                   try {
                  Thread.sleep(DELAY);
            } catch (InterruptedException e) {}
                      }
                       }

              ///////////////////////////////////////////////////////////
                 // NAME:       generateRandomInt
            // BEHAVIOR:   Generates a random integer within a
          //             specified range.
          // PARAMETERS: min - the lower bound of the range
           //             max - the upper bound of the range
            // RETURNS:    A random integer that is greater than or
            //             equal to min and less than or equal to max
                ///////////////////////////////////////////////////////////
               private static int generateRandomInt(int min, int max) {
               return (int) ((max - min + 1) * Math.random()) + min;
                }
                 }

这是我用来制作三角形的形状超类。

         // Represents a geometric shape that can be displayed in a
            // graphics context

          import java.awt.*;

       public abstract class Shape {
        // Instance variables
          private int x;
            private int y;
         private Color color;

             // Constructor
             protected Shape(int x, int y, Color color) {
              this.x = x;
            this.y = y;
           this.color = color;
          }
            // Abstract methods
        public abstract void draw(Graphics g);
           public abstract int getHeight();
           public abstract int getWidth();

           // Other instance methods
             public Color getColor() {
            return color;
                 }

      public int getX() {
         return x;
        }

        public int getY() {
          return y;
         }
           public void move(int dx, int dy) {
         x += dx;
          y += dy;
            }

        public void setColor(Color color) {
          this.color = color;
           }
            }

这是使程序工作所需的矩形子类

               // Represents a rectangle that can be displayed in a graphics
        /  / context

             import java.awt.*;

                 public class Rectangle extends Shape {
             // Instance variables
            private int width;
                 private int height;

             // Constructor
         public Rectangle(int x, int y, Color color,
               int width, int height) {
           super(x, y, color);
           this.width = width;
       this.height = height;
         }
             // Instance methods
            public void draw(Graphics g) {
          g.setColor(getColor());
            g.fillRect(getX(), getY(), width, height);
          }

         public int getHeight() {
            return height;
              }

          public int getWidth() {
          return width;
           }
             }

这是紧张形状的圆形图形。

//表示可以在图形中显示的圆圈 //上下文

     import java.awt.*;

       public class Circle extends Shape {
         // Instance variables
      private int diameter;

            // Constructor
          public Circle(int x, int y, Color color, int diameter) {
          super(x, y, color);
            this.diameter = diameter;
           }
        // Instance methods
         public void draw(Graphics g) {
           g.setColor(getColor());
         g.fillOval(getX(), getY(), diameter, diameter);
             }

           public int getHeight() {
           return diameter;
             }

            public int getWidth() {
             return diameter;
            }
          }

这是我创建的新三角类,我正在尝试制作紧张的形状程序,我必须修改创建形状部分我的紧张形状。

           import java.awt.*;

       public class Triangle extends Shape {
       // Instance variables
        private int leng;


       // Constructor
       public Triangle(int x, int y, Color color,
               int leng) {
        super(x, y, color);
         this.leng=leng;
       }
      // Instance methods
        public void draw(Graphics g) {
         int[]Xcoord={getX(),getX()+leng,getX()+leng/2};
          int[]Ycoord={getY(),getY(),getY()+math.sqrt(3)/2};
         g.drawPolygon(Xcoord,Ycoord,3);
         }

          public int getleng() {
          return leng;
        }

0 个答案:

没有答案