2013-02-14 74 views
2

我在JAVA applets中创建了一个程序。该程序绘制一个多边形A与4个随机生成的点,然后绘制另一个多边形与4个随机生成的点B。 之后,比较每个多边形的每个点,看它们是否相同。如果他们不是,那么说A[0] > B[0]然后A[0]--。直到旧多边形A的所有点变为新多边形B。然后重复。减少paint方法实现中多边形的尺寸

所以我遇到的问题是,由于某些原因,多边形只是不断变得更加恬静。

这里是我的代码:

package some.package.games; 

import java.applet.Applet; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Color; 
import java.awt.Polygon; 
import java.awt.geom.GeneralPath; 
import java.awt.image.BufferedImage; 
import java.awt.image.ImageProducer; 
import java.util.Random; 

public class graphics extends Applet implements Runnable 
{ 
    public boolean isRunning = false; 
    protected BufferedImage mBuffer; 
    protected boolean comparaisonFinni = false; 
    protected Polygon polygonCourant = createNewPolygon(); 
    protected Graphics2D mGraphics; 
    protected Dimension mDimension; 
    protected int mFPS = (1000/9); 

    public void start() 
    { 
     isRunning = true; 
     new Thread(this).start(); 
    } 
    public void stop() 
    { 
     isRunning = false; 
    } 

    public void init() 
    { 
     mDimension = getSize(); 
     mBuffer = (BufferedImage)createImage(mDimension.width, mDimension.height); 
     mGraphics = (Graphics2D)mBuffer.createGraphics(); 
    } 

    public void paint(Graphics pGraphics) 
    { 
     pGraphics.clearRect(0, 0, mDimension.width, mDimension.height); 


     Polygon polygonTmp = new Polygon(); 

     if (!comparaisonFinni) 
      polygonTmp = createNewPolygon(); 


      for (int i = 0; i < 4; i++) 
      { 
       if (polygonTmp.xpoints[i] < polygonCourant.xpoints[i]) 
       { 
        polygonCourant.xpoints[i]--;    
       } 
       if (polygonTmp.xpoints[i] > polygonCourant.xpoints[i]) 
       { 
        polygonCourant.xpoints[i]++; 
       } 
       if (polygonTmp.ypoints[i] < polygonCourant.ypoints[i]) 
       { 
        polygonCourant.ypoints[i]--; 
       } 
       if (polygonTmp.ypoints[i] > polygonCourant.ypoints[i]) 
       { 
        polygonCourant.ypoints[i]++; 
       } 
       if ((polygonCourant.xpoints[0] == polygonTmp.xpoints[0]) && (polygonCourant.xpoints[1] == polygonTmp.xpoints[1]) && 
         (polygonCourant.xpoints[2] == polygonTmp.xpoints[2]) && (polygonCourant.xpoints[3] == polygonTmp.xpoints[3]) && 
         (polygonCourant.ypoints[0] == polygonTmp.ypoints[0]) && (polygonCourant.ypoints[1] == polygonTmp.ypoints[1]) && 
         (polygonCourant.ypoints[2] == polygonTmp.ypoints[2]) && (polygonCourant.ypoints[3] == polygonTmp.ypoints[3])) 
       { 
        comparaisonFinni = true; 
       } 
      }  
     pGraphics.drawPolygon(polygonCourant); 


    } 

    public Polygon createNewPolygon() 
    { 
     Random aNumber = new Random(); 
     int x1Points[] = new int [4]; 
     int y1Points[] = new int [4]; 

     for (int i = 0; i < 4; i++) 
     { 
      x1Points[i] = aNumber.nextInt(200); 
      y1Points[i] = aNumber.nextInt(300); 
     } 

     Polygon lePolygon = new Polygon(x1Points, y1Points, 4); 

     if (comparaisonFinni) 
     { 
      comparaisonFinni = false; 
      polygonCourant = lePolygon; 

     } 

     return lePolygon; 

    } 
    public void update(Graphics pGraphics) 
    { 
     paint(pGraphics); 
    } 

    public void run() 
    { 
     while (isRunning) 
     { 
      repaint(); 
      try 
      { Thread.sleep(mFPS); } 
      catch (InterruptedException pException) 
      { pException.printStackTrace(); } 
     } 
    } 

} 
+0

你什么时候停止线程? – 2013-02-14 17:25:57

+0

我永远不会停止它。它的意思就是这样。因为我希望它成为一个无限循环 – 2013-02-14 17:32:07

+0

我已经运行了你的代码,但是我发现它只显示了1个多边形,而不是你提到的2。 – 2013-02-14 18:01:31

回答

0

可以使用随机出现。例如,xpoints被创建为nextInt(200)。

public Polygon createNewPolygon() 
{ 
    Random aNumber = new Random(); 
    int x1Points[] = new int [4]; 
    int y1Points[] = new int [4]; 

    for (int i = 0; i < 4; i++) 
    { 
     x1Points[i] = aNumber.nextInt(200); 
     y1Points[i] = aNumber.nextInt(300); 
    } 

    Polygon lePolygon = new Polygon(x1Points, y1Points, 4); 

    if (comparaisonFinni) 
    { 
     comparaisonFinni = false; 
     polygonCourant = lePolygon; 

    } 

    return lePolygon; 

} 

nextInt(200)与平均值均匀分布的随机值= 100。这意味着所有xpoints慢慢地朝的100不知道这是你的主意值移动。

同样适用于ypoints。他们朝着150.

结果,当然,你会看到多边形在点(100,150)附近收缩。

+0

是的,因为我想让当前的Polygon(PolygonCourant)匹配新的多边形(PolygonTmp) – 2013-02-14 17:32:33

+0

我认为它与检查有关当它正在构建一个新的多边形时,但我不太确定如何修复它 – 2013-02-14 17:44:35

+0

没有人可以告诉你想要在这里画什么,但是你可能不想每次都创建新的polygonTmp。也许你想在ifs之后做其他事情。你必须告诉你的目标是什么。 – ATrubka 2013-02-14 17:46:33