Морской бой на с++. Отображение полей в консольном приложении

Написала простенькое консольное приложение морской бой, но возникла проблема, когда его запускаю, приложение выглядит одним образом(первый скрин), а после того как совершается первый ход внешний вид меняется (второй скрин) и всё встаёт не на свои места, в чем может быть проблема? введите сюда описание изображения введите сюда описание изображения Вот некоторые куски кода:

void PrintArray(int m1[n][n], int nomPol){
if (nomPol == nomGamer - 1)    SetColor(Red, LightRed);  //если номер поля совпадает с номером игрока, то линейку поля по Х выделяем другим цветом
else SetColor(Red, LightRed);
GotoXY(nomPol * lvGrPol, verhGrPol);
cout << "   " << 1 << "  " << 2 << "  " << 3 << "  " << 4 << "  " << 5;
cout << "  " << 6 << "  " << 7 << "  " << 8 << "  " << 9 << "  " << 10 << endl;

for (int i = 0; i < n; i++)
{
    if (nomPol == nomGamer - 1)    SetColor(Red, LightRed);  //тоже самое для Y
    else SetColor(Red, LightRed);
    GotoXY(nomPol * lvGrPol, verhGrPol + 2 * i + 1);
    if (i == 9) cout << i + 1;
    else cout << " " << i + 1;
    GotoXY(nomPol * lvGrPol, verhGrPol + 2 * i + 2);
    cout << "  ";
    for (int j = 0; j < n; j++)
    {
        if ((i + j) % 2 == 0) SetColor(White, DarkGray);
        else SetColor(White, LightGray);
        switch (m1[i][j])
        {
        case 0:     //пустая клетка
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 1);
            cout << "   ";
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 2);
            cout << "   ";
            break;

        case 9:     //клетка мимо
            SetColor(Black, Red);
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 1);
            cout << "   ";
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 2);
            cout << "   ";
            break;

        case 5:     //клетка попадание
            SetColor(Black, Green);
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 1);
            cout << "   ";
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 2);
            cout << "   ";
            break;

        default:
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 1);
            cout << "   ";
            GotoXY(nomPol * lvGrPol + 3 * j + 2, verhGrPol + 2 * i + 2);
            cout << "   ";
            break;
        }


    }
    cout << endl;
}

}

void game(int mRab[n][n], int nomGamer)   {
statusGamer = 1;
system("cls");
PrintArray(m1Rab, 0);
PrintArray(m2Rab, 1);

SetColor(Black, LightGray);
GotoXY(5, 2);
cout << s8;
GotoXY(45, 2);
cout << s9;
SetColor(White, Black);
GotoXY(lvGrStr+2, hStr+2);
cout << s;           //вывод состояния игры

SetColor(Red, LightGray);
GotoXY(20, 3);   //вывод числа попаданий игрока1
cout << ": " << chisPop1;
GotoXY(60, 3);   //вывод числа попаданий игрока2
cout << ": " << chisPop2;


SetColor(Red, LightGray);
GotoXY(lvGrStr, hStr + 1);
if (nomGamer == 1) cout << "Ходит: " << s8;
else cout << "Ходит: " << s9;

SetColor(Red, LightGray);
GotoXY(10,1);
cout << "Чтобы выйти из игры наберите 100 ";

SetColor(Black, LightGray);
GotoXY(lvGrStr, hStr + 4);
cout << s2;
GotoXY(lvGrStr + 4, hStr + 5);
cin >> jKoord;

if (jKoord != 100) //игра продолжается пока кто-либо не наберет 20 очков или не введут 100
{
    cin >> iKoord;
    jKoord += -1;
    iKoord += -1;

    if ((iKoord >= 0) and (iKoord < 10) and (jKoord >= 0) and (jKoord < 10))
    {
        switch (mRab[iKoord][jKoord])     //если попал, то увеличивается число попаданий и показывается место попадания
        {
        case 0:     //промах
            GotoXY(lvGrStr, hStr);
            strcpy(s, s3);
            cout << s;
            mRab[iKoord][jKoord] = 9;
            statusGamer = 0;
            break;

        case 1:         //попадание
            if (nomGamer == 1) chisPop1 += 1;
            else chisPop2 += 1;
            mRab[iKoord][jKoord] = 5;
            Popadanie(mRab, 1);
            break;

        case 2:         //попадание
            if (nomGamer == 1) chisPop1 += 1;
            else chisPop2 += 1;
            mRab[iKoord][jKoord] = 5;
            Popadanie(mRab, 2);
            break;

        case 3:         //попадание
            if (nomGamer == 1) chisPop1 += 1;
            else chisPop2 += 1;
            mRab[iKoord][jKoord] = 5;
            Popadanie(mRab, 3);
            break;

        case 4:         //попадание
            if (nomGamer == 1) chisPop1 += 1;
            else chisPop2 += 1;
            mRab[iKoord][jKoord] = 5;
            Popadanie(mRab, 4);
            break;

        case 5:     //уже стреляли
            GotoXY(lvGrStr, hStr);
            strcpy(s, s6);
            cout << s;
            break;

        case 9:     //уже стреляли
            GotoXY(lvGrStr, hStr);
            strcpy(s, s6);
            cout << s;
            break;
        }
    }
    else
    {
        GotoXY(lvGrStr, hStr);
        strcpy(s, s7);
        cout << s;
    }


}
else
{
    tekSost = 999;
}

}

int main(){
setlocale(LC_ALL, "Russian");

ArrayNull(m1Rab);   //заполняем матрицу 1 нулями
ArrayNull(m2Rab);   //заполняем матрицу 2 нулями

SetColor(Black, LightGray);
GotoXY(5, 1);
cout << "Морской Бой";
SetColor(Black, LightGray);
GotoXY(5,2);
cout << "Введите 1, чтобы расставить корабли автоматически, вручную - 0";
GotoXY(10, 3);
cin >> statusRast;

if (statusRast == 1)    //если == 1, то автоматическая расстановка кораблей, иначе - ручной
{
    srand(time(NULL));
    for (int i = 1; i <= 4; i++)
    {
        Rasstavit(m1Rab, i);
        Rasstavit(m2Rab, i);
    }
}
else
{
    system("cls");
    PrintArray(m1Rab, 0);
    PrintArray(m2Rab, 1);
}



while (tekSost != 999)
{
    if ((chisPop1 == 20) or (chisPop2 == 20)) break;
    if (statusGamer == 0)
    {
        switch (nomGamer)
        {
        case 1:
            nomGamer = 2;
            game(m2Rab, 2);
            break;

        case 2:
            nomGamer = 1;
            game(m1Rab, 1);
            break;
        }
    }
    else
    {
        switch (nomGamer)
        {
        case 1:
            game(m1Rab, 1);
            break;

        case 2:
            game(m2Rab, 2);
            break;
        }
    }

}

Ответы (0 шт):