2015-08-31 29 views
2

在我真正明白我的問題之前,讓我說我不是Java小應用程序的粉絲,這是針對項目的。我知道有很多更好的方法來做我想做的事情。刪除並重繪Java應用程序中的圖像

無論如何,這個問題。

我正在創建一個烏龜和野兔種族,其中生成一個到十個之間的隨機數。然後該數字將用於確定烏龜或兔子移動的空間數量(即,如果隨機數是2,則野兔將移動1平方)。我必須展示兔子和烏龜一起移動,但我使用的代碼不會將圖片移動到任何地方,只是保持靜止。

這裏是我的代碼:

import java.applet.Applet; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Image; 

    public class experiment extends Applet { 


Image tortoise, hare; //create the images 
final int tortoiseYPos = 50, hareYPos = 400, square = 20, end = 1256; //create x positions and y positions 
int tortoiseXPos = 180, hareXPos = 180; 
public void init() 
{ 
    tortoise = getImage(getDocumentBase(), "picresources/tortoise.jpg"); //get the images for the objects 
    hare = getImage(getDocumentBase(), "picresources/hare.jpg"); 

    } 

public void paint(Graphics field) 
{ 

    drawField(field); //draw the field 

} 

public void drawField(Graphics field) 
{ 

    Font f = new Font("Times New Roman", Font.BOLD, 48); 
    field.setFont(f); 
    field.drawString("Tortoise", 0, 75); 
    field.drawString("Hare", 0, 425); 

    //fill alternating black and white rectangles  
    field.setColor(Color.black); 
    int x = 180; 
    for(int i = 0; i < 50; i++) 
    { 
     field.fillRect(x, 50, square, 50); 
     field.fillRect(x, 400, square, 50); 
     x += (square); 
    } 


    field.drawImage(tortoise, 180, tortoiseYPos, this);  
    field.drawImage(hare, 180, hareYPos, this); 
} 

public void drawMoves (Graphics g) { 
    while(tortoiseXPos < end && hareXPos < end) 
    { 
     int move = (int)(Math.random() * 10); 
     tortoiseMoves(move); 
     delay(); 
     delay(); 
     delay(); 
     hareMoves(move); 
     delay(); 
     delay(); 
     delay(); 
     clearCurrent(g); 
     delay(); 
     g.drawImage(tortoise, tortoiseXPos, tortoiseYPos, this); 
     g.drawImage(hare, hareXPos, hareYPos, this); 

    } 
} 

public void tortoiseMoves(int move) 
{ //Moves for Tortoise, 180 is start, 1200 is finish 
    if(move <= 5) 
    { 
     tortoiseXPos += (3 * square); 

    } 
    else if(move <= 8) 
    { 
     tortoiseXPos += square; 

    } 
    else if(move <= 10) 
    { 
     tortoiseXPos -= (6 * square); 

    } 

    if(tortoiseXPos < 180) 
    { 
     tortoiseXPos = 180; 

    } 

    if(tortoiseXPos > end) 
    { 
     tortoiseXPos = end; 

    } 

} 

public void hareMoves(int move) 
{ //Moves for Hare, 180 is start, 1200 is finish 
    if(move <= 2) 
    { 
     hareXPos += (9 * square); 

    } 
    else if(move <= 5) 
    { 
     hareXPos += (square); 

    } 
    else if(move <= 6) 
    { 
     hareXPos -= (12 * square); 

    } 
    else if(move <= 8) 
    { 
     hareXPos -= (2 * square); 

    } 
    else if(move <= 10) 
    { 

    } 

    if(hareXPos < 180) 
    { 
     hareXPos = 180; 

    } 

    if(hareXPos > end) 
    { 
     hareXPos = end; 

    } 
} 

public void clearCurrent(Graphics s) 
{ 
    s.clearRect(tortoiseXPos+1, tortoiseYPos+1, WIDTH-1, HEIGHT-1); 
    s.clearRect(hareXPos+1, hareYPos+1, WIDTH-1, HEIGHT-1); 
} 

public void delay() 
{ 
    try { 
     Thread.sleep(1000);     
    } catch(Exception ex) { 

    } 
} 
    } 

提前感謝!

+1

1)爲什麼要編寫一個小程序?如果是由於老師指定它,請將它們轉介給[爲什麼CS教師應該停止**教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop教學-java的小應用程序/)。 2)爲什麼使用AWT?看到[這個答案](http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978)有很多很好的理由放棄AWT使用組件有利於Swing。 –

+1

@AndrewThompson是的,老師正在詳細說明,但我正在學習一些較舊的課程(他們在拿着它的時候刷新了課程)。順便說一下,我讀了你的博客文章(你對另一個問題發表了類似的評論),我同意你的看法。我寧願在這裏使用Swing。 – javathunderman

+1

*「你對另一個問題發表了類似的評論」*這是我現在發佈的第一件基於任何* applet的問題。 ;)很高興你有問題排序,我的公用事業必須使用小程序或AWT。 –

回答

1

您不是在任何地方撥打您的drawMoves(g)方法。 JUT從paint(Graphics field)調用此方法,它將起作用。這只是缺少的東西。

public void paint(Graphics field) 
{ 
    drawField(field); //draw the field 
    drawMoves (field) 
} 

以及實現將重新繪製你的對象,所以隨着時間的推移,你會看到這麼多的烏龜和野兔。

+0

謝謝!但似乎仍然沒有工作。我得到這個http://i.imgur.com/wRGrgQC.png與我最初得到的http://i.imgur.com/HiCsNmM.png – javathunderman

+0

我用你的代碼,並通過添加這條線爲我工作。但用矩形作爲對象,因爲我沒有圖像。 – JBaba

相關問題