2015-05-24 28 views
1

我目前正在做一個項目,作爲Applet實時顯示烏龜與野兔競賽。選擇一個隨機數字,並且動物根據該數字向前,向後或者根本不向前移動。我的問題是讓動物被實時看到。它目前在起始位置顯示圖像,並說誰贏了。任何關於如何完成這個任務的指針都會很棒。爪哇:在烏龜與野兔Applet中正確顯示位置

我的代碼:

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

public class Project2 extends Applet 
{ 
Image tortoise, hare; 
Image scaledTortoise, scaledHare; 
final int tortoiseYPos = 50, hareYPos = 400, SQUARE = 20, END = 1200; 
int tortoiseXPos = 180, hareXPos = 180; 

public void init() 
{ 
    tortoise = getImage(getDocumentBase(), "tortoise.gif"); 
    hare = getImage(getDocumentBase(), "hare.gif"); 
    scaledTortoise = tortoise.getScaledInstance(20, 50, Image.SCALE_SMOOTH); 
    scaledHare = hare.getScaledInstance(20, 50, Image.SCALE_SMOOTH); 
} 

public void paint(Graphics field) 
{ 
    drawField(field); 
    drawMoves(field); 

    field.setFont(new Font("Times New Roman", Font.ITALIC, 72)); 
    //Display winner when they get to the finish line 
    if(tortoiseXPos >= END) 
    { 
      field.drawString("Tortoise Wins!!", 650, 240); 
    } 
     else if(hareXPos >= END) 
     { 
      field.drawString("Hare Wins!!", 650, 240); 
    } 
} 

public void drawField(Graphics field) 
{ 
    setBackground(Color.green); 
    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(scaledTortoise, 180, tortoiseYPos, this);  
    field.drawImage(scaledHare, 180, hareYPos, this); 
} 

public void drawMoves(Graphics s) 
{ 
    while(tortoiseXPos < END && hareXPos < END) 
    { 
     int move = (int)(Math.random() * 10); 
     tortoiseMoves(move); hareMoves(move); 
     s.drawImage(scaledTortoise, tortoiseXPos, tortoiseYPos, this); 
     s.drawImage(scaledHare, hareXPos, hareYPos, this); 
     delay(); delay(); delay(); 
    } 
} 
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) 
    { 
     hareXPos = hareXPos; 
    } 

    if(hareXPos < 180) 
    { 
     hareXPos = 180; 
    } 

    if(hareXPos > END) 
    { 
     hareXPos = END; 
    } 
} 

public void delay() 
{ 
    for(int i = 0; i <= 90000000; i++) 
    { 
    } 
} 
} 

我要指出,我不熟悉和不應該使用的Java Swing,因爲我只應該使用AWT。

+0

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。 –

+0

@AndrewThompson對你的問題,我的老師要我同時使用一個小程序和AWT。 – Tedion

回答

2

問題在於你的延遲功能。進入一個循環會讓小程序運行你的代碼,並且它不會在移動之間渲染顯示。如果你允許你的applet運行的線程進入睡眠狀態,那麼它有機會在運行時顯示。

public void delay() 
{ 
    try { 
     Thread.sleep(100); 
    } catch (Exception e) {} 
} 
+0

由於某種原因,它不起作用。 – MaxZoom

+0

嗯,當我在我的IDE中運行它時,我看到它在整個比賽中一步一步地發展。也許你可以嘗試獲得一個基本動畫作爲一個起點,可能是http://www.javatpoint.com/Animation-in-applet。祝你好運。 –

+0

謝謝,這對我有用。現在我只需要把它刪除以前的舉動,我應該很好 – Tedion