2013-02-14 72 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