Próbuję zrobić ekran do gry samochodowej i sprawić, by ekran czekał na klucz, aby przejść do następnego ekranu, chodzi o to, że tym kodem zbyt szybko zmienia kolory. Próbowałem już delay()
i sleep()
, które nie działały prawidłowo. Poza tym po naciśnięciu klawisza zamyka się i nie czeka, aż wprowadzę klucz. Chcę tylko, aby tytuł migał między białym a czerwonym, dopóki nie zostanie naciśnięty klawisz, i dowiedz się, dlaczego kończy działanie po naciśnięciu klawisza.
Oto mój kod:
#include <dos.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "C|\\BORLANDC\\BGI");
outtextxy(250,280,"POINTER DRIVER 1.0");
outtextxy(250,290,"LCCM 10070249");
do
{
setcolor(WHITE);
outtextxy(250,380,"PRESS ANY KEY TO CONTINUE");
// delay(10); nothing works here :(
setcolor(RED);
outtextxy(250,380,"PRESS ANY KEY TO CONTINUE");
} while(!kbhit());
cleardevice();
outtextxy(250,290,"HELLO"); //here it draws mega fast and then exits
getch();
closegraph();
return 0;
}
2 odpowiedzi
Zamiast używać delay(10)
, może spróbuj użyć jakiejś zmiennej timera, aby to zrobić. Wypróbuj coś takiego (modyfikacja pętli do-while
):
unsigned flashTimer = 0;
unsigned flashInterval = 30; // Change this to vary flash speed
do
{
if ( flashTimer > flashInterval )
setcolor(RED);
else
setcolor(WHITE);
outtextxy(250,380,"PRESS ANY KEY TO CONTINUE");
++flashTimer;
if ( flashTimer > flashInterval * 2 )
flashTimer = 0;
// Remember to employ any required screen-sync routine here
} while(!kbhit());
kbhit()
zwraca true
, jeśli w buforze jest znak, ale nie usuwa znaku przed jego powrotem. Gdy dojdziesz do linii getch()
, pierwszy klawisz, który naciśniesz, wyrwie się z pętli while.
Możliwe rozwiązanie: Chociaż jest to trochę dziwaczne, dodanie getch()
zaraz po pętli while prawdopodobnie to naprawi.
Czy mogę również zasugerować użycie ncurses zamiast tych bibliotek Borland?
Podobne pytania
Nowe pytania
c++
C ++ to język programowania ogólnego przeznaczenia. Pierwotnie został zaprojektowany jako rozszerzenie C i ma podobną składnię, ale teraz jest to zupełnie inny język. Użyj tego tagu w przypadku pytań dotyczących kodu (który ma zostać) skompilowany za pomocą kompilatora C ++. Użyj znacznika specyficznego dla wersji w przypadku pytań związanych z określoną wersją standardu [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] lub [C ++ 23] itp. .