スペースインベーダーに似た ncurses でゲームを作っています。
これまでのところ、動きと撃墜はありましたが、問題が発生しました。
プレイヤーがレーザーを発射するとき、画面の一方の端からもう一方の端にレーザーが表示されないように、usleep 呼び出しを使用して、レーザーが画面上を移動するのを遅らせています。
usleep を使用してレーザーを遅延させる問題は、レーザーが画面を横切って移動している間、ループが終了するまでプレーヤーが移動できないことを意味します。
私の質問は、ユーザー入力でプレーヤー/カーソルを同時に動かしながら、画面上を移動するレーザーを印刷する別の方法はありますか?
ユーザーが「f」キーを押すと、次のコードは画面上で線 (レーザー) を移動します。ただし、レーザーが画面から離れるまで、ユーザーは再び移動することはできません。
void combat(int y, int x)
{
do
{
mvprintw(y -1, x, "|");
refresh();
y--;
usleep(50000);
mvprintw(y , x, " ");
}
while(y>0);
}