Advertisement
kuchuz

PBO-C EAS : Pawn

Jan 11th, 2021
1,317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.21 KB | None | 0 0
  1. package chessgui.pieces;
  2.  
  3. import chessgui.Board;
  4.  
  5. public class Pawn extends Piece {
  6.  
  7.     private boolean has_moved;
  8.    
  9.     public Pawn(int x, int y, boolean is_white, String file_path, Board board)
  10.     {
  11.         super(x,y,is_white,file_path, board);
  12.         has_moved = false;
  13.     }
  14.    
  15.     public void setHasMoved(boolean has_moved)
  16.     {
  17.         this.has_moved = has_moved;
  18.     }
  19.    
  20.     public boolean getHasMoved()
  21.     {
  22.         return has_moved;
  23.     }
  24.    
  25.     @Override
  26.     public boolean canMove(int destination_x, int destination_y)
  27.     {
  28.         // deklarasi posisi target, dan jarak
  29.         Piece target = board.getPiece(destination_x, destination_y);
  30.         int jarak_x = Math.abs(this.getX()-destination_x);
  31.         int jarak_y = Math.abs(this.getY()-destination_y);
  32.  
  33.         //Untuk mempermudah perhitungan di baris kode bawah
  34.         int kalimin = 1;
  35.         if(this.isBlack()) kalimin=-1;
  36.  
  37.         // Cek buah catur sudah pernah jalan atau belum
  38.         if(this.getHasMoved()){
  39.             //jika sudah pernah jalan, bidak tidak boleh jalan vertikal lebih dari 1 petak
  40.             if(jarak_y>1) return false;
  41.         }else{
  42.             //jika sudah pernah jalan, bidak tidak boleh jalan vertikal lebih dari 2 petak
  43.             if(jarak_y>2) return false;
  44.             // Cek jika ada buah catur lain disepanjang jalan menuju posisi target
  45.             // Jika ada, tidak boleh jalan
  46.             for(int i=1; i<jarak_y; i++){
  47.                 Piece jalur = board.getPiece(this.getX(),this.getY()+(i*kalimin));
  48.                 if(jalur != null) return false;
  49.             }
  50.         }
  51.  
  52.         // Bidak tidak boleh mundur
  53.         if((this.getY()-destination_y)*kalimin >= 0) return false;
  54.         // Jika posisi target tidak kosong, bidak hanya bisa jalan miring 1 petak
  55.         // Jika posisi kosong, bidak hanya bisa jalan lurus vertikal
  56.         if(target!=null){
  57.             if(jarak_x != 1 || jarak_y != 1) return false;
  58.             if(this.isWhite()){
  59.                 if(target.isWhite()) return false;
  60.             }else{
  61.                 if(target.isBlack()) return false;
  62.             }
  63.         }else{
  64.             if(jarak_x != 0) return false;
  65.         }
  66.         return true;
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement