본문 바로가기
Algorithm

[Algorithm] 체크, 체크메이트

by SnoopyCoffee 2022. 10. 17.
반응형

체크

- 체스에서 체크란 체스 기물이 이동하여 상대방 킹을 위협하는 위치에 도착했을 때, 체크라고 부른다.

체크메이트

- 체크메이트는 체크 상태인 킹이 체크 상황을 벗어날 수 없는 경우에는 체크메이트라고 부른다.

 

체크 알고리즘

1. 체스 기물이 이동한 후 다음턴에 이동할 수 있는 경로를 확인한다.

2. 이동 경로에 상대방 킹이 있으면 체크

 

체크는 비교적 간단하다. 이동 후 다시한번 경로확인을 통해 킹을 찾으면 체크

 

체크메이트 알고리즘

1. 체크상태인 킹 기물에 대한 정보를 가져온다.

2. 킹은 자신의 위치에서 8방향으로 움직일 수 있기에 8방향에 대한 백트래킹(직선, 대각선, 나이트, 폰)를 확인한다.

3. 경로를 확인 도중 상대편 기물이 발견 되면 다음 방향으로 움직인다.
4. 8방향으로 모두 확인하였을 때 체크 상황을 벗어날 수 있는 경로가 있으면, 체크로 마무리

5. 8방향으로 모두 확인하였을 때 체크 상황을 벗어날 수 없으면 체크메이트

 

코드 리뷰

직선 방향 확인

- 퀸, 비숍, 록은 직선 방향과 대각선 방향으로 움직일 수 있기에 일직선으로 체크할 수 있는 함수를 만듬

- 첫번째 매개변수에는 체크를 확인할것인지, 체크메이트를 확인할것인지 타입을 넣어준다.

- 두번째 세번째 매개변수에는 어떤 방향으로 이동할 것인지

- 네번쨰, 다섯번째 매개변수는 체크메이트 확인할때 사용되며, 킹의 현재 위치 정보가 담긴다.

 

- 체크를 확인하는 과정에서는 상대편 킹을 찾으면 해당 게임오브젝트를 전역변수에 저장해준다.

- 체크메이트를 확인하는 과정에서는 상대편 비숍, 퀸, 록을 찾으면 return true를 반환한다.

특정 포인트 확인

- 나이트, 폰은 움직임 특성을 고려하여 따로 함수를 만듬.

- 이또한 체크를 확인하는 과정에서는 상대편 킹을 찾으면 해당 게임오브젝트를 전역변수에 저장

- 체크메이트를 확인하는 과정에서는 상대편 나이트, 폰을 찾으면 true를 return 해준다.

체크

- 체스 기물이 이동 후 움직임 특성에 맞게끔 체크를 확인한다.

- 체크가 true 이면 체크 메이트까지 확인 진행

- 체크메이트가 true이면 체크메이트 메세지와 함께 게임이 종료된다.

- 가로, 세로, 대각선 방향으로 킹을 찾으면 true 값을 반환

체크메이트

 

반응형