Я программирую клонирование Space Invaders в C++ на консоли. У меня есть класс Spaceship, в котором я создаю форму на экране консоли. Я использую клавиши со стрелками для перемещения по экрану по горизонтали. Корабль состоит из 3 частей. Здесь у вас есть фотографии, на которых показано перемещение космического корабля вправо. http://imgur.com/a/fos5M И здесь у вас есть кодЧасти формы не двигаются
class BaseSpaceShip{
protected:
private:
char ship[4][19] = {
" \xDB ",
" \xDB\xDB\xDB\xDB\xDB ",
" \xDB\xDB\xDB\xDB\xDB\xDB\xDB\xDB\xDB"
};
const int mapy = 4;
int x, y;
void Invalidate();
void cls();
public:
BaseSpaceShip();
~BaseSpaceShip();
void Init();
virtual void MoveShip(int dx, int dy);
};
BaseSpaceShip::BaseSpaceShip() {
x = 130;
y = 69;
Init();
}
BaseSpaceShip::~BaseSpaceShip() {
}
void BaseSpaceShip::Init() {
cls();
for (int i = 0; i < mapy; i++) {
gotoxy(x - i, y + i);
cout << ship[i] << endl;
}
}
void BaseSpaceShip::MoveShip(int dx , int dy) {
x+= dx;
y += dy;
Init();
}
Почему происходит эта ошибка и как ее решить? Кроме того, я слышал о концепции двойной буферизации, чтобы удалить мерцание экрана, когда я перемещаю свой космический корабль, но как это реализовать?
я думаю GotoXY (х - i, y + i); должен быть просто gotoxy (x, y + i); вы хотите напечатать все строки корабля на том же смещении x – FamZ
Это, вероятно, конкретная операционная система. [ncurses] (https://www.gnu.org/software/ncurses/) не входит в стандарт C++ 14 и недоступен для каждой операционной системы. –
Тэги здесь отлично работают. Они не нуждаются в вашей помощи, добавляя их избыточно в названии. Совершенно необязательно повторять информацию тега в заголовке и тексте вашего сообщения. Пусть теги выполняют свою работу. –