• 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
59 wizyt
pytanie zadane 7 stycznia w C i C++ przez Moti Początkujący (370 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 (102,770 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 92 wizyt
pytanie zadane 1 stycznia 2018 w Python, Django przez Ciartek Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 585 wizyt
pytanie zadane 3 grudnia 2015 w C i C++ przez pingwin1993 Początkujący (450 p.)
+1 głos
1 odpowiedź 98 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez NiCKo Użytkownik (500 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

60,251 zapytań

105,938 odpowiedzi

220,099 komentarzy

32,460 pasjonatów

Przeglądających: 286
Pasjonatów: 10 Gości: 276

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.

...