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

Pętla gry w tetrisie [C]

0 głosów
64 wizyt
pytanie zadane 7 stycznia w C i C++ przez Moti Użytkownik (510 p.)

Witam mam do napisania Tetrisa w C. Ma on działać jedynie w konsoli (bloczki to na przykład kształty złożone z 4 gwiazdek). Niestety nigdy nie robiłem żadnego projektu programistycznego i natrafiłem na problem, a mianowicie nie wiem jak zrobić tak, żeby niezależnie od niczego innego bloczek spadał niżej co np. pół sekundy (mój program czeka na input, a gdy go nie dostanie to nic nie robi dalej). Oto moja pętla:

while (!gameover)
    {
        initialize(&block);
        printsMap(board);
        while (0==0)
        {
            x=getch();
            doIt(x,&shape);
            if (!check(0,&shape))
                break;
            moves(0, &shape);
            sleep(0.5);
            system("clear");
            printsMap(board);
        }
    }

Funkcja doIt przesuwa bloczek we wskazane przez użytkownika miejsce (dół, lewo, prawo, rotacja o 90 stopni), initialize spawnuje kolejny bloczek, printsMap wypisuje naszą grę w konsoli, moves(0, &shape) przesuwa bloczek w dol. Bardzo proszę o pomoc. Czekam na krytykę :)

1 odpowiedź

+1 głos
odpowiedź 7 stycznia przez RafalS VIP (106,620 p.)
wybrane 7 stycznia przez Moti
 
Najlepsza

Najprościej byłoby posłużyć się jakąś biblioteką, która ogarnie non-blocking stdin read. Przykład z jakiegoś tutoriala:

     int ch;
     nodelay(stdscr, TRUE);
     for (;;) {
          if ((ch = getch()) == ERR) {
              /* user hasn't responded
               ...
              */
          }
          else {
              /* user has pressed a key ch
               ...
              */
          }
     }

A samemu możesz rozwiązać problem wielowątkowością. Jeden wątek ogarnia update stanu gry co 0.5s i sprawdza jedynie czy drugiemu wątkowi, który ma getch() w nieskonczonej petli udalo sie cos wczytac.

Podobne pytania

0 głosów
0 odpowiedzi 93 wizyt
pytanie zadane 1 stycznia 2018 w Python, Django przez Ciartek Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 610 wizyt
pytanie zadane 3 grudnia 2015 w C i C++ przez pingwin1993 Początkujący (450 p.)
+1 głos
1 odpowiedź 100 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez NiCKo Użytkownik (500 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

62,306 zapytań

108,432 odpowiedzi

226,358 komentarzy

35,042 pasjonatów

Przeglądających: 205
Pasjonatów: 4 Gości: 201

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...