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. И уберите точки перед
Я их поставил, так как сам символ решётки используется в редакторе БВ и из-за этого визуально изменяется код программы.
Источник: