0
我無法將我的魚移動到另一個地方,並在到達右側或左側邊緣時出現問題。窗口是600 x 400.在方法void swim();
,無論我改變魚只是去同一地點(魚通過窗口的右邊緣)。我該如何移動魚,當它到達右邊或左邊,然後轉身移動到窗口的左邊緣?爲什麼我的魚不會轉身?
注意:我使用的是GWindow
,這是我的學校提供的一門課程。
import java.awt.Color;
import java.util.Random;
import uwcse.graphics.*;
/**
* A fish in a graphics window
*/
public class Fish {
public static final int LEFT_MOVING = 0;
public static final int RIGHT_MOVING = 0;
// The graphics window the fish belongs to
private GWindow window;
// The location of the fish
private int x;
private int y;
// Scale of the drawing of the fish
private double scale;
private Color color;
private int direction;
private Oval O1; Oval O2;
private Triangle tail1; Triangle tail2;
private Line eye1; Line eye2;
/**
* Draws a Fish in a graphics window
*
* @param x
* the x coordinate of the location of the fish
* @param y
* the y coordinate of the location of the fish
* @param scale
* the scale of the drawing of the fish
* @param window
* the graphics window the fish belongs to
*/
public Fish(int x, int y, double scale,int direction, GWindow window) {
// Initialize the instance fields
this.x = x;
this.y = y;
this.scale = scale;
this.window = window;
this.color = randomColor();
this.direction = direction;
// Draw the fish
this.draw();
}
private Color randomColor(){
Random random = new Random();
int R = random.nextInt(256);
int G = random.nextInt(256);
int B = random.nextInt(256);
return new Color(R,B,G);
}
/**
* Draws this fish
*/
private void draw() {
int Fsize = (int)(this.scale*15);
this.O1 = new Oval(
this.x - Fsize /3,
this.y - Fsize /7 ,
Fsize + 4*Fsize/3,
Fsize + Fsize/5,
this.color,true);
this.tail1 =new Triangle(
this.x - Fsize,
this.y,
this.x - 2/Fsize,
this.y + Fsize/2,
this.x - Fsize,
this.y + Fsize,this.color,true);
this.eye1 = new Line(
this.x + 15*Fsize/10,
this.y + 5*Fsize/10 ,
this.x + 15 *Fsize/10,
this.y + 5* Fsize /10,
Color.BLACK);
Oval O2 = new Oval(
this.x - 37*Fsize/5,
this.y+ 27*Fsize/5 ,
Fsize + 2*Fsize/3,
Fsize + Fsize/5,
this.color,true);
Line eye2 = new Line(
this.x - 35*Fsize/5,
this.y + 30*Fsize/5,
this.x - 35*Fsize/5,
this.y + 30*Fsize/5, Color.BLACK);
Triangle tail2 =new Triangle(
this.x - Fsize*5 ,
this.y + 13*Fsize/2,
this.x - 10*Fsize/2,
this.y + 11*Fsize/2,
this.x - Fsize*6,
this.y + Fsize*6,this.color,true);
this.window.add(O1);
this.window.add(O2);
this.window.add(tail2);
this.window.add(tail1);
this.window.add(eye1);
this.window.add(eye2);
}
public void moveBy (int dx, int dy){
x += dx;
y += dy;
}
public void swim(){
if (RIGHT_MOVING >= 250 || this.direction == RIGHT_MOVING){
this.O1.moveBy(3,0);
this.tail1.moveBy(3,0);
this.eye1.moveBy(3,0);
}
}
}