• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja sleep() nie działa prawidłowo.

0 głosów
464 wizyt
pytanie zadane 22 października 2015 w C i C++ przez aspoka Mądrala (5,290 p.)

Witam, chcę stwożyć 'prostą' gre w konsoli. Moim celem jest stwożenie gry snake. Program już pokazuje na ekranie pole do gry i chciałbym go zatrzymać teraz na parę sekund. 

Potrzebny kawałęk kodu wygląda mniej więcej tak:

#include <iostream>
#include <unistd.h> //to nie są wszystkie biblioteki ale tylko te są teraz istotne

void pi(int x, int y, int dl) //funkcja rysująca linie pionową ktora zaczyna się w miejscu o wspolzednych x i y o dlugosci dl
{
    for(int i=0; i<dl; i++)
    {
        printf("\x1b[%d;%df", y, x);
        cout<<"\u2588";
        y++;
    }
}

void po(int x, int y, int dl)//funkcja rysująca linie poziomą ktora zaczyna się w miejscu o wspolzednych x i y o dlugosci dl
{
    for(int i=0; i<dl; i++)
    {
        printf("\x1b[%d;%df", y, x);
        cout<<"\u2588";
        x++;
    }
}
int main()
{   
    printf("\033[2J");  //czyczenie ekranu
    po(3, 2, 100);       //rysowanie prostokątnej ramki wewnatrz ktorej porusza sie waz
    po(3, 51, 100);
    pi(3, 2, 50);
    pi(2, 2, 50);
    pi(102, 2, 50);
    pi(103, 2, 50);

    sleep(3);           //tutaj program ma sie zatrzymac przed narysowaniem weza
    po(27, 47, 12); //rysowanie weza
    
    printf("\x1b[%d;%df", 70, 1);
    return 0;
}

Leecz program nie rysuje do końca obwódki a się zatrzymuje, a potem tak po prostu się wznawia i jak gdzyby nigdy nic kończy rysowanie. O co może chodzić?

Z góry dziękuje za odpowiedź.

3 odpowiedzi

+1 głos
odpowiedź 22 października 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)
edycja 22 października 2015 przez Sebastian Fojcik
 
Najlepsza

cout to inteligentny strumień. Jeżeli wypisujesz coś cout << "cos tam", to on może zaczekać, aż mu się uzbiera duża ilość danych i dopiero wszystko na raz wypisze.

Być może strumień nie wypisał wszystkich danych do napotkania sleep() i dlatego tak się dzieje.
Spróbuj wymusić wypisanie wszystkiego co siedzi w strumieniu. Przed funkcją sleep() wywołaj:

cout.flush();

Sprawdź czy zadziała ;-)

komentarz 22 października 2015 przez aspoka Mądrala (5,290 p.)
Wielkie dzięki działa :D
0 głosów
odpowiedź 22 października 2015 przez Rogargol Pasjonat (16,610 p.)
Nie mam w tym momencie czasu zeby przygladac sie kodowi, ale napisze tlyko ze w funkcji sleep podajesz czas zwloki w milisekundach wiec wartosc 3 jest praktycznie niezauwazalna.
komentarz 22 października 2015 przez aspoka Mądrala (5,290 p.)
No właśnie też tak myślałem, ale tak to działa w bibliotece canio.h na windowsie a na macu to jest w sekundach
0 głosów
odpowiedź 22 października 2015 przez Dorion300 Szeryf (90,250 p.)

o zatrzymać teraz na parę sekund. 

To podaj więcej tych milisekund....3 milisekund != 3 Sekundy... 

komentarz 22 października 2015 przez aspoka Mądrala (5,290 p.)
w macu, i tej bibliotece to są 3 sekundy
komentarz 22 października 2015 przez Dorion300 Szeryf (90,250 p.)
No to może wstaw sleep zaraz przed return.
komentarz 22 października 2015 przez aspoka Mądrala (5,290 p.)
1. Już działa wystarczyło wstawić cout.flush przed sleep

2. ale i tak czy siak po tym miało by się coś dziać więc to czy teraz będę tym manipulować czy nie jest mało ważne

Podobne pytania

0 głosów
1 odpowiedź 522 wizyt
0 głosów
3 odpowiedzi 1,443 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez MsMaciek123 Pasjonat (24,760 p.)
0 głosów
2 odpowiedzi 513 wizyt
pytanie zadane 18 grudnia 2015 w C i C++ przez Piotr Karaś Początkujący (460 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...