편집 기록

편집 기록
  • 프로필 유동욱님의 편집
    날짜2020.04.21

    재업) C++ 배열 응용 육목 질문


    안녕하세요,

    어제 배열 응용 관련 프로그래밍에 여쭤봤는데 작업한 코드가 잘 되지를 않네요, 한번 봐주시면 감사하겠습니다.

    최근에 막 배열 배우고 배열 응용 육목 짜기 과제를 받았는데요. 처음 시작할때 임시로 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);
        }
    }
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.04.21

    재업) C++ 배열 응용 육목 질문


    안녕하세요,

    어제 배열 응용 관련 프로그래밍에 여쭤봤는데 작업한 코드가 잘 되지를 않네요, 한번 봐주시면 감사하겠습니다.

    최근에 막 배열 배우고 배열 응용 육목 짜기 과제를 받았는데요. 처음 시작할때 임시로 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

    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);
    }
    

    }