parent
1d43459cb2
commit
1b55d99e97
@ -0,0 +1,53 @@
|
|||||||
|
package com.snakegame;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class Food {
|
||||||
|
private Point position;
|
||||||
|
private final GameConfig config;
|
||||||
|
private final Random random = new Random();
|
||||||
|
private boolean isBigFood;
|
||||||
|
private long lastBlinkTime;
|
||||||
|
private boolean isVisible = true;
|
||||||
|
|
||||||
|
public Food(GameConfig config) {
|
||||||
|
this.config = config;
|
||||||
|
this.respawn();
|
||||||
|
this.lastBlinkTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void respawn() {
|
||||||
|
do {
|
||||||
|
this.position = new Point(this.random.nextInt(this.config.getWidth()), this.random.nextInt(this.config.getHeight()));
|
||||||
|
} while(this.position.x < 1 || this.position.y < 1);
|
||||||
|
|
||||||
|
this.isBigFood = this.random.nextInt(10) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void draw(Graphics g, int tileSize) {
|
||||||
|
long currentTime = System.currentTimeMillis();
|
||||||
|
if (currentTime - this.lastBlinkTime > 1000L) { // 每秒闪烁一次
|
||||||
|
this.isVisible = !this.isVisible;
|
||||||
|
this.lastBlinkTime = currentTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isVisible) {
|
||||||
|
if (this.isBigFood) {
|
||||||
|
g.setColor(Color.YELLOW);
|
||||||
|
g.fillOval(this.position.x * tileSize, this.position.y * tileSize, tileSize, tileSize);
|
||||||
|
} else {
|
||||||
|
g.setColor(this.config.getFoodColor());
|
||||||
|
g.fillOval(this.position.x * tileSize, this.position.y * tileSize, tileSize - 2, tileSize - 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Point getPosition() {
|
||||||
|
return this.position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBigFood() {
|
||||||
|
return this.isBigFood;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue