자바로 만든 체스(5일차)
Updated:
5일차 진행상황
게임플레이화면 UI 구현
로컬플레이시에 우측 빈공간에 UI를 구성하였다.
프로젝트가 진행될수록 이상하게 포토샵 기술이 느는 것 같다…….
양 플레이어가 각각 잃은 기물을 보여줄 수 있도록 투명도를 이용한 16칸식의 공간을 만들었고,
기물이 잡힐 때 마다 이곳에 배치시킬 예정이다. (아직 미구현)
EXIT버튼을 누를 시 메인버튼으로 돌아간다.
@Override
public void mousePressed(MouseEvent e) {
localButton.setVisible(true);
exitButton.setVisible(true);
multiButton.setVisible(true);
background = new ImageIcon(Main.class.getResource("./img/mainbackground.png")).getImage();
boardLabel.setVisible(false);
for (int i = 0 ; i < 16 ; i ++)
{
p1bt[i].setVisible(false);
p2bt[i].setVisible(false);
}
returnButton.setVisible(false);
lostPiece.setVisible(false);
black_lost.setVisible(false);
white_lost.setVisible(false);
}
게임 중에 보이도록 했던 버튼들을 모두 감추고,
메인화면에 필요한 버튼들을 다시 보이도록 한다.
다시 로컬플레이에 진입하면 모든 객체를 새로 배치하기 때문에
초기 상태부터 플레이가 가능하다.
체크기능 구현
public void checkKing() {
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
check.setVisible(false);
}
};
if (turnPlayer == 1) {
for (int i = 0; i < 16; i++) {
if(movable(player1.getPieces()[i], player1.getPieces()[i].getPos_x(), player1.getPieces()[i].getPos_y(), player2.getPieces()[0].getPos_x(), player2.getPieces()[0].getPos_y())) {
check.setVisible(true);
timer.schedule(timerTask, 1000);
break;
}
}
} else {
for (int i = 0; i < 16; i++) {
if(movable(player2.getPieces()[i], player2.getPieces()[i].getPos_x(), player2.getPieces()[i].getPos_y(), player1.getPieces()[0].getPos_x(), player1.getPieces()[0].getPos_y())) {
check.setVisible(true);
timer.schedule(timerTask, 1000);
break;
}
}
}
}
피스가 이동함에 따라 다음 차례에 상대의 킹을 잡을 수 있는 상태라면,
체크를 화면에 1초 표시하도록 했다.
피스의 이동이 이루어졌을 때, 자신의 모든 피스의 위치와 상대 킹의 위치를 movable
로 보내어
이동이 가능하다면 체크라벨이 보여지도록 했다.
모든 피스에 대해 검사가 이루어지기 때문에, 나의 피스 이동에 따라 드러는 다른 피스로 인한
체크 또한 잡아낼 수 있다.
1초 뒤에 다시 사라지도록 하기위해 처음에는 Thread.sleep
을 사용했는데, 화면이 완전 정적이 되어
어색하거니와 정상적인 동작도 하지 않아 Timer
와 TimerTask
를 사용했다.
구현해야 할 목록
- 잃은 기물 화면 우측에 나열
- 특수 룰(프로모션, 앙파상, 캐슬링)
- 킹이 잡힘에 따른 패배처리(화면만 구현하면 됨)
- 음악, 효과음 등
- (추가) 승패를 로그로 기록, 지난 경기기록 확인하기
- 멀티플레이 기능(중요)
Leave a comment