Ich programmiere einen Space Invaders-Klon in C++ auf der Konsole. Ich habe eine Raumschiffklasse, in der ich die Form auf dem Konsolenbildschirm erstelle. Ich verwende Pfeiltasten, um es horizontal über den Bildschirm zu bewegen. Das Schiff besteht aus 3 Teilen. Hier haben Sie Bilder, die zeigen, wie das Raumschiff nach rechts bewegt wird. http://imgur.com/a/fos5M Und hier haben Sie den CodeTeile der Form bewegen sich nicht
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();
}
Warum dieser Fehler auftritt und wie kann ich es lösen? Außerdem habe ich von dem Double-Buffering-Konzept gehört, um das Bildschirmflimmern zu entfernen, wenn ich mein Raumschiff bewege, aber wie kann ich das umsetzen?
ich denke gotoxy (x - i, y + i); sollte nur gotoxy (x, y + i) sein; Sie möchten alle Zeilen des Schiffes auf dem gleichen x Offset drucken – FamZ
Es ist wahrscheinlich Betriebssystem spezifisch. [ncurses] (https://www.gnu.org/software/ncurses/) ist nicht Teil des C++ 14-Standards und nicht auf jedem Betriebssystem verfügbar. –
Tags funktionieren hier sehr gut. Sie brauchen Ihre Hilfe nicht, indem Sie sie auch im Titel redundant hinzufügen. Es ist absolut unnötig, die Tag-Informationen im Titel und Text Ihres Posts zu wiederholen. Lassen Sie die Tags ihre Arbeit machen. –