Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kbhit() i getchar() - pomoc

[es] :: C/C++ programiranje :: kbhit() i getchar() - pomoc

[ Pregleda: 1323 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dulesusic
Dušan Šušić
Novi Sad

Član broj: 45176
Poruke: 418
212.200.65.*



+3 Profil

icon kbhit() i getchar() - pomoc07.04.2011. u 23:22 - pre 141 meseci
Pravim ping pong igru koja treba da radi na LPC2468 ploci sa ARM7 mikrokontrolerom.
Imam problem sa unosom karaktera sa tastature. Kad pritisnem odredjeni karakter za pomeranje reketa na igri, on se ne pomeri za 5 pixela (koliko sam stavio da je korak) nego se odmah zakuca u krajnju levu ili desnu stranu (kao da signal sa tastature predugo traje pa se javi oscilovanje :( Bounce). Ispravih to (dodavanjem promenljive prvi koja se vidi u prilozenom kodu), medjutim, sad se desava da je to sporo da mi se sadrzaj ekrana ne osvezi momentalno, neko nekad prisinem i po 3 puta taster a reket se ispise na onoj poziciji na kojoj bi se ispisao svakako nakon 3 pritiska tastera, a onog izmedju ne postoji... Mislim da je problem u funkciji getchar() i to sto ispod nje ide ostatak koda koji pomera rekete. Ispravite me ako gresim i voleo bih da cujem vase misljenje kako da ispravim ovo? Problem postoji, a ja nemam ideju. Kao sto rekoh, mislim da funkcija getchar() treba nekako da se "izoluje" od ostatka koda koji sledi ispod nje, ali da se ostavi deo if(prvi) jer mi to sprecava bouncing sa ulaza...


Code:
void play()
{
char c1;
char prvi=1;

    while(1)
    {
        if(kbhit())
        {
            c1=getchar();
                
                
                
                if(prvi)
                {
                
                    prvi=0;
                        
                        if(c1=='a' || c1=='A')
                            {
                                movebat('A');
                            }
                        
                        if(c1=='y' || c1=='Y')
                            {
                                movebat('Y');
                            }
                        
                        if(c1=='j' || c1=='J')
                            {
                                movebat('J');
                            }
                    
                        if(c1=='m' || c1=='M')
                            {
                                movebat('M');
                
                            }                
            

                }
                
        
        } else prvi=1;
    }
}
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1237



+93 Profil

icon Re: kbhit() i getchar() - pomoc14.04.2011. u 23:10 - pre 141 meseci
Da li si rešio problem?
 
Odgovor na temu

dulesusic
Dušan Šušić
Novi Sad

Član broj: 45176
Poruke: 418
212.200.65.*



+3 Profil

icon Re: kbhit() i getchar() - pomoc14.04.2011. u 23:25 - pre 141 meseci
Jesam, napisao sam drugačiju funkciju koja je radila isto sto se ocekivalo i od ovog, gore navedenog, načina:

Code:
void movebat (void)
{
char ulaz;

    if(kbhit())
    {
        ulaz=getchar();
    
        if((ulaz=='a' || ulaz=='A') && batA.x_koordinata>0)
            {
                batA.x_koordinata_temp=batA.x_koordinata;
                batA.x_koordinata-=25;
                
                lcd_fillRect(frame_map, batA.x_koordinata_temp, batA.y_koordinata_temp, batA.x_koordinata_temp+batA.duzina, batA.y_koordinata_temp+batA.sirina,WHITE);
                lcd_fillRect(frame_map, batA.x_koordinata, batA.y_koordinata, batA.x_koordinata+batA.duzina, batA.y_koordinata+batA.sirina, BLACK);
            }
        else

        if((ulaz=='s' || ulaz=='S') && batA.x_koordinata+batA.duzina<240)
            {
                batA.x_koordinata_temp=batA.x_koordinata;
                batA.x_koordinata+=25;
                
                lcd_fillRect(frame_map, batA.x_koordinata_temp, batA.y_koordinata_temp, batA.x_koordinata_temp+batA.duzina, batA.y_koordinata_temp+batA.sirina,WHITE);
                lcd_fillRect(frame_map, batA.x_koordinata, batA.y_koordinata, batA.x_koordinata+batA.duzina, batA.y_koordinata+batA.sirina, BLACK);

            }
        else
        
        if((ulaz=='k' || ulaz=='K') && batB.x_koordinata>0)
            {
                batB.x_koordinata_temp=batB.x_koordinata;
                batB.x_koordinata-=25;
            
                lcd_fillRect(frame_map, batB.x_koordinata_temp, batB.y_koordinata_temp, batB.x_koordinata_temp+batB.duzina, batB.y_koordinata_temp+batB.sirina,WHITE);
                lcd_fillRect(frame_map, batB.x_koordinata, batB.y_koordinata, batB.x_koordinata+batB.duzina, batB.y_koordinata+batB.sirina, RED);

            }
        else
    
        if((ulaz=='l' || ulaz=='L') && batB.x_koordinata+batB.duzina<240)
            {
                batB.x_koordinata_temp=batB.x_koordinata;
                batB.x_koordinata+=25;
                
                lcd_fillRect(frame_map, batB.x_koordinata_temp, batB.y_koordinata_temp, batB.x_koordinata_temp+batB.duzina, batB.y_koordinata_temp+batB.sirina,WHITE);
                lcd_fillRect(frame_map, batB.x_koordinata, batB.y_koordinata, batB.x_koordinata+batB.duzina, batB.y_koordinata+batB.sirina, RED);

            }
        
        else
        
        if((ulaz=='q' || ulaz=='Q'))
            {
            usleep(1000);
            lcd_fillScreen(frame_map, BLACK);
            exit(1);
            }
    }


}
 
Odgovor na temu

[es] :: C/C++ programiranje :: kbhit() i getchar() - pomoc

[ Pregleda: 1323 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.