2016-05-04 2 views
1

В принципе, я делаю «страшную» игру лабиринтов и хочу, чтобы игра над картинкой менялась на другую картинку каждый раз, когда вы терпите неудачу, не перекомпилируя ее. В настоящее время картина «игра поверх» остается неизменной при каждом проигрывании, пока вы не перекомпилируете.Генератор случайных чисел генерирует одинаковое число до повторной компиляции

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) 
{ 

} 

} 
+1

Я не вижу, где вы называете новый мазагеам() второй раз? В конструкторе, где выбрано фоновое изображение? –

+0

@ minh-kieu получил это первым, и поэтому я не буду отвечать. Вам нужно вызвать строку 'gameOver = ImageIO.read (getClass(). GetResource ("gr/pic" + number + ".jpg")); после каждого проиграть. –

+0

@ Рэй-Фальк, где бы я это сделал? – Griffins13

ответ

1

Это потому, что вы всегда настройки cuurentLevel в качестве Введения в конце Mazegame(). Прокомментируйте эту строку и попробуйте.

currentLevel = intro; 

Также я прочитал ваш код поверхностно. Не уверен, что я вижу, где именно произойдет переключение изображения. Вы вызовете свой changePic (т. Е. Ваш mazegame()) сразу после того, как будет оценен сбой. поэтому каждый раз, когда оценка происходит неудачно, пользователь получит измененный pic.

+0

Выполнение этого просто окрашивает игру в серый цвет. Эта строка кодовых наборов, на которых уровень игры начинается. – Griffins13

+0

Так как этот код имеет встроенную логику, очевидно, что-то не так. IC sussgest, вы можете написать небольшой единственный метод в новой программе, который будет выполнять только следующее. 1. Загрузите изображение, установив флаг уровня ур 1, 2. установите флаг уровня ur на 2 и измените изображение. Таким образом, вы можете убедиться, что ничего не происходит с краской/перекрашиванием. И тогда вы можете понять, что происходит с этой логикой. Другие мудрые я чувствую, что вы будете чувствовать себя слепым относительно того, что происходит. Также отлаживайте, если вы можете и логично писать логику шаг за шагом, вы НАЙДИТЕ строку, которая является неправильной. – SnackDragon

Смежные вопросы