/* Laulajat 08.01.1997 Jorma Sajaniemi - alkuperäinen versio */ #include // curses-kirjasto #include // rand #include // isdigit #include // sleep #ifndef RAND_MAX #define RAND_MAX 2147483647 // Joillakin koneilla tämä on stdlib.h:ssa #endif // ---------- Laulaja ------------------------------------------ enum toiminta {ole, laula}; // Toimintatilat #define NENA1 '!' // Nenän muodot #define NENA2 'X' #define OLE '_' // Suun muodot #define LAULA1 'O' #define LAULA2 'o' #define HYRAILE '=' class Laulaja { /////// private: // Attribuutit: int rivi,sarake; // Sijainti näytöllä float into; // Laulamisen aktiivisuus char suu; // Suun nykyinen asento char nena; // Nenän nykyinen muoto public: // Konstruktori: Laulaja(int r, int s, float tn) : rivi(r), sarake(s), into(tn), nena(NENA1) {} // tai {rivi=r; ... } // Operaatiot: void piirry () { mvprintw(rivi,sarake,"o o"); // Silmät mvprintw(rivi+1,sarake+1,"%c",nena); // Nenä mvprintw(rivi+2,sarake+1,"%c",suu); // Suu move(suu == OLE ? LINES-1 : 0, 0); // Kohdistimen paikka refresh(); } void aseta_suu (enum toiminta teko) { if (teko == ole) suu = OLE; else if (into < (float) rand()/RAND_MAX) suu = HYRAILE; else suu = suu == LAULA1 ? LAULA2 : LAULA1; piirry(); } void ota_neniin() { nena=NENA2; piirry(); } }; // ---------- Pääohjelma --------------------------------------- main () { Laulaja matti = Laulaja(10,20,0.5); Laulaja teppo = Laulaja(10,40,0.8); Laulaja *tapani = NULL; char c; int i; // Alusta curses: initscr(); cbreak(); noecho(); // Matti ja Teppo näytölle: matti.aseta_suu(ole); teppo.aseta_suu(ole); // Komentosilmukka: while ((c=getch()) != 'q') { // q: lopeta if (isdigit(c)) { // numero: laula for (i = c-'0'; i; i--) { matti.aseta_suu(laula); teppo.aseta_suu(laula); if (tapani) tapani->aseta_suu(laula); sleep(1); } matti.aseta_suu(ole); teppo.aseta_suu(ole); if (tapani) tapani->aseta_suu(ole); } else if (c == 't' && tapani == NULL) { // t: Tapani mukaan tapani = new Laulaja(5,30,1.0); tapani->aseta_suu(ole); } else if (c == 'n') { // n: Matille neniin matti.ota_neniin(); } } if (tapani) delete tapani; move(LINES-1,0); refresh(); endwin(); // Lopeta curses return 0; /* Ohjelman kääntäminen: gcc -o laulajat laulajat.cc -lcurses tai (ympäristöstä riippuen) gcc -o laulajat laulajat.cc -lcurses -ltermcap */ }