Проблема с программой с++, как решить?

include<iostream> include<conio.h>

void Paint_process()

{

int button;

int width = 15,height = 60;

int player_width = width / 2,player_height = height / 2;

while(button != 27)

{

char field[width][height];

for(int i = 0;i < width;i++)

{

for(int j = 0;j < height;j++)

{

if(i == 0)

{

field[i][j] = ‘#’;

}

else{

field[i][j] = ‘0’;

}

if(i == width — 1)

{

field[i][j] = ‘#’;

}

if(j == 0)

{

field[i][j] = ‘#’;

}

if(j == height — 1)

{

field[i][j] = ‘#’;

}

}

}

if(field[player_width][player_height] == ‘*’)

{

field[player_width][player_height] = ‘*’;

}

else

{

field[player_width][player_height] = ‘@’;

}

for(int i = 0;i < width;i++)

{

std::cout<<std::endl<<" ";

for(int j = 0;j < height;j++)

{

std::cout<<field[i][j];

}

}

std::cout<<std::endl;

button = getch();

if(button == 87 || button == 119)

{

if(player_width == 1)

{

player_width = player_width;

}

else{

player_width—;

}

}

if(button == 83 || button == 115)

{

if(player_width == width — 2)

{

player_width = player_width;

}

else{

player_width++;

}

}

if(button == 65 || button == 97)

{

if(player_height == 1)

{

player_height == player_height;

}

else{

player_height—;

}

}

if(button == 68 || button == 100)

{

if(player_height == height — 2)

{

player_height = player_height;

}

else{

player_height++;

}

if(button == 13)

{

field[player_width][player_height] = ‘*’;

}

}

system("cls");

}

}

int main()

{

Paint_process();

}

Программа состоит в том,что ты управляешь курсором(почтовой собакой @) с помощью wasd и нужно нажимая enter как-бы

"рисовать" знаками звёздочки(*)". Но почему-то при нажатии enter ничего не происходит,хотя ascii код правильный и логика по идее тоже.

Навскидку и не проверяя код, видно несколько проблем.

Переменная button используется в цикле while, но она неправильно инициализирована перед первым использованием. Это может привести к непредсказуемому поведению программы.

При проверке координат player_height, один раз используется оператор сравнения ==, а второй раз — оператор присваивания =. А оба раза должно быть присваивание. Но, походу, даже исправленное выражение player_height = player_height; бесполезно, так как оно ничего не делает.

И с логикой немножко напутали. Блок, отвечающий за рисование звездочки if(button == 13), вложен внутрь блока движения вправо if(button == 68 || button == 100). Из-за этого он не будет корректно обрабатывать нажатие Enter.

Попробуйте вот этот код (написан "на коленке", не проверял в работе, но ваши явные ошибки устранены):

И не забывайте, что команда очистки экрана system("cls");, работает только под Windows. Для достижения кросс-платформенности необходимо использовать ANSI escape-последовательности или препроцессорные директивы.

P.S. И уберите точки перед

Я их поставил, так как сам символ решётки используется в редакторе БВ и из-за этого визуально изменяется код программы.

Источник: bolshoyvopros.ru

Комп-Мания
Добавить комментарий