我在控制檯上用C++編程Space Invaders克隆。 我有一個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(X - 我,我+我);應該只是gotoxy(x,y + i);你想在同一個x偏移量上打印船的所有行 – FamZ
它可能是特定於操作系統的。 [ncurses](https://www.gnu.org/software/ncurses/)不是C++ 14標準的一部分,並且不適用於每個操作系統。 –
標籤在這裏工作得非常好。他們不需要你的幫助,也可以在標題中重複添加它們。在帖子的標題和文字中重複標籤信息是完全沒有必要的。讓標籤完成他們的工作。 –