Submission

Status:

PPPPPPPPPPPPPPPPPPPP

Score: 100

User: pxsit

Problemset: Othello

Language: cpp

Time: 0.001 second

Submitted On: 2024-11-14 21:22:12

#include <stdio.h>

// ฟังชันสำหรับกำหนดว่าอยู่ฝั่งไหน
void flipPieces(char arr[8][8], int x, int y, char player, char opponent)
{
    // เช็คแนวนอน
    for (int j = y - 1; j >= 0 && arr[x][j] == opponent; j--)
    {
        if (j > 0 && arr[x][j - 1] == player)
        {
            for (int k = y - 1; k >= j; k--)
                arr[x][k] = player;
            break;
        }
    }
    for (int j = y + 1; j < 8 && arr[x][j] == opponent; j++)
    {
        if (j < 7 && arr[x][j + 1] == player)
        {
            for (int k = y + 1; k <= j; k++)
                arr[x][k] = player;
            break;
        }
    }

    // เช็ตแนวตั้ง
    for (int i = x - 1; i >= 0 && arr[i][y] == opponent; i--)
    {
        if (i > 0 && arr[i - 1][y] == player)
        {
            for (int k = x - 1; k >= i; k--)
                arr[k][y] = player;
            break;
        }
    }
    for (int i = x + 1; i < 8 && arr[i][y] == opponent; i++)
    {
        if (i < 7 && arr[i + 1][y] == player)
        {
            for (int k = x + 1; k <= i; k++)
                arr[k][y] = player;
            break;
        }
    }

    // เช็คทแยงซ้าย
    for (int i = x - 1, j = y - 1; i >= 0 && j >= 0 && arr[i][j] == opponent; i--, j--)
    {
        if (i > 0 && j > 0 && arr[i - 1][j - 1] == player)
        {
            for (int k = x - 1, l = y - 1; k >= i && l >= j; k--, l--)
                arr[k][l] = player;
            break;
        }
    }
    for (int i = x + 1, j = y + 1; i < 8 && j < 8 && arr[i][j] == opponent; i++, j++)
    {
        if (i < 7 && j < 7 && arr[i + 1][j + 1] == player)
        {
            for (int k = x + 1, l = y + 1; k <= i && l <= j; k++, l++)
                arr[k][l] = player;
            break;
        }
    }

    // เช็คทแยงขวา
    for (int i = x - 1, j = y + 1; i >= 0 && j < 8 && arr[i][j] == opponent; i--, j++)
    {
        if (i > 0 && j < 7 && arr[i - 1][j + 1] == player)
        {
            for (int k = x - 1, l = y + 1; k >= i && l <= j; k--, l++)
                arr[k][l] = player;
            break;
        }
    }
    for (int i = x + 1, j = y - 1; i < 8 && j >= 0 && arr[i][j] == opponent; i++, j--)
    {
        if (i < 7 && j > 0 && arr[i + 1][j - 1] == player)
        {
            for (int k = x + 1, l = y - 1; k <= i && l >= j; k++, l--)
                arr[k][l] = player;
            break;
        }
    }
}

int main()
{
    char arr[8][8];
    char string[8 + 1];
    for (int i = 0; i < 8; i++)
    {
        scanf("%s", string);
        for (int j = 0; j < 8; j++)
        {
            arr[i][j] = string[j];
        }
    }

    char key = 'B';
    for (;;)
    {
        int x, y;
        scanf("%d %d", &x, &y);
        if (x == -1 && y == -1)
            break;

        if (arr[x][y] == '_')
        {
            char player = key;
            char opponent;
            if (key == 'B')
                opponent = 'W';
            else
                opponent = 'B';

            arr[x][y] = player;                      
            flipPieces(arr, x, y, player, opponent); 
            key = opponent;                          // Switch turns
        }
    }

    // Count the number of pieces
    int blackCount = 0;
    int whiteCount = 0;
    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            if (arr[i][j] == 'B')
                blackCount++;
            else if (arr[i][j] == 'W')
                whiteCount++;
        }
    }

    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            printf("%c", arr[i][j]);
        }
        printf("\n");
    }

    if (blackCount > whiteCount)
        printf("black wins");
    else if (whiteCount > blackCount)
        printf("white wins");
    else
        printf("draw");

    return 0;
}