[ wiktor91 @ 07.12.2009. 20:39 ] @
Radim grafički(WinBGim) program u kojemu pomoču tipkovnice pomičete 2 točke na zaslonu, kada se pritisne enter program ispiše na zaslonu kolika je udaljenost te 2 točke u pixelima.
Zamisao mi je da kada korisnik uđe u program on pritisne tipku 1 ili 2 ovisno koju točku želi micati, tada prelazimo u mod za tu točku i pomičemo samo nju dok druga ostaje na mjestu gdje je i bila, i onda u bilo kojem trenutku se možemo prebaciti na drugu točku i opet nju pomicati.

E sad ja sam nešto pokušavao oko tog mjenjanja točaka i neke stvari mi ne funkcioniraju pa bi vas molio da mi pomognete malo pošto sam početnik pa možda griješim negdje bezveze.

Code:
#include <cstdio>
#include <cmath>
#include "graphics.h"
 
using namespace std;
 
int main()
{
    initwindow(640,480,"Razmak tocaka");

    outtextxy(0,0,"Pritisnite tipku 1 za postavljanje prve tocke");
    outtextxy(0,15,"Pritisnite tipku 2 za postavljanje druge tocke");   
    char input;
     if(kbhit())
       {
       input = getch();
       switch (input) {
              case 49:
              outtextxy(100,100,"Mod 1");
              
              break;
              case 50:
              outtextxy(100,100,"Mod 2");
              break;
       }   
       }                   
    system("pause");
    closegraph();
    return 0;
}



Znaci to je samo dio za to mjenjanje modova, nisam ništa drugo sad dodavao da vas ne zbunjujem s puno koda. Uglavnom ovo mi ne radi a meni se čini da bi trebalo.
Ako je pritisnuta tipka na tipkovnici smjesti njezin kod u input varijablu, onda ide switch petlja sa tom input varijablom i ako je pritisnuta tipka 1 onda je case 49 i izvršava se kod za prvu točku, isto tako i drugi slučaj.
Ali ovo ne radi, molio bih vas da me uputite u čemu griješim.

Hvala!
[ Mihajlo Cvetanović @ 08.12.2009. 13:03 ] @
Problem je u tome što funkcija kbhit vraća false ako ničeg nema u baferu tastature (a na početku rada obično nema, osim ako nisi brz kao Munja).

Rešenje je ili da ovaj deo koda staviš u nekakvu petlju, ili da izbaciš if(kbhit()).
[ wiktor91 @ 08.12.2009. 15:15 ] @
Evo ispravio sam pogrešku i malo dodao još koda i sada me muči druga stvar.

Ovo mi ne radi kako treba
Code:
#include <cstdio>
#include <cmath>
#include "graphics.h"

using namespace std;

int main()
{
    int x1=300,y1=240;
    int x2=320,y2=240;
    initwindow(640,480,"Razmak tocaka");

    outtextxy(0,0,"Pritisnite tipku 1 za postavljanje prve tocke");
    outtextxy(0,15,"Pritisnite tipku 2 za postavljanje druge tocke");

    int mod=1; //defaultni mod
    char input;

    while(1)
    {
        switch( mod )
        {
            case 1: //ako je mod 1
                outtextxy(590,0,"Tocka 1");

                if(kbhit())
                {
                    input = getch();
                    if (input == 80) x1--; //dole
                    if (input == 72) x1++; //gore
                    if (input == 75) y1--; //levo
                    if (input == 77) y1++; //desno
                    putpixel(x1,y1,15);
                }

                if(kbhit())
                {
                    input = getch();
                    if (input == 49) mod=1; //provjera dali je stisnuta tipka 1 ili 2 na tipkovnici
                    if (input == 50) mod=2;
                }
            break;

            case 2: //ako je mod 2
                outtextxy(590,0,"Tocka 2");

                if(kbhit())
                {
                    input = getch();
                    if (input == 80) x2--; //dole
                    if (input == 72) x2++; //gore
                    if (input == 75) y2--; //levo
                    if (input == 77) y2++; //desno
                    putpixel(x2,y2,15);
                }
                if(kbhit())
                {
                    input = getch();
                    if (input == 49) mod=1;  //provjera dali je stisnuta tipka 1 ili 2 na tipkovnici
                    if (input == 50) mod=2;
                }
        }
    }
    system("pause");
    closegraph();
    return 0;
}


Ako se nekome da da malo prouci kod pa mi pomogne.
Vjerujem da mi sada program ne radi kako bi trebao jer više puta za redom pozivam kbhit() pa se onda zbuni ili nešto, kako da rješim taj problem? Postoji li neki drugi bolji način za detekciju pritiska tipke?
[ wiktor91 @ 08.12.2009. 15:22 ] @
Izgleda da sam riješio problem... nisam znao da mi za getch() netreba kbhit() i if petlja...
Tako da sam izbrisao if i kbhit() iz djela za provjeru mod tipke i program radi :D