2014-12-18 83 views
-1

我的所有其他作品都順利移動,但國王正在移動,並且能夠一次移動一個以上的地方,任何瞭解國際象棋的人都明白這是錯誤的,任何人都可以幫忙嗎?爪哇國際象棋

這是我的王典

else if(pieceName.contains("King")){ 
    int newY = e.getY()/75; 
    int newX = e.getX()/75;   
    boolean inTheWay = false;  
    int distance = Math.abs(startX-newX); 


    if(((newX < 0) || (newX > 7))||((newY < 0)||(newY > 7))){ 
     validMove = false;   
    } 
    else{ 

     validMove = true;    

     //Check if the move is a diagonal move 

     if(Math.abs(startX-newX)==Math.abs(startY-newY)) 
     { 
      // If there are any pieces along the diagonal in the way the move cannot be made. 
      if((startX-newX < 0)&&(startY-newY < 0)){ 
       for(int i=0; i < distance;i++){ 
        if(piecePresent((initialX+(i*75)), (initialY+(i*75)))){ 
         inTheWay = true; 
        } 
       }      
      } 
      else if((startX-newX < 0)&&(startY-newY > 0)){ 
       for(int i=0; i < distance;i++){ 
        if(piecePresent((initialX+(i*75)), (initialY-(i*75)))){      
         inTheWay = true; 
        } 
       }      
      } 
      else if((startX-newX > 0)&&(startY-newY > 0)){ 
       for(int i=0; i < distance;i++){ 
        if(piecePresent((initialX-(i*75)), (initialY-(i*75)))){ 
         inTheWay = true; 
        } 
       }      
      } 
      else if((startX-newX > 0)&&(startY-newY < 0)){ 
       for(int i=0; i < distance;i++){ 
        if(piecePresent((initialX-(i*75)), (initialY+(i*75)))){ 
         inTheWay = true; 
        } 
       }      
      }          
      if(inTheWay){ 
       validMove = false; 
      } 
      else{ 
       if(piecePresent(e.getX(), (e.getY()))){ 
        if(pieceName.contains("White")){ 
         if(checkWhiteOponent(e.getX(), e.getY())){ 
          validMove = true; 
         } 
         else{ 
          validMove = false; 
         } 
        } 
        else{ 
         if(checkBlackOponent(e.getX(), e.getY())){ 
          validMove = true; 
         } 
         else{ 
          validMove = false; 
         } 
        }            
       } 
       else{ 
        validMove = true; 
       }            
      }          
     } 
     else if(((Math.abs(startX-newX)!=0)&&(Math.abs(startY-newY) == 0))|| ((Math.abs(startX-newX)==0)&&(Math.abs(newY-startY)!=0))) 
     { 
      if(Math.abs(startX-newX)!=0){ 
       //we have movement along the x axis 
       int xMovement = Math.abs(startX-newX); 
       if(startX-newX > 0){ 
        //movement in the left direction.... 
        for(int i=0;i < xMovement;i++){ 
         if(piecePresent(initialX-(i*75), e.getY())){ 
          inTheWay = true; 
          break; 
         } 
         else{ 
          inTheWay = false; 
         } 
        }       
       } 
       else{ 
        for(int i=0;i < xMovement;i++){        
         if(piecePresent(initialX+(i*75), e.getY())){ 
          inTheWay = true; 
          break; 
         } 
         else{ 
          inTheWay = false; 
         } 
        } 
       } 
      } 
      else{ 
       //we have movement along the y axis 
       int yMovement = Math.abs(startY-newY); 
        if(startY-newY > 0){ 
         //movement in the left direction.... 
         for(int i=0;i < yMovement;i++){         
          if(piecePresent(e.getX(),initialY-(i*75))){ 
           inTheWay = true; 
           break; 
          } 
          else{ 
           inTheWay = false; 
          } 
         }       
        } 
        else{ 
         for(int i=0;i < yMovement;i++){ 
          if(piecePresent(e.getX(),initialY+(i*75))){ 
           inTheWay = true; 
           break; 
          } 
          else{ 
           inTheWay = false; 
          } 
         } 
        } 
      } 
      if(inTheWay){ 
       validMove = false; 
      } 
      else{ 
       if(piecePresent(e.getX(), (e.getY()))){ 
        if(pieceName.contains("White")){ 
         if(checkWhiteOponent(e.getX(), e.getY())){ 
          validMove = true; 
         } 
         else{ 
          validMove = false; 
         } 
        } 
        else{ 
         if(checkBlackOponent(e.getX(), e.getY())){ 
          validMove = true; 
         } 
         else{ 
          validMove = false; 
         } 
        }            
       } 
       else{ 
        validMove = true; 
       } 
      } 
     }    
     else{ // the move that is being tried is not a diagonal move... 
      validMove = false; 
     }    
    } 

} 
+3

你是否在調試器中一步一步地運行你的代碼? – 2014-12-18 22:52:09

+1

你是否在檢查startX是否在startX的任一側,newY是否在startY的任一側1內(除非正在執行castling移動)? – Jason 2014-12-18 22:53:24

+0

它不報告應用程序中的任何錯誤,它只是移動,如果它的女王 – 2014-12-18 22:53:24

回答

2

如果國王不執行,則易位的舉動:

  • newX必須等於startXstartX+1startX-1
  • newY必須等於startYstartY+1startY-1

如果是城堡,國王必須處於其初始位置,並且只能移動到兩個位置之一。