#include #include #include #include using namespace std; #include class cKoord { public: int x; int y; cKoord(int x,int y) { this->x = x; this->y = y; } }; //-------------------------------------------------------- // cLaatikko class cLaatikko { cKoord vasenyla; cKoord koko; string teksti; public: cLaatikko(cKoord v, const string &teksti); virtual void piirra() const; virtual void setTeksti(const string &teksti); }; cLaatikko::cLaatikko(cKoord v, const string &teksti) : vasenyla(v), koko(0,0) { setTeksti(teksti); koko.x = teksti.length()+1; koko.y = 2; piirra(); } void cLaatikko::piirra() const { gotoxy(vasenyla.x, vasenyla.y); printf("---------"); gotoxy(vasenyla.x, vasenyla.y + koko.y); printf("---------"); gotoxy(vasenyla.x, vasenyla.y + 1); printf("| |"); gotoxy(vasenyla.x+1, vasenyla.y + 1); printf("%s", teksti.c_str()); } void cLaatikko::setTeksti(const string &teksti) { this->teksti = teksti; piirra(); } //-------------------------------------------------------- // cNappula class cNappula { cLaatikko *nappula; char komentonappain; int komento; int lisaviesti; public: cNappula(cKoord v, char pnap, const string &teksti, int pkomento, int lisa); virtual ~cNappula(); virtual void piirra() const; virtual int tarkista(char c) const; virtual int getLisa() const; virtual int getKomento()const; }; cNappula::cNappula(cKoord v, char pnap, const string &teksti, int pkomento, int lisa) { nappula = new cLaatikko(v, teksti); komentonappain = pnap; komento = pkomento; lisaviesti = lisa; piirra(); } cNappula::~cNappula() { delete nappula; } void cNappula::piirra() const { nappula->piirra(); } int cNappula::tarkista(char c) const { if (c==toupper(komentonappain)) return 1; return 0; } int cNappula::getLisa() const { return lisaviesti; } int cNappula::getKomento() const { return komento; } //-------------------------------------------------------- // cLaskuri class cLaskuri { int tunniste; int maara; // aseta cLaatikko *kehys; public: cLaskuri(cKoord v, int ptun); virtual ~cLaskuri(); virtual void lisaa(); virtual void piirra() const; virtual void nollaa(); virtual void aseta(int n); int tarkista(int check) const; }; cLaskuri::cLaskuri(cKoord v, int ptun) { kehys = new cLaatikko(v, "0"); aseta(0); tunniste = ptun; } cLaskuri::~cLaskuri() { delete kehys; } void cLaskuri::lisaa() { aseta(maara+1); } void cLaskuri::piirra() const { kehys->piirra(); } void cLaskuri::aseta(int n) { char teksti[80]; maara = n; sprintf(teksti,"%3d", maara); kehys->setTeksti(teksti); kehys->piirra(); } void cLaskuri::nollaa() { aseta(0); } int cLaskuri::tarkista(int check) const { if (check == tunniste ) return 1; return 0; } // Application-olio tms. //-------------------------------------------------------- // aliohjelmia int luekomento(cNappula *nappaimet, int *lisa) { char c; int i; *lisa = 0; while (1) { c = (char)toupper(getch()); for (i=0;i<4;i++) if(nappaimet[i].tarkista(c)){ *lisa = nappaimet[i].getLisa(); return nappaimet[i].getKomento(); } } } enum {LISAA,NOLLAA,POISTU} eKOMENTO; int laske(cNappula *nappaimet, cLaskuri *laskurit) { int komento; int lisa; int i; while (1) { komento = luekomento(nappaimet, &lisa); switch (komento) { case LISAA : for(i=0;i<2;i++) // !!!! if(laskurit[i].tarkista(lisa)) laskurit[i].lisaa(); break; case NOLLAA : laskurit[0].nollaa(); laskurit[1].nollaa(); break; case POISTU : return 0; } } } //-------------------------------------------------------- // pääohjelma int main(void) { // cApplication sove(); // sove.AddButton((cKoord(1,1), 'p', "Poistu", 2, 0); // sove.AddButton((cKoord(5,5), 'h', "Poistu", 2, 0); cNappula nappaimet[] = { cNappula(cKoord(1,1), 'p', "Poistu", POISTU, 0), cNappula(cKoord(5,5), 'h', "HAutoja", LISAA, 0), cNappula(cKoord(20,5), 'k', "KAutoja", LISAA, 1), cNappula(cKoord(10,15), 'n', "Nollaa", NOLLAA, 0) }; cLaskuri laskurit[] = { cLaskuri(cKoord(5,10), 0), cLaskuri(cKoord(20,10), 1) }; laske(nappaimet, laskurit); return 0; }