• 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]

VPS Starter Arubacloud
0 głosów
395 wizyt
pytanie zadane 7 stycznia 2019 w C i C++ przez Moti Użytkownik (650 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 2019 przez RafalS VIP (122,820 p.)
wybrane 7 stycznia 2019 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 162 wizyt
pytanie zadane 1 stycznia 2018 w Python przez Ciartek Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 1,506 wizyt
pytanie zadane 3 grudnia 2015 w C i C++ przez pingwin1993 Użytkownik (570 p.)
+1 głos
1 odpowiedź 564 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez NiCKo Początkujący (490 p.)

92,963 zapytań

141,928 odpowiedzi

321,161 komentarzy

62,297 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...