오목 승리 판정 구현하기
2019. 9. 1. 14:09ㆍPL/C++
저번까지 SinglePlay 화면까지 구성을 했다. 추후에는 AI 인공지능 소스를 넣어서 혼자하기 게임을 구성할 것이다. 지금은 초기 단계이기 때문에 혼자 번갈아가면서 흑,백 오목을 두면서 승리 판정을 구현하려고 한다
추가적으로 화면 구성을 위해서 게임시작 버튼과, textBox를 추가할 것이다. textBox를 Multiline으로 구성하기 위해서는 화살표를 클릭해 Multiline 속성을 활성화시켜준다
추가해야될 코드는 다음과 같다
1. 게임시작 버튼이 활성화되었을 때, 게임이 시작되는 것
2. 사용자에게 전달된 메세지 코드는 textBox를 통해 전달된다
3. 이제는 현재 플레이어를 구분해서 말들의 색을 구분해서 승리판정 알고리즘을 구현한다
오목이 나올 수 있는 경우는 ㅡ | / \총 4가지다. 따라서 승리판정은 이중 for문으로 완전탐색을 통해 쉽게 구현할 수 있다.
private bool isWin()
{
// | 오목
for (int i = 0; i < edge - 4; i++)
{
for (int j = 0; j < edge; j++)
{
if(gBoard[i, j] == nowPlayer && gBoard[i + 1, j] == nowPlayer && gBoard[i + 2, j] == nowPlayer
&& gBoard[i + 3, j] == nowPlayer && gBoard[i + 4, j] == nowPlayer)
{
return true;
}
}
}
// ㅡ 오목
for (int j = 0; j < edge - 4; j++)
{
for (int i = 0; i < edge; i++)
{
if (gBoard[i, j] == nowPlayer && gBoard[i, j + 1] == nowPlayer && gBoard[i, j + 2] == nowPlayer
&& gBoard[i, j + 3] == nowPlayer && gBoard[i, j + 4] == nowPlayer)
{
return true;
}
}
}
// \ 오목
for (int i = 0; i < edge - 4; i++)
{
for (int j = 0; j < edge - 4; j++)
{
if (gBoard[i, j] == nowPlayer && gBoard[i + 1, j + 1] == nowPlayer && gBoard[i + 2, j + 2] == nowPlayer
&& gBoard[i + 3, j + 3] == nowPlayer && gBoard[i + 4, j + 4] == nowPlayer)
{
return true;
}
}
}
// / 오목
for (int i = 0; i < edge - 4; i++)
{
for (int j = 0; j < edge - 4; j++)
{
if (gBoard[edge - i - 1, j] == nowPlayer && gBoard[edge - i - 2, j + 1] == nowPlayer && gBoard[edge - i - 3, j + 2] == nowPlayer
&& gBoard[edge - i - 4, j + 3] == nowPlayer && gBoard[edge - i - 5, j + 4] == nowPlayer)
{
return true;
}
}
}
return false;
}
isWin() 함수는 말을 놓을때마다 검사를 해서 승리를 판정하게 된다
if(isWin())
{
String msg = nowPlayer.ToString() + "플레이어가 승리했습니다";
MessageBox.Show(msg);
nowPlaying = false;
GameStart.Text = "게임시작";
}
else
{
nowPlayer = ((nowPlayer == Horse.BLACK) ? Horse.WHITE : Horse.BLACK);
ChatLog.Text = nowPlayer.ToString() + "플레이어 차례입니다";
}
판정이 아직 나지 않았다면 말을 바꾸면서 textBox 메세지도 바꿔주는 것을 알 수 있다
다음은 현재까지 구현한 오목 화면의 모습이다
'PL > C++' 카테고리의 다른 글
memset과 ZeroMemory (0) | 2019.09.02 |
---|---|
Winsock2 소켓 프로그래밍 (0) | 2019.09.01 |
오목 게임 화면 구성 (0) | 2019.09.01 |
C# 2차원 배열 구성해서 출력하기 (0) | 2019.09.01 |
boost.asio를 이용한 TCP 동기식 통신 (0) | 2019.08.31 |