#include #include unsigned WINDOW_HEIGHT = 20; constream AnnoiCon; struct Annoi_move { unsigned from : 4; unsigned to : 4; }; const unsigned MAX_DISKS_NUM = 10; class Annoi_Towers { protected: unsigned disks_num; char towers[3][MAX_DISKS_NUM]; Annoi_move moves[1023]; unsigned move_num; void(*present_move)(unsigned,unsigned,unsigned); public: Annoi_Towers(unsigned,void(*)(unsigned,unsigned,unsigned)); void move_disk(unsigned,unsigned); void creat_1p_tower(unsigned); void move_all_disks(); }; Annoi_Towers::Annoi_Towers(unsigned new_disks_num, void(*new_pm)(unsigned,unsigned,unsigned)) { disks_num=new_disks_num; present_move = new_pm; // The direction is upwards: for(unsigned a=0;agotoxy(tower*2+1,WINDOW_HEIGHT-place); if (new_disk) { (AnnoiCon.rdbuf())->textcolor(new_disk); AnnoiCon << (char)('0'+new_disk); } else AnnoiCon << ' '; } int main() { AnnoiCon.window(1,1,80,25);AnnoiCon.clrscr(); AnnoiCon.window(1,1,8,WINDOW_HEIGHT); Annoi_Towers annoi(9,&AnnoiConMove); annoi.move_all_disks(); getch(); return 0; }