2016-01-31 2 views
-2

Я хочу написать небольшой Java 2D игры, но я всегда получаю черный экран и ошибка при запуске я:Я всегда получаю черный экран

Исключение в потоке «АВТ-EventQueue-0» java.lang.NullPointerException в code.game.spawn_a_point (game.java:106) при code.game. (game.java:95) при code.MettigelsNightmare. (MettigelsNightmare.java:14) при code.MettigelsNightmare $ 1.run (MettigelsNightmare.java:31) на java.awt.event.InvocationEvent.dispatch (InvocationEvent.java:311) на java.awt.EventQueue.dispatchEventImpl (EventQueue.java:756) на java.awt.EventQueue.access $ 500 (EventQueue.java:97) в java.awt.EventQueue $ 3.run (EventQueue.java:709) в java.awt.EventQueue $ 3.run (EventQueue.java:703) в java.security.AccessController.doPrivileged (Native Method) в java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:76) в java.awt.EventQueue.dispatchEvent (EventQueue.java:726) в Явы .awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:201) на java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:116) на java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:105) на java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:101) на java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:93) на java.awt.EventDispatchThread.run (EventDispatchThread.java:82)

И мой код:

package code; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.lang.reflect.Array; 
import java.util.Random; 

import javax.swing.ImageIcon; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class Game extends JPanel implements ActionListener { 
    private static final long serialVersionUID = 1L; 
    private static int width = 1920; 
    private static int height = 1000; 

    private Image kopfR; 
    private Image kopfL; 
    private Image kopfO; 
    private Image kopfU; 

    private Image mann; 
    private Image frau; 
    private Image[] mf; 

    private Image shootIMG_L; 
    private Image shootIMG_R; 
    private Image shootIMG_O; 
    private Image shootIMG_U; 

    private static int snake_width = 50; 
    private static int x; 
    private static int y; 

    private static int mY[] = new int[width * height/(snake_width * snake_width)]; 
    private static int mX[] = new int[width * height/(snake_width * snake_width)]; 

    private int timerspeed = 250; 
    private int points = 0; 

    private static int shootX; 
    private static int shootY; 

    public static int shootD = -50; 

    /* 
    * 0 = left 1 = right 2 = up 3 = down 
    */ 

    public static int direction; 

    public static int running; 

    public static Timer t; 

    public game() { 
     addKeyListener(new KeyBinds()); 
     setPreferredSize(new Dimension(width, height)); 
     setFocusable(true); 
     setBackground(Color.DARK_GRAY); 
     setVisible(true); 

     ImageIcon icon_mann = new ImageIcon("assets/mann.png"); 
     ImageIcon icon_frau = new ImageIcon("assets/frau.png"); 

     ImageIcon icon_headL = new ImageIcon("assets/spielerlinks.png"); 
     ImageIcon icon_headR = new ImageIcon("assets/spielerrechts.png"); 
     ImageIcon icon_headO = new ImageIcon("assets/spieleroben.png"); 
     ImageIcon icon_headU = new ImageIcon("assets/spielerunten.png"); 

     ImageIcon icon_shootL = new ImageIcon("assets/plinks.png"); 
     ImageIcon icon_shootR = new ImageIcon("assets/prechts.png"); 
     ImageIcon icon_shootO = new ImageIcon("assets/poben.png"); 
     ImageIcon icon_shootU = new ImageIcon("assets/punten.png"); 

     mann = icon_mann.getImage(); 
     frau = icon_frau.getImage(); 

     kopfL = icon_headL.getImage(); 
     kopfR = icon_headR.getImage(); 
     kopfO = icon_headO.getImage(); 
     kopfU = icon_headU.getImage(); 

     shootIMG_L = icon_shootL.getImage(); 
     shootIMG_R = icon_shootR.getImage(); 
     shootIMG_O = icon_shootO.getImage(); 
     shootIMG_U = icon_shootU.getImage(); 

     spawn_a_point(); 

     running = 1; 

     t = new Timer(timerspeed, this); 
     t.start(); 


    } 

    private void spawn_a_point() { 
     for (int i = 0; i < mf.length; i++) { 
      int r = new Random().nextInt(2) + 1; 
      Image[] mf = new Image[i]; 
      if (r == 1) { 
       mf[i] = frau; 
      } else { 
       mf[i] = mann; 
      } 

      int random_x = (int) (Math.random() * 39); 
      mX[i] = random_x * snake_width; 
      int random_y = (int) (Math.random() * 19); 
      mY[i] = random_y * snake_width; 
     } 

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (running == 1) { 
      check_shoot(); 
      check_death(); 
      get_a_point(); 
      move(); 
      move_shoot(); 
     } 
     repaint(); 
    } 

    private void move_shoot() { 
     switch (shootD) { 

     case 0: 
      shootX -= snake_width; 
      break; 
     case 1: 
      shootX += snake_width; 
      break; 
     case 2: 
      shootY -= snake_width; 
      break; 
     case 3: 
      shootY += snake_width; 
      break; 
     default: 
      break; 
     } 
    } 

    static void shoot() { 
     shootX = x; 
     shootY = y; 
     switch (shootD) { 

     case 0: 
      shootX -= snake_width; 
      break; 
     case 1: 
      shootX += snake_width; 
      break; 
     case 2: 
      shootY -= snake_width; 
      break; 
     case 3: 
      shootY += snake_width; 
      break; 
     default: 
      break; 
     } 
    } 

    public void check_shoot() { 
     for (int i = 0; i < 30; i++) { 

      if (shootX == mX[i] && shootY == mY[i]) { 
       timerspeed -= 30; 
       points++; 
      } 
     } 

    } 

    private void move() { 
     /* 
     * 0 = left 1 = right 2 = up 3 = down 
     */ 
     switch (direction) { 

     case 0: 
      x -= snake_width; 
      break; 
     case 1: 
      x += snake_width; 
      break; 
     case 2: 
      y -= snake_width; 
      break; 
     case 3: 
      y += snake_width; 
      break; 
     default: 
      break; 
     } 
    } 

    private void check_death() { 

     if (y >= height || x >= width || y < 0 || x < 0) { 
      running = 0; 
     } 
     if (running == 0 || running == 2) { 
      t.stop(); 
     } 
    } 

    private void get_a_point() { 
     for (int i = 0; i < 30; i++) { 
      if (x == mX[i] && y == mY[i]) { 
       timerspeed -= 30; 
       points++; 
       mX[i] = 5000; 
      } 
     } 

    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (running == 1) { 

      if (shootD == 0) { 
       g.drawImage(shootIMG_L, shootX, shootY, this); 
      } else if (shootD == 1) { 
       g.drawImage(shootIMG_R, shootX, shootY, this); 
      } else if (shootD == 2) { 
       g.drawImage(shootIMG_O, shootX, shootY, this); 
      } else if (shootD == 3) { 
       g.drawImage(shootIMG_U, shootX, shootY, this); 
      } 

      for (int i = 0; i < mf.length; i++) { 
       g.drawImage(mf[i], mX[i], mY[i], this); 
      } 

      Font fa = new Font("Calibri", Font.BOLD, 50); 

      g.setColor(Color.GREEN); 
      g.setFont(fa); 

      g.drawString("" + points, 960, 50); 

      /* 
      * 0 = left; 1 = right; 2 = up; 3 = down; 
      */ 
      if (direction == 0) { 
       g.drawImage(kopfL, x, y, this); 
      } else if (direction == 1) { 
       g.drawImage(kopfR, x, y, this); 
      } else if (direction == 2) { 
       g.drawImage(kopfO, x, y, this); 
      } else if (direction == 3) { 
       g.drawImage(kopfU, x, y, this); 
      } 

      Toolkit.getDefaultToolkit().sync(); 
     } else if (running == 0) { 
      Font f = new Font("Calibri", Font.BOLD, 40); 

      g.setColor(Color.RED); 
      g.setFont(f); 

      g.drawString("Du hast verloren!", 450, height/2); 
     } else { 
      Font f = new Font("Calibri", Font.BOLD, 20); 

      g.setColor(Color.RED); 
      g.setFont(f); 

      g.drawString("Mettigels Nightmare ist pausiert!", 460, height/2); 
      g.drawString("Mit ENTER kannst du weiterspielen", 433, height/2 + 20); 
     } 
    } 
} 
+0

Что такое линия 253? –

+0

Как вы его запускаете? – Hackerdarshi

+0

Пожалуйста, назовите свой класс «Игра», а не «игра». Переменные начинаются с нижнего регистра, имена классов начинаются с верхнего регистра. Это соглашение. :-) –

ответ

0

Я вижу только одно место, где вы инициализировать элемент 'М.Ф.':

private void spawn_a_point() { 
    if (mf != null) { 
     for (int i = 0; i < mf.length; i++) { 
      int r = new Random().nextInt(2) + 1; 
      Image[] mf = new Image[i]; 
      if (r == 1){ 
       mf[i] = frau; 
      } else { 
       mf[i] = mann; 
      } 

      int random_x = (int) (Math.random() * 39); 
      mX[i] = random_x * snake_width; 
      int random_y = (int) (Math.random() * 19); 
      mY[i] = random_y * snake_width; 
     } 
    } 
} 

И вы говорите:

if (mf != null) 

И тогда эта функция никогда не выполняется.

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