在 Java 小程序中删除并重新绘制图像
Remove and redraw an image in a Java applet
在我真正回答我的问题之前,我只想说我不是 Java 小程序的粉丝,这是一个项目。我知道有更好的方法可以做我想做的事。
不管怎样,问题。
我正在创建一个龟兔赛跑,其中会生成一个介于 1 和 10 之间的随机数。然后,该数字将用于确定乌龟或兔子移动的空间数(即,如果随机数为 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) {
}
}
}
提前致谢!
您没有在任何地方调用您的 drawMoves(g)
方法。只需从 paint(Graphics field)
调用此方法即可。唯一缺少的东西。
public void paint(Graphics field)
{
drawField(field); //draw the field
drawMoves (field)
}
并且您的实现将重新绘制您的对象,因此随着时间的推移您会看到很多乌龟和野兔。
在我真正回答我的问题之前,我只想说我不是 Java 小程序的粉丝,这是一个项目。我知道有更好的方法可以做我想做的事。
不管怎样,问题。
我正在创建一个龟兔赛跑,其中会生成一个介于 1 和 10 之间的随机数。然后,该数字将用于确定乌龟或兔子移动的空间数(即,如果随机数为 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) {
}
}
}
提前致谢!
您没有在任何地方调用您的 drawMoves(g)
方法。只需从 paint(Graphics field)
调用此方法即可。唯一缺少的东西。
public void paint(Graphics field)
{
drawField(field); //draw the field
drawMoves (field)
}
并且您的实现将重新绘制您的对象,因此随着时间的推移您会看到很多乌龟和野兔。