如何在我的小行星计划中展示我的宇宙飞船?

时间:2014-11-21 04:48:07

标签: java awt

我正在尝试完成一个小行星项目。我有四节课。小行星,多边形,游戏和星号。 我正在制造一艘新船类,它是船舶的子类。我是java的新手。我试图制作一个新的船舶对象,但我无法让它出现在屏幕上。 https://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html 但是,在船类我现在使用fillPolygon它在屏幕上显示。但我知道写作方式。 如何使用船舶对象进行装船并使其显示。我在下面提供我的课程。

 package asteroids;

/*
CLASS: Asteroids
DESCRIPTION: Extending Game, Asteroids is all in the paint method.
NOTE: This class is the metaphorical "main method" of your program,
   it is your control center.
Original code by Dan Leyzberg and Art Simon
*/
import java.awt.*;
import java.awt.event.*;

class Asteroids extends Game {
   static int counter = 0;

public Asteroids() {
  super("Asteroids!",800,600);
  this.setFocusable(true);
  this.requestFocus();
 }

public void paint(Graphics brush) {
    brush.setColor(Color.black);
    brush.fillRect(0,0,width,height);

    // sample code for printing message for debugging
    // counter is incremented and this message printed
    // each time the canvas is repainted
    counter++;
    brush.setColor(Color.white);
    brush.drawString("Counter is " + counter,10,10);
    ship p = new ship(
            new Point[] {new Point(1,1),new Point(3,1),new Point(1.5,2)},
            new Point(3,3),
            0);


    brush.setColor(Color.red);
    p.paint(brush );

 }

public static void main (String[] args) {
    Asteroids a = new Asteroids();

    a.repaint();










   }
}  

多边形类

enter code herepackage asteroids;

/*

CLASS:Polygon      描述:多边形是由一组定义的空间中的一系列点              这些点,偏移和旋转。偏移是              原点和形状中心之间的距离。              旋转度数为0-360度。     用法:您打算使用一组点来实例化此类        永远定义它的形状,然后通过重新定位和修改它        旋转那个形状。在定义形状时,相对位置        使用的点数,换句话说:{(0,1),(1,1),(1,0)}        形状与{(9,10),(10,10),(10,9)}相同。

class Polygon {
  private Point[] shape;   // An array of points.
  public Point position;   // The offset mentioned above.
  public double rotation; // Zero degrees is due east.

 public Polygon(Point[] inShape, Point inPosition, double inRotation) {
    shape = inShape;
    position = inPosition;
    rotation = inRotation;

   // First, we find the shape's top-most left-most boundary, its origin.
    Point origin = shape[0].clone();
    for (Point p : shape) {
  if (p.x < origin.x) origin.x = p.x;
  if (p.y < origin.y) origin.y = p.y;
 }

// Then, we orient all of its points relative to the real origin.
   for (Point p : shape) {
     p.x -= origin.x;
     p.y -= origin.y;
  }
}


  // "getPoints" applies the rotation and offset to the shape of the polygon.
   public Point[] getPoints() {
   Point center = findCenter();
   Point[] points = new Point[shape.length];
    for (int i = 0; i < shape.length; i++) {
    for (Point p : shape) {
      Point p = shape[i];
       double x = ((p.x-center.x) * Math.cos(Math.toRadians(rotation)))
           - ((p.y-center.y) * Math.sin(Math.toRadians(rotation)))
           + center.x/2 + position.x;
  double y = ((p.x-center.x) * Math.sin(Math.toRadians(rotation)))
           + ((p.y-center.y) * Math.cos(Math.toRadians(rotation)))
           + center.y/2 + position.y;
  points[i] = new Point(x,y);
  }
  return points;
 }

  // "contains" implements some magical math (i.e. the ray-casting algorithm).
 public boolean contains(Point point) {
  Point[] points = getPoints();
  double crossingNumber = 0;
   for (int i = 0, j = 1; i < shape.length; i++, j=(j+1)%shape.length) {
    if ((((points[i].x < point.x) && (point.x <= points[j].x)) ||
       ((points[j].x < point.x) && (point.x <= points[i].x))) &&
      (point.y > points[i].y + (points[j].y-points[i].y)/
       (points[j].x - points[i].x) * (point.x - points[i].x))) {
    crossingNumber++;
  }
 }
return crossingNumber%2 == 1;
}

 public void rotate(int degrees) {rotation = (rotation+degrees)%360;}

 /*
 The following methods are private access restricted because, as this access
 level always implies, they are intended for use only as helpers of the
 methods in this class that are not private. They can't be used anywhere else.
 */

 // "findArea" implements some more magic math.
 private double findArea() {
   double sum = 0;
    for (int i = 0, j = 1; i < shape.length; i++, j=(j+1)%shape.length) {
    sum += shape[i].x*shape[j].y-shape[j].x*shape[i].y;
  }
  return Math.abs(sum/2);
  }

 // "findCenter" implements another bit of math.
 private Point findCenter() {
  Point sum = new Point(0,0);
   for (int i = 0, j = 1; i < shape.length; i++, j=(j+1)%shape.length) {
     sum.x += (shape[i].x + shape[j].x)
           * (shape[i].x * shape[j].y - shape[j].x * shape[i].y);
    sum.y += (shape[i].y + shape[j].y)
           * (shape[i].x * shape[j].y - shape[j].x * shape[i].y);
   }
    double area = findArea();
   return new Point(Math.abs(sum.x/(6*area)),Math.abs(sum.y/(6*area)));
 }

}     班级船     包小行星;

import java.awt.Color;
import java.awt.Graphics;

public class ship extends Polygon{
  static int counter=0;

   public ship(Point[] inShape, Point inPosition, double inRotation) {
       super(inShape, inPosition, inRotation);
        // TODO Auto-generated constructor stub
   }

   public void paint(Graphics brush) {
        brush.fillPolygon(new int []{400,380,380,420,420,400},new int[]    {300,320,360,360,320,300},6); 

 }


public void drawPolygon(Point[] points, Point point, int i) {
    // TODO Auto-generated method stub

}

}

 Any help will be appreciated ,thanks

1 个答案:

答案 0 :(得分:0)

小行星应直接或间接(通过游戏)扩展JFrame。

一旦你实例化了应该扩展JFrame的Asteroids类,请执行:

asteroid.setVisible(true);

将出现一个新的jpanel,你的paint方法将在jpanel的画布上绘制。

相关问题