/**
   * Do the Jump, removing the piece from x1, y1 and setting the piece in x2, y2. Remove the piece
   * from captureX, captureY as well. If the piece is now on their "King's Row", then promote the
   * piece should be promoted to a King
   */
  public void execute(final Jump jump) {
    // CHECK IF ALL OF THEM ON BOARD
    if (isOnBoard(jump.getX1(), jump.getX2())
        && isOnBoard(jump.getY1(), jump.getY2())
        && isOnBoard(jump.getCaptureX(), jump.getCaptureY())) {
      // check if landing square is empty
      if (isEmptySquare(jump.getY1(), jump.getY2())) {
        Piece piece = getPiece(jump.getY1(), jump.getX1());
        // check if capture piece is enemy color
        if (getPiece(jump.getCaptureY(), jump.getCaptureX()).isEnemyColor(piece.getColor())) {

          if (Piece.WHITE_MAN.equals(piece)) {
            if (jump.getY2() == 7) {
              piece = Piece.WHITE_KING;
            }
          } else if (Piece.RED_MAN.equals(piece)) {
            if (jump.getY2() == 0) {
              piece = Piece.RED_KING;
            }
          }

          setPiece(jump.getY2(), jump.getX2(), piece);
          removePiece(jump.getCaptureY(), jump.getCaptureX());
          removePiece(jump.getY1(), jump.getX1());
        }
      }
    }
  }
Пример #2
0
 public MITrisBoard addPiece(Piece piece, int rot, int x, int y) {
   if (piece == null) return this;
   MITrisBoard ret = new MITrisBoard(this);
   rot %= piece.getMaxRotation();
   for (int i = 0; i < piece.getNumComponents(); i++) {
     int px = x, py = y;
     switch (rot) {
       case 0:
         px += piece.getX(i);
         py += piece.getY(i);
         break;
       case 1:
         px += piece.getY(i);
         py -= piece.getX(i);
         break;
       case 2:
         px -= piece.getX(i);
         py -= piece.getY(i);
         break;
       case 3:
         px -= piece.getY(i);
         py += piece.getX(i);
         break;
       default:
         throw new RuntimeException("invalid rotation");
     }
     if (py < 0 || px < 0 || px >= width) // out of bounds
     return null;
     else if (py < height && ret.data[px][py] != null) // overlap
     return null;
     else if (py < height) ret.data[px][py] = piece;
   }
   return ret;
 }
  public List<ListQuadRowItem> generateDisplayList() {
    List<Plan> lplans = Plan.getAllPlans();
    Collections.sort(
        lplans,
        new Comparator<Plan>() {
          public int compare(Plan s1, Plan s2) {
            return (s1.getPriority() - s2.getPriority());
          }
        });
    updateTotals(lplans);

    ArrayList<ListQuadRowItem> result = new ArrayList<ListQuadRowItem>();
    for (Plan plan : lplans) {
      Piece piece = new Piece(plan.getPieceId());
      Composer composer = new Composer(piece.getComposerId());

      ListQuadRowItem item = new ListQuadRowItem();
      item.setReference(plan.getMyid());

      item.setTopLeft(plan.getPriority() + "." + piece.getName());
      item.setBottomLeft(composer.getName());
      item.setTopRight(plan.getDays());
      item.setBottomRight(MyTime.minutesToString(plan.getMinutes()));

      result.add(item);
    }
    ListQuadRowItem item = new ListQuadRowItem();
    item.setReference(-1);
    result.add(item);

    return result;
  }
Пример #4
0
 public ArrayList<Move> generatePossibleMoves() {
   ArrayList<Move> ans = new ArrayList<>();
   for (Piece pc : pieces) {
     if (pc.isFinalized()) continue;
     for (int x = 0; x < 20; x++) {
       for (int y = 0; y < 20; y++) {
         Point place = new Point(x, y);
         Piece p = pc.getCopy();
         p.place(x, y);
         for (int i = 0; i < p.data.rotations; i++) {
           if (game.getBoard().canPlace(p)) {
             ans.add(new Move(p, place, this));
           }
           p.rotateCW();
         }
         p.resetRotation();
         if (p.data.flip) {
           p.flipHorizontal();
           for (int i = 0; i < p.data.rotations; i++) {
             if (game.getBoard().canPlace(p)) {
               ans.add(new Move(p, place, this));
             }
             p.rotateCW();
           }
           p.resetRotation();
         }
       }
     }
   }
   possibleMoves = ans;
   return ans;
 }
Пример #5
0
 /**
  * Realise le roque (deplace les pieces)
  *
  * @param myCoup (le coup joue)
  */
 public void realiserRoque(Coup myCoup) {
   Piece roi = null;
   Piece tour = null;
   if (myCoup.estPetitRoque) {
     if (myCoup.getCouleur().getColor() == 1) // blanc
     {
       roi = this.getPiecePosition(4, 0);
       tour = this.getPiecePosition(7, 0);
       roi.setPos(6, 0);
       tour.setPos(5, 0);
     } else {
       roi = this.getPiecePosition(4, 7);
       tour = this.getPiecePosition(7, 7);
       roi.setPos(6, 7);
       tour.setPos(5, 7);
     }
   } else {
     if (myCoup.getCouleur().getColor() == 1) // blanc
     {
       roi = this.getPiecePosition(4, 0);
       tour = this.getPiecePosition(0, 0);
       roi.setPos(2, 0);
       tour.setPos(3, 0);
     } else {
       roi = this.getPiecePosition(4, 7);
       tour = this.getPiecePosition(0, 7);
       roi.setPos(2, 7);
       tour.setPos(3, 7);
     }
   }
 }
Пример #6
0
 public int score() {
   int score = 0;
   for (Piece p : pieces) {
     if (p.isFinalized()) score += p.data.basePoints.size();
   }
   return score;
 }
Пример #7
0
  private List<Square> validMovesForPawn(Square square) {
    List<Square> validMoves = new ArrayList<Square>();

    // Regular moves, 1 or 2 up or down depending on color
    Piece piece = square.getPiece();
    if (piece.isWhite()) {
      int movesUp = piece.movesUp();
      if (square.containsPawnOnStartingRow()) movesUp += 1;
      validMoves.addAll(validMovesForSquareInDirection(square, movesUp, 1, 0, 0, 0));
    } else {
      int movesDown = piece.movesDown();
      if (square.containsPawnOnStartingRow()) movesDown += 1;
      validMoves.addAll(validMovesForSquareInDirection(square, movesDown, 0, 0, 1, 0));
    }

    // Attacking move
    int rowColPairs[][] = {{-1, -1}, {-1, 1}};
    for (int i = 0; i < rowColPairs.length; i++) {
      int row = square.Row + rowColPairs[i][0];
      int col = square.Col + rowColPairs[i][1];
      if (rowAndColAreWithinBounds(row, col)) {
        Square s = Board[row][col];
        if (s.isOccupiedByPieceOfColor(square.getPiece().oppositeColor())) validMoves.add(s);
      }
    }

    return validMoves;
  }
Пример #8
0
  private static void showTheCasesForTheFirstTimeAuxi(
      Position current, Piece p) { // les cases où la piece a le droit de se deplacer

    if (p.getType().equals("Pion") && p.getCouleur().equals("noir")) {
      System.out.println(current.getColonne());
      System.out.println(current.getLigne());
      Position a1 = createFinishPosition(current.getColonne(), current.getLigne() - 1);
      Position a2 = createFinishPosition(current.getColonne(), current.getLigne() - 2);
      if (getCasesToModify()[a1.getLigne()][a1.getColonne()].contains("img")) {
        System.out.println("Case Inocuuppe");
        modifyContent(current, a1);
      }
      if (getCasesToModify()[a2.getLigne()][a2.getColonne()].contains("img")) {
        System.out.println("Case Inocuuppe");
        modifyContent(current, a2);
      }
    }
    if (p.getType().equals("Pion") && p.getCouleur().equals("blanc")) {
      Position a1 = createFinishPosition(current.getColonne(), current.getLigne() + 1);
      Position a2 = createFinishPosition(current.getColonne(), current.getLigne() + 2);
      if (getCasesToModify()[a1.getLigne()][a1.getColonne()].contains("img")) {
        System.out.println("Case Inocuuppe");
        modifyContent(current, a1);
      }
      if (getCasesToModify()[a2.getLigne()][a2.getColonne()].contains("img")) {
        System.out.println("Case Inocuuppe");
        modifyContent(current, a2);
      }
    }
  }
Пример #9
0
 /**
  * This specifically gets the jumps, and recursive jumps.
  *
  * @param move is the piece to move
  * @return the final jump states
  * @throws Exception
  */
 private ArrayList<Board> childrenHelper(Board b, Piece move) {
   ArrayList<Board> result = new ArrayList<Board>();
   ArrayList<Piece> move_list = b.validJumps(move);
   for (Piece move_to : move_list) {
     Board temp = new Board(b);
     boolean remain;
     try {
       remain = temp.makeMove(move, move_to);
       if (remain == true) {
         ArrayList<Board> future_list =
             childrenHelper(
                 temp, temp.getPiece(move_to.getPosition()[0], move_to.getPosition()[1]));
         for (Board future : future_list) {
           result.add(future);
         }
         if (future_list.size() == 0) result.add(temp);
       } else {
         result.add(temp);
       }
     } catch (Exception e) {
       System.out.println("Error: " + e.getMessage());
     }
   }
   return result;
 }
Пример #10
0
 @Override
 protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   if (this.service == null) {
     return;
   }
   Piece[][] pieces = service.getPieces();
   if (pieces != null) {
     for (int i = 0; i < pieces.length; i++) {
       for (int j = 0; j < pieces[i].length; j++) {
         if (pieces[i][j] != null) {
           Piece piece = pieces[i][j];
           canvas.drawBitmap(
               piece.getImage().getImage(), piece.getBeginX(), piece.getBeginY(), null);
         }
       }
     }
   }
   if (this.linkInfo != null) {
     drawLine(this.linkInfo, canvas);
     this.linkInfo = null;
   }
   // 画选中标识的图片
   if (this.selectImage != null) {
     canvas.drawBitmap(
         this.selectPic, this.selectImage.getBeginX(), this.selectImage.getBeginY(), null);
   }
 }
Пример #11
0
  /** Determines whether the king can be captured by the player with the move. */
  public boolean isKingLeftInCheck() {
    MoveLogic attacksKingLogic = new MoveAttacksKingLogic();

    HashSet<Move> attackingMoves;
    PieceColor colorToMove = this.getColorToMove();
    int kx = -1; // If search succeeds, these should be set to "real" values
    int ky = -1;

    squareloop:
    for (int j = 0; j < Chess.BOARD_SIZE; j++) {
      for (int i = 0; i < Chess.BOARD_SIZE; i++) {
        Piece pieceHere = this.getPieceAt(new Square(i, j));
        if (pieceHere.getType() == PieceType.KING && pieceHere.getColor() == colorToMove.invert()) {
          kx = i;
          ky = j;
          break squareloop;
        }
      }
    }

    assert ((kx != -1) || (ky != -1))
        : "Unexpected search failure, inconsistent state.  King not found.";
    Square kingSquare = new Square(kx, ky);

    attackingMoves = possibleMovesWhichEndAt(kingSquare);

    for (Move move : attackingMoves) {
      if (attacksKingLogic.isLegal(this, move)) {
        return true;
      }
    }
    return false;
  }
Пример #12
0
 /**
  * method that will be called when mouse releases
  * @param point , the point mouse release at
  */
 public void onMouseRelease(Location point) {
   isGrabbed = false;
   if(!success){
     for(Piece p: bp){
     
       //if correctly matched
       if(p.contains(grabbedPiece.getCenter()) &&
           p.equals(grabbedPiece)){
         grabbedPiece.hide();
         p.show();
         p.showHighlight(Color.GREEN);
         lockedBP[p.getId()] = true;
       
         //check if all pieces are matched
         boolean check = true;
         for(boolean b: lockedBP){
           check = check && b;
         }
         if(check){
           success = true;
           for(Piece piece: bp){
             piece.hideHighlight();
           }
           text.show();
         }
       }
     }
   }
 }
Пример #13
0
 private void rotate() {
   final Coordinate c = randomNormal();
   final Piece piece = pieces[c.getY()][c.getX()];
   if (piece.getType() == PieceType.NORMAL) {
     piece.rotate((int) GaUtil.random(1, 3));
   }
 }
Пример #14
0
  @Test
  public void testKing() {
    Board b = new Board(true);
    Piece water = new Piece(false, b, 2, 2, "bomb");
    Piece fire = new Piece(true, b, 1, 1, "pawn");
    Piece fire2 = new Piece(true, b, 2, 6, "shield");
    b.place(water, 2, 2);
    b.place(fire, 1, 1);
    b.place(fire2, 2, 6);

    assertEquals(false, water.isKing());
    assertEquals(false, fire2.isKing());
    assertEquals(fire, b.pieceAt(1, 1));

    fire2.move(3, 7);
    assertEquals(true, fire2.isKing());
    assertEquals(true, fire2.isFire());
    assertEquals(fire2, b.pieceAt(3, 7));

    water.move(0, 0);
    assertEquals(true, water.isKing());
    assertEquals(true, fire2.isKing());
    assertEquals(null, b.pieceAt(1, 1));
    assertEquals(null, b.pieceAt(0, 0));

    b.select(3, 7);
    assertEquals(true, b.canSelect(4, 6)); // fire can now move down
    assertEquals(false, b.canSelect(4, 8)); // out of bounds
  }
Пример #15
0
  @Test
  public void testBombandShield() {
    Board b = new Board(true);
    Piece fire = new Piece(true, b, 5, 5, "bomb");
    Piece water = new Piece(false, b, 4, 6, "shield");
    Piece water2 = new Piece(false, b, 2, 6, "pawn");
    b.place(fire, 5, 5);
    b.place(water, 4, 6);
    b.place(water2, 2, 6);

    fire.move(3, 7);
    assertEquals(null, b.pieceAt(4, 7));
    assertEquals(null, b.pieceAt(3, 6));
    assertEquals(null, b.pieceAt(5, 6));

    fire = new Piece(true, b, 4, 4, "bomb");
    water = new Piece(false, b, 3, 5, "shield");
    water2 = new Piece(false, b, 3, 7, "pawn");
    Piece water3 = new Piece(false, b, 1, 7, "pawn");
    Piece water4 = new Piece(false, b, 1, 5, "bomb");

    b.place(fire, 4, 4);
    b.place(water, 3, 5);
    b.place(water2, 3, 7);
    b.place(water3, 1, 7);
    b.place(water4, 1, 5);
    fire.move(2, 6);

    assertEquals(null, b.pieceAt(3, 5));
    assertEquals(null, b.pieceAt(3, 7));
    assertEquals(null, b.pieceAt(1, 7));
    assertEquals(null, b.pieceAt(1, 5));
  }
Пример #16
0
  /**
   * Rates a board by the position advantage
   *
   * @param b
   * @param color
   * @return
   */
  private int h2(Board b, char color) {
    int kingVal = 2;
    int result = 0;
    int[][] posVals = {
      {2, 1, 1, 1, 1, 1, 1, 2},
      {2, 1, 1, 1, 1, 1, 1, 2},
      {2, 1, 1, 1, 1, 1, 1, 2},
      {2, 1, 1, 1, 1, 1, 1, 2},
      {2, 1, 1, 1, 1, 1, 1, 2},
      {2, 1, 1, 1, 1, 1, 1, 2},
      {2, 1, 1, 1, 1, 1, 1, 2},
      {2, 1, 1, 1, 1, 1, 1, 2}
    };

    for (int i = 0; i < 8; i++) {
      for (int j = 0; j < 8; j++) {
        Piece p = b.getPiece(i, j);
        int pVal = 0;
        if (p.getColor() == color) pVal = posVals[i][j];
        else if (p.getColor() != '-') pVal = -posVals[i][j];
        if (p.isKing()) pVal = pVal * kingVal;
        result += pVal;
      }
    }
    return result;
  }
Пример #17
0
 /**
  * Retourne la piece positionné a telle coordonnée x & y
  *
  * @param x
  * @param y
  * @return la piece a la position donnee , null si la position est vide
  */
 public Piece getPiecePosition(int x, int y) {
   for (Piece onePiece : this.pieceList) {
     if (onePiece.getPos().equals(getPosition(x, y))) {
       return onePiece;
     }
   }
   return null;
 }
Пример #18
0
 /**
  * returns the first piece at the specified location that is not marked as 'captured'.
  *
  * @param row one of Piece.ROW_..
  * @param column one of Piece.COLUMN_..
  * @return the first not captured piece at the specified location
  */
 public Piece getNonCapturedPieceAtLocation(int row, int column) {
   for (Piece piece : this.pieces) {
     if (piece.getRow() == row && piece.getColumn() == column && piece.isCaptured() == false) {
       return piece;
     }
   }
   return null;
 }
Пример #19
0
 public void drawPieces(Graphics g) {
   g.setColor(Color.red);
   for (int i = 0; i < 8; i++)
     for (int j = 0; j < 8; j++) {
       Piece piece = chessBoard.getPiece(i, j);
       if (piece != null) g.drawString(piece.toString(), i * 50, j * 50 + 10);
     }
 }
Пример #20
0
 // possibly null result
 public Piece getPiece(Cell c) {
   for (Piece p : pieces) {
     if (p.getLoc() != null && p.getLoc().equals(c)) {
       return p;
     }
   }
   return null;
 }
Пример #21
0
 public Piece getLostPiece(Class pieceClass) {
   for (Piece piece : lostPieces) {
     if (piece.matches(pieceClass)) {
       return piece;
     }
   }
   return null;
 }
Пример #22
0
 @Override
 public final boolean equals(Object other) {
   if (!(other instanceof Piece)) {
     return false;
   }
   Piece p = (Piece) other;
   return p.getKey() == this.key;
 }
Пример #23
0
 /**
  * @param pos
  * @return la piece a la position donnee , null si la position est vide
  */
 public Piece getPiecePosition(Position pos) {
   for (Piece onePiece : this.pieceList) {
     if (onePiece.getPos().equals(pos)) {
       return onePiece;
     }
   }
   return null;
 }
Пример #24
0
 /** Test of isWhite method, of class Piece. */
 @Test
 public void testIsWhite() {
   System.out.println("isWhite");
   assertEquals(false, Piece.isWhite(Piece.BBISHOP));
   assertEquals(true, Piece.isWhite(Piece.WBISHOP));
   assertEquals(true, Piece.isWhite(Piece.WKING));
   assertEquals(false, Piece.isWhite(Piece.BKING));
 }
Пример #25
0
 /** Set player PLAYER ("white" or "black") to be an automated player. */
 private void autoCommand(String player) {
   try {
     Piece s = Piece.playerValueOf(player);
     _playing = false;
     _players[s.ordinal()] = new MachinePlayer(s, this);
   } catch (IllegalArgumentException excp) {
     error("unknown player: %s", player);
   }
 }
Пример #26
0
 public ArrayList<Piece> getPiecesOfType(PieceTypes.Color color) {
   ArrayList<Piece> ret = new ArrayList<Piece>();
   for (Piece p : pieces) {
     if (p.getColor() == color) {
       ret.add(p);
     }
   }
   return ret;
 }
Пример #27
0
 public synchronized void add_block(int pieceIndex, int offset, int size, byte[] b) {
   Piece p = this.pieces.get(pieceIndex);
   p.writeBlock(b, offset);
   if (p.haveAllBlocks() == 1) {
     this.finished_pieces[pieceIndex] = true;
     // System.out.println("verified");
   }
   return;
 }
Пример #28
0
 public void Down() {
   if (current.canMove(grid, 0)) {
     grid = current.down(grid);
   } else {
     System.out.println("cannot move");
     current = new TPiece();
   }
   repaint();
 }
Пример #29
0
 public PlayerMoves getValidMovesOn(Board board) {
   PlayerMoves playerMoves = new PlayerMoves();
   for (Piece piece : currentPieces) {
     PieceMoves pieceMoves = piece.getValidMovesOn(board);
     //            if (!pieceMoves.isEmpty())
     playerMoves.add(piece, pieceMoves);
   }
   return playerMoves;
 }
Пример #30
0
  /**
   * Return information about given square.
   *
   * @param loc Square location as a SAN string.
   * @return The type of the piece or null.
   */
  public Type typeAt(String loc) {
    try {
      Piece piece = board.pieceAt(new Coord(loc));
      return (piece == null) ? null : piece.getType();
    } catch (Exception pass) {
    }

    return null;
  }