자바로 만든 체스(6일차)
Updated:
6일차 진행상황
버그수정
- 흰색의 폰이 검정색 피스를 잡을 수 없는 문제 해결
- 퀸과 룩의 x축이동이 정상적으로 작동하지 않는 문제 해결
- 체크를 발생시킨 피스가 그 자리에서 죽으면 매턴마다 체크가 발생하는 문제 해결
잃은 기물 표현
잃은 기물에 대하여 별도의 공간에 순서대로 배치되도록 했다.
p2bt[board[mouseYOnBoard][mouseXOnBoard].getNo()].setBounds(670 + (deadWhite % 8) * 75, 400 + (deadWhite / 8) * 75, 75, 75);
deadWhite++;
단순히 상대방의 피스를 잡았을 경우, deadWhite
와 deadBlack
이란 변수로 카운트하고
각각 %와 /를 이용하여 원하는 칸에 배치되도록 하였다.
이는 게임을 새로 시작할 시 다시 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