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

problem u programu

[es] :: C/C++ programiranje :: C/C++ za početnike :: problem u programu

[ Pregleda: 1106 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

wiktor91
Varazdin, Hrvatska

Član broj: 171052
Poruke: 116
*.adsl.net.t-com.hr.



Profil

icon problem u programu07.12.2009. u 20:39 - pre 175 meseci
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!
Windows 95 /Win’ dz/: n., 32-bit extensions and a graphical shell for a 16-bit patch to an 8-bit operating system
originally coded for a 4-bit microprocessor, written by a 2-bit company, that can’t stand 1 bit of competition.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: problem u programu08.12.2009. u 13:03 - pre 175 meseci
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()).
 
Odgovor na temu

wiktor91
Varazdin, Hrvatska

Član broj: 171052
Poruke: 116
*.adsl.net.t-com.hr.



Profil

icon Re: problem u programu08.12.2009. u 15:15 - pre 175 meseci
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?
Windows 95 /Win’ dz/: n., 32-bit extensions and a graphical shell for a 16-bit patch to an 8-bit operating system
originally coded for a 4-bit microprocessor, written by a 2-bit company, that can’t stand 1 bit of competition.
 
Odgovor na temu

wiktor91
Varazdin, Hrvatska

Član broj: 171052
Poruke: 116
*.adsl.net.t-com.hr.



Profil

icon Re: problem u programu08.12.2009. u 15:22 - pre 175 meseci
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

Windows 95 /Win’ dz/: n., 32-bit extensions and a graphical shell for a 16-bit patch to an 8-bit operating system
originally coded for a 4-bit microprocessor, written by a 2-bit company, that can’t stand 1 bit of competition.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: problem u programu

[ Pregleda: 1106 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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