안녕하세요,
어제 배열 응용 관련 프로그래밍에 여쭤봤는데 작업한 코드가 잘 되지를 않네요, 한번 봐주시면 감사하겠습니다.
최근에 막 배열 배우고 배열 응용 육목 짜기 과제를 받았는데요. 처음 시작할때 임시로 const int N을 임의로 설정하고 아래 사진 같은 경우는 N = 19일 경우 2d 배열로 char board[N][N]의 경우입니다.
프로그램은 흑 백 팀으로 나뉘어 B(black)이 시작을 해서 주어진 칸 안에 자리를 입력하고 (H14 밑 사진과 같이) 그리고 W(white)가 두번 기회를 얻고, 그 후 검정이 두번 기회를 얻고 (흑 > 백 > 백 > 흑 > 흑 > 백 > 백 > 흑 > 흑 ...) 육목을 채우면 끝나는 게임입니다.
마지막 칸이 찼는데도 육목이 없을경우는 "Draw Game!"이고 아닐경우 각각 "Black wins/White wins"가 됩니다. 제한사항은 보드 사이즈를 정하는 const int N 이외에는 global variables를 사용할 수 없고 프로그램 안에 최소 4개 이상의 함수, 그리고 그 중 최소 2개의 함수는 배열 변수를 포함하고 있어햐 합니다.
코드 어떻게 짜야할지 도움 주시면 정말 감사하겠습니다 ㅠㅠ.
제가 지금 짠 코드는:
#include <iostream>
using namespace std;
const int N = 19;
void print(int arr[][N]) {
cout << " ";
for (int i = 0; i < N; i++)
{
printf(" %c ", 65 + i);
}
printf("\n");
for (int i = 0; i < N; i++)
{
printf(" %2d ", i);
for (int j = 0; j < N; j++)
{
if (arr[i][j] == 1)
printf(" B ");
else if (arr[i][j] == 2)
printf(" W ");
else
printf(" . ");
}
printf("\n");
}
}
void input(bool turn, int arr[][N]) {
char command[255] = { 0 };
bool invalid = true;
while (invalid)
{
if (turn)
cout << "W";
else
cout << "B";
cout << "'s turn : ";
cin >> command;
if (command[0] >= 65 && command[0] <= 65 + N)
{
// 맞음
char c = command[0] - 65;
int a1 = int(c);
memmove(&command[0], &command[1], sizeof(command) - 1);
int a2 = atoi(command);
if (arr[a2][a1] == 0)
{
arr[a2][a1] = turn ? 2 : 1;
break;
}
else
cout << "Invalid move. Enter again!" << endl;
}
else
{
// 틀림
cout << "Invalid move. Enter again!" << endl;
}
}
}
void turn(bool* turn, int* count) {
if (*count == 1) {
*turn = !(*turn);
*count = 0;
}
else
{
(*count)++;
}
}
bool winner(int arr[][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == 1 && arr[i][j + 1] == 1 && arr[i][j + 2] == 1 && arr[i][j + 3] == 1 && arr[i][j + 4] == 1 && arr[i][j + 5] == 1) {
cout << "Black wins!" << endl;
exit(0);
}
else if (arr[j][i] == 1 && arr[j + 1][i] == 1 && arr[j + 2][i] == 1 && arr[j + 3][i] == 1 && arr[j + 4][i] == 1 && arr[j + 5][i] == 1) {
cout << "Black wins!" << endl;
exit(0);
}
else if (arr[i][j] == 1 && arr[i + 1][j + 1] == 1 && arr[i + 2][j + 2] == 1 && arr[i + 3][j + 3] == 1 && arr[i + 4][j + 4] == 1 && arr[i + 5][j + 5] == 1) {
cout << "Black wins!" << endl;
exit(0);
}
else if (arr[i][j] == 1 && arr[i - 1][j + 1] == 1 && arr[i - 2][j + 2] == 1 && arr[i - 3][j + 3] == 1 && arr[i - 4][j + 4] == 1 && arr[i - 5][j + 5] == 1) {
cout << "Black wins!" << endl;
exit(0);
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == 2 && arr[i][j + 1] == 2 && arr[i][j + 2] == 2 && arr[i][j + 3] == 2 && arr[i][j + 4] == 2 && arr[i][j + 5] == 2) {
cout << "White wins!" << endl;
exit(0);
}
else if (arr[j][i] == 2 && arr[j + 1][i] == 2 && arr[j + 2][i] == 2 && arr[j + 3][i] == 2 && arr[j + 4][i] == 2 && arr[j + 5][i] == 2) {
cout << "White wins!" << endl;
exit(0);
}
else if (arr[i][j] == 2 && arr[i + 1][j + 1] == 2 && arr[i + 2][j + 2] == 2 && arr[i + 3][j + 3] == 2 && arr[i + 4][j + 4] == 2 && arr[i + 5][j + 5] == 2) {
cout << "White wins!" << endl;
exit(0);
}
else if (arr[i][j] == 2 && arr[i - 1][j + 1] == 2 && arr[i - 2][j + 2] == 2 && arr[i - 3][j + 3] == 2 && arr[i - 4][j + 4] == 2 && arr[i - 5][j + 5] == 2) {
cout << "White wins!" << endl;
exit(0);
}
}
}
}
int main() {
int arr[N][N] = { 0 };
bool end = false;
bool turncheck = 0;
int turncount = 0;
while (!end)
{
print(arr);
turn(&turncheck, &turncount);
input(turncheck, arr);
end = winner(arr);
}
}