자바로 만든 체스(6일차)

Updated:

6일차 진행상황

버그수정

  1. 흰색의 폰이 검정색 피스를 잡을 수 없는 문제 해결
  2. 퀸과 룩의 x축이동이 정상적으로 작동하지 않는 문제 해결
  3. 체크를 발생시킨 피스가 그 자리에서 죽으면 매턴마다 체크가 발생하는 문제 해결

잃은 기물 표현

잃은 기물

잃은 기물에 대하여 별도의 공간에 순서대로 배치되도록 했다.

    p2bt[board[mouseYOnBoard][mouseXOnBoard].getNo()].setBounds(670 + (deadWhite % 8) * 75, 400 + (deadWhite / 8) * 75, 75, 75);
    deadWhite++;

단순히 상대방의 피스를 잡았을 경우, deadWhitedeadBlack이란 변수로 카운트하고 각각 %와 /를 이용하여 원하는 칸에 배치되도록 하였다.

이는 게임을 새로 시작할 시 다시 0으로 초기화된다.

폰의 프로모션

프로모션

폰이 보드의 끝에 닿는 순간 다른 피스로 프로모션하는 특수룰을 추가하였다.

단순히 PROMOTION배경을 하나 JLabel로 추가하고,
양 플레이어 각각 프로모션할 피스를 선택할 수 있도록 버튼을 4개씩 추가하여
프로모션이 진행될 경우 각각의 색대로 나타나도록 하였다.

                @Override
                public void mousePressed(MouseEvent e) {
                    changeTurn(2);
                    promotion.setVisible(false);
                    for (int j = 0 ; j < 4 ; j++)
                        p1prom[j].setVisible(false);
                    if (temp == 0) {
                        board[promY][promX].setName("Queen");
                        p1bt[board[promY][promX].getNo()].setIcon(blackQueenImage);
                    } else if (temp == 1) {
                        board[promY][promX].setName("Knight");
                        p1bt[board[promY][promX].getNo()].setIcon(blackKnightImage);
                    } else if (temp == 2) {
                        board[promY][promX].setName("Bishop");
                        p1bt[board[promY][promX].getNo()].setIcon(blackBishopImage);
                    } else if (temp == 3) {
                        board[promY][promX].setName("Rook");
                        p1bt[board[promY][promX].getNo()].setIcon(blackRookImage);
                    }
                }

각 버튼의 mousePressed이벤트는 이렇게 되어있다.

처음에 changeTurn을 실행하는데, 그 이유는 만약 프로모션이 진행된다면 턴이 상대에게 넘어가지
않고 유지하도록 했기 때문이다. 그렇기에 여기서 별도로 턴변경을 해주어야 한다.

p1prom버튼은 프로모션할 수 있는 네가지 피스의 이미지로 이루어져 있다.
그리고 네가지 피스 버튼 중 한가지를 선택하면, 프로모션 중인 피스의 이름을 고른 피스로 바꾸고,
프로모션 중인 피스 버튼의 이미지도 해당 이미지로 바꾸어 선택한 피스의 규칙을 적용받게 된다.

구현해야 할 목록

  • 특수 룰(앙파상, 캐슬링)
  • 킹이 잡힘에 따른 패배처리(화면만 구현하면 됨)
  • 음악, 효과음 등
  • (추가) 승패를 로그로 기록, 지난 경기기록 확인하기
  • 멀티플레이 기능(중요)

Leave a comment