国际象棋Java游戏错误

时间:2017-10-10 18:24:34

标签: java

我是java新手,作为一个开发国际象棋游戏的项目。我把所有的东西都移动但是当我把国王移出国际象棋界时我得到了错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

at ChessProject.checkBlackOpponent(chessproject.java:149)
at ChessProject.mouseReleased(chessproject.java:559)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

2 个答案:

答案 0 :(得分:0)

第4行到第7行中的else if条件不检查landingx的绝对值。 landingx和landingy都必须大于0且小于9。

要测试相对位置(移动的大小),一个简单的条件就足够了: 否则如果(Math.abs(startingx-landingx)> 1 || Math.abs(startingx-landingx)> 1 || .... [绝对位置测试])

答案 1 :(得分:-1)

Here is my code for the king

else if(pieceName.contains("King")) {
   if (((startX - landingX > 1) && (startY == landingY)) || ((startX - landingX > 1) && (startY-landingY > 1)) ||
       ((startX ==landingX) && (startY-landingY > 1)) || ((landingX - startX > 1) && (startY-landingY > 1)) ||
       ((landingX - startX > 1) && (startY==landingY)) || ((landingX - startX > 1) && (landingY - startY > 1)) ||
       ((startX==landingX) && (landingY - startY > 1))|| ((startX-landingX > 1) && (landingY - startY > 1))) {
    validMove = false;
   } else {
    if (piecePresent(e.getX(), (e.getY()))) {
     if (pieceName.contains("White")) {
      if (checkWhiteOpponent(e.getX(), e.getY())) {
       validMove = true;
      } else {  
       validMove = false;
      }
     } else {
      if (checkBlackOpponent(e.getX(), e.getY())) {
       validMove = true;
      } else {
       validMove = false;
      }
     }
    } else {
     validMove = true;
    }
   }
  }