Java 随机数生成器在重新编译之前生成相同的数
基本上,我正在制作一个“可怕的”迷宫游戏,希望游戏在每次失败时都能换成不同的图片,而无需重新编译。当前,“游戏结束”图片在您每次失败时保持不变,直到重新编译Java 随机数生成器在重新编译之前生成相同的数,java,random,Java,Random,基本上,我正在制作一个“可怕的”迷宫游戏,希望游戏在每次失败时都能换成不同的图片,而无需重新编译。当前,“游戏结束”图片在您每次失败时保持不变,直到重新编译 public class MazeGame extends JComponent implements MouseMotionListener, MouseListener { private Random generator = new Random(); BufferedImage intro; BufferedImage leve
public class MazeGame extends JComponent implements MouseMotionListener, MouseListener
{
private Random generator = new Random();
BufferedImage intro;
BufferedImage level1;
BufferedImage level2;
BufferedImage level3;
BufferedImage pic1;
BufferedImage pic2;
BufferedImage pic3;
BufferedImage pic4;
BufferedImage pic5;
BufferedImage gameOver;
BufferedImage currentLevel;
AudioClip spooky = JApplet.newAudioClip(getClass().getResource("gr/spooky.aiff"));
public MazeGame() throws IOException
{
intro = ImageIO.read(getClass().getResource("gr/start.png"));
level1 = ImageIO.read(getClass().getResource("gr/level1.png"));
level2 = ImageIO.read(getClass().getResource("gr/level2.png"));
level3 = ImageIO.read(getClass().getResource("gr/level3.png"));
pic1 = ImageIO.read(getClass().getResource("gr/pic1.jpg"));
pic2 = ImageIO.read(getClass().getResource("gr/pic2.jpg"));
pic3 = ImageIO.read(getClass().getResource("gr/pic3.jpg"));
pic4 = ImageIO.read(getClass().getResource("gr/pic4.jpg"));
pic5 = ImageIO.read(getClass().getResource("gr/pic5.jpg"));
int number = 1 + generator.nextInt( 5 );
gameOver = ImageIO.read(getClass().getResource( "gr/pic" + number + ".jpg" ));
currentLevel = intro;
}
public static void main(String args[]) throws IOException
{
JFrame window = new JFrame("Totally Not Scary Maze Game");
MazeGame game = new MazeGame();
window.add(game);
window.pack();
window.setLocationRelativeTo(null);
window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
window.setVisible(true);
game.addMouseMotionListener(game);
game.addMouseListener(game);
}
public Dimension getPreferredSize() {
return new Dimension(800, 800);
}
protected void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillRect(0, 0, 800, 800);
g.drawImage(currentLevel, 0, 0, null);
}
public void mouseMoved(MouseEvent e) {
int x = e.getX();
int y = e.getY();
int color = currentLevel.getRGB(x, y);
System.out.println(color);
int level1WallColor = -13939918;
int level2WallColor = -10340732;
int level3WallColor = -4640206;
int goalColor = -14532251;
if(color == goalColor)
{
if(currentLevel == intro)
{
currentLevel = level1;
}
else if(currentLevel == level1)
{
currentLevel = level2;
}
else if(currentLevel == level2)
{
currentLevel = level3;
}
else if(currentLevel == level3)
{
showGameOver();
}
}
if(color == level1WallColor)
{
showGameOver();
}
if(color == level2WallColor)
{
currentLevel = intro;
}
if(color == level3WallColor)
{
showGameOver();
}
repaint();
}
private void showGameOver()
{
currentLevel = gameOver;
spooky.play();
}
public void mouseClicked(MouseEvent e)
{
if(currentLevel == gameOver)
{
currentLevel = intro;
}
repaint();
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
}
}
这是因为您总是在Mazegame()末尾将cuurentellevel设置为Intro。评论这行,然后再试一次
currentLevel = intro;
我也很肤浅地阅读了你的代码。。我不确定图片的切换会发生在哪里。您将在评估失败后立即调用changePic(即mazegame())。因此,每次评估失败时,用户都会得到一张更改过的图片。我看不出您第二次调用new mazegame()的位置?在构造器中,这是选择背景图像的地方?@minh kieu首先得到它,所以我不回答。您需要调用行“gameOver=ImageIO.read(getClass().getResource(“gr/pic”+number+”.jpg”);”每次输球后,@Ray Falk那么我到底在哪里做呢?这样做只会把比赛涂成灰色。这行代码设置了游戏开始的级别。由于这段代码内置了一些逻辑,显然有些地方出了问题。作为一个sussgest,您可以在一个新程序中编写一个小的单一方法,该方法只能执行以下操作。1.加载图像设置ur级别标志1、2。将ur level标志设置为2,并在那里更改图像。通过这种方式,您可以确保没有其他与油漆/重新油漆相关的东西。然后你就能知道这个逻辑到底是怎么回事。另一方面,我觉得你会对正在发生的事情视而不见。如果你能一步一步地调试和写逻辑,你会碰到错误的那一行。