Морской бой на с++. Отображение полей в консольном приложении
Написала простенькое консольное приложение морской бой, но возникла проблема, когда его запускаю, приложение выглядит одним образом(первый скрин), а после того как совершается первый ход внешний вид меняется (второй скрин) и всё встаёт не на свои места, в чем может быть проблема?
Вот некоторые куски кода:
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;
}
}
}