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

jaka jest funkcja do nie czekania na getch()?

Object Storage Arubacloud
0 głosów
673 wizyt
pytanie zadane 8 listopada 2017 w C i C++ przez program naczelny Gaduła (3,320 p.)

Mam taki problem iż tworzę grę w konsoli, która składa się z kółka planszy i strzał które na to kółko spadają.

zrobiłem już ten program lecz narazie jest tam 1 strzała, i spada ona po naciścięciu jakiegoś klawisza o 1 kratkę.

chciałbym zrobić aby spadała bez względu czy coś naciśniemy czy nie. Do pobrania znaku używam tutaj getch().

Zamierzam to zrobić tak, aby program nie czekał na ten getch; ma lecieć dalej i strzałka ma spadać.. spadać.. i spadać BEZ getch().

Wkleję tu ten program i uprzedzam, że programuje w using namespace, a nie chciałem już kombinować :)

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <windows.h>

using namespace std;

string miejsce;
string wybor;
int kolko=87, nr_strzala=7, n=0;

int main()
{
cout<<"aby rozpoczac kliknij enter: ";                    /*rozpoczecie*/
getchar();
system("cls");


cout<<"~~witaj w mojej grze~~"<<endl;                     /*pierwsze wyswietlenie tablicy*/
cout<<"sterowanie to: a,w,s,d. Powodzenia:)"<<endl<<endl;
 miejsce="xxxxxxxxxxxxxxx";                                /* (pierwszy x)->0-14         <-(ostatni x) */
miejsce+='\n';
miejsce+="x             x";                                /* (pierwszy x)->16 + 14 = 30 <-(ostatni x) */
miejsce+='\n';
miejsce+="x             x";                                /* (pierwszy x)->32 + 14 = 46 <-(ostatni x) */
miejsce+='\n';
miejsce+="x             x";                                /* (pierwszy x)->48 + 14 = 62 <-(ostatni x) */
miejsce+='\n';
miejsce+="x             x";                                /* (pierwszy x)->64 + 14 = 78 <-(ostatni x) */
miejsce+='\n';
miejsce+="x             x";                                /* (pierwszy x)->80 + 14 = 94 <-(ostatni x) */
miejsce+='\n';
miejsce+="xxxxxxxxxxxxxxx";                                /* (pierwszy x)->96 + 14 = 110<-(ostatni x) */
miejsce[kolko]=char(111);                                  /* dodanie kólka na potrzeby wyswietlenia tablicy, potem jest usuwa */
cout<<miejsce<<endl;
miejsce[kolko]=char(0);



for(;;)
{

/*------------------------------------------------------------------*/
/*                             wybor                                */
for(int i=0; i<1; i++)
 {

 wybor=char(0);
 wybor=getch();


  if (wybor=="w")
  {
  miejsce[kolko]=char(32);
  kolko-=16;
     if (kolko < 17)
     {
      kolko+=16;
     }
  miejsce[kolko]=char(111);
  }


  else if (wybor=="s")
  {
  miejsce[kolko]=char(32);
  kolko+=16;
     if (kolko > 95)
     {
      kolko -= 16;
     }
  miejsce[kolko]=char(111);
  }


  else if (wybor=="a")
  {
  miejsce[kolko]=char(32);
  kolko--;
     if (kolko==16 || kolko==32 || kolko==48 || kolko==64 || kolko==80 )
     {
     kolko++;
     }
  miejsce[kolko]=char(111);
  }


  else if (wybor=="d")
  {
  miejsce[kolko]=char(32);
  kolko++;
     if (kolko==30 || kolko==46 || kolko==62 || kolko==78 || kolko==94)
     {
     kolko--;
     }
   miejsce[kolko]=char(111);
   }
}

/*------------------------------------------------------------------*/
/*                         spadanie strzaly                         */


  if(nr_strzala < 110)
  {

     if(nr_strzala > 16)
      {
       if(kolko==nr_strzala) miejsce[nr_strzala]=char(111);
       else if(nr_strzala < 96) miejsce[nr_strzala]=char(32);
      }


     else
      {
      miejsce[nr_strzala]=char(120);
      }

     nr_strzala+=16;
     miejsce[nr_strzala]='|';
  }


   if (nr_strzala > 96)
   {
    miejsce[nr_strzala]='x';
   }



/*------------------------------------------------------------------*/
/*                         kiedy przegrywasz                        */

   if (nr_strzala==kolko+1 || nr_strzala==kolko-1)
   {
     n++;
   }

   if(nr_strzala==kolko+16 && n!=1)
   {

    miejsce[kolko]=char(32);

    system("cls");

    cout<<"~~witaj w mojej grze~~"<<endl;
    cout<<"sterowanie to: a,w,s,d. Powodzenia:)"<<endl<<endl;
    cout<<miejsce<<endl;
    cout<<"Ajajaj.. przegrales :]";
    exit(0);

   }



   if(nr_strzala==kolko)
   {
    miejsce[nr_strzala]=char(32);
    miejsce[kolko]='|';

    system("cls");

    cout<<"~~witaj w mojej grze~~"<<endl;
    cout<<"sterowanie to: a,w,s,d. Powodzenia:)"<<endl<<endl;
    cout<<miejsce<<endl;
    cout<<"Ajajaj.. przegrales :]";
    exit(0);
  }


/*------------------------------------------------------------------*/
/*                      TABLICA generacja                           */

system("cls");

cout<<"~~witaj w mojej grze~~"<<endl;
cout<<"sterowanie to: a,w,s,d. Powodzenia:)"<<endl<<endl;
cout<<miejsce<<endl;

}

return 0;
}

 

komentarz 8 listopada 2017 przez program naczelny Gaduła (3,320 p.)
potrzebuję funkcje itp.  która będzie umożliwiała wykonywanie dalszego programu i jednoczesne czekanie na getch().

2 odpowiedzi

+1 głos
odpowiedź 8 listopada 2017 przez CzikaCarry Szeryf (75,340 p.)
Możesz wystartować nowy wątek, który będzie powodował, że ta strzała opada, a w podstawowym wątku będziesz zczytywać input od użytkownika :)
komentarz 8 listopada 2017 przez program naczelny Gaduła (3,320 p.)
Ale w jaki sposób bo nie rozumiem :] przecież nie da się jednocześnie tego i tego robić..?
komentarz 9 listopada 2017 przez CzikaCarry Szeryf (75,340 p.)
Da sie, robić kilka rzeczy jednocześnie, poczytaj o wątkach (nie wiem czy to nie za wcześnie dla Ciebie): https://solarianprogrammer.com/2011/12/16/cpp-11-thread-tutorial/
+1 głos
odpowiedź 9 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

W conio.h, którego używasz, istnieje funkcja, która nazywa się bodajże kbhit(). Poczytaj o niej. smiley

komentarz 9 listopada 2017 przez program naczelny Gaduła (3,320 p.)
Trochę o tym już poczytałem, teraz nie mam czasu się tym zajać, ale nie działa niestety. Wprowadziłem taki zapis

wybor=char(0);

if (kbhit())

{

wybor=getch();

}

a potem zaraz za mech. Strzaly

if (wybor==char(0))

{

Sleep(200);

}

oprocz tego zmienilem wybor ze string na char żeby móc zrobić potem ifa ze sleepem, i nic. Nie działa bo strzala co prawda spada ciagle co 1/5 sekundy ale kolko porusza się też tylko co 1/5s. Natomiast ma móc poruszac się w każdym momencie.

Podobne pytania

0 głosów
3 odpowiedzi 3,206 wizyt
pytanie zadane 6 kwietnia 2016 w C i C++ przez E_ZER Początkujący (320 p.)
0 głosów
1 odpowiedź 1,074 wizyt
pytanie zadane 17 listopada 2019 w C i C++ przez rei656 Początkujący (290 p.)
0 głosów
2 odpowiedzi 9,571 wizyt
pytanie zadane 26 września 2017 w C i C++ przez milioneq Początkujący (260 p.)

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

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

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...