"Иерархия классов графики на С++"
Страницы: 1
Пользователь: kate&lena Сообщений: 6 Статус: Пользователь Зарегистрирован: 6 февраля 2009, 23:15 Был:17 февраля 2009, 0:35 | Дата: 16 февраля 2009, 23:44 Сообщение № 1 |
Необходимо написать класс для работы с графикой. Создать иерархию классов, описывающие точку, линию, прямоугольник, окружность, полином и функцию для перемещения фигур (с помощью клавиш "влево", "вправо" и т.д.). В итоге должна получиться перемещающаяся фигура - ЛАЙНЕР. |
Пользователь: kate&lena Сообщений: 6 Статус: Пользователь Зарегистрирован: 6 февраля 2009, 23:15 Был:17 февраля 2009, 0:35 | Дата: 16 февраля 2009, 23:46 Сообщение № 2 |
Код на С++ #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <iostream.h> //------------------------POINT------------------------------------------- class Point{ protected: int x, y; public: Point(); virtual void show(); virtual void hide(); virtual void move(int x, int y); }; Point::Point() { x = getmaxx()/2; y = getmaxy()/2; } void Point::show() { putpixel( x, y, WHITE); putpixel( x+1, y, WHITE); putpixel( x, y+1, WHITE); putpixel( x+1, y+1, WHITE); } void Point::hide() { putpixel( x, y, BLACK); putpixel( x+1, y, BLACK); putpixel( x, y+1, BLACK); putpixel( x+1, y+1, BLACK); } void Point::move(int x, int y) { hide(); this-> x += x; this-> y += y; show(); } //-------------------------LINIA------------------------------------------ class Linia:virtual public Point { protected: int dx, dy; public: void show(); void hide(); }; void Linia::show() { setcolor(WHITE); line( x, y, x+30, y+30); } void Linia::hide() { setcolor(BLACK); line( x, y, x+30, y+30); } //------------------------ARC--------------------------------------------- class Korpus:virtual public Linia { public: void show(); void hide(); }; void Korpus::show() { setcolor(WHITE); moveto(x,y); lineto(x,y-20); lineto(x+100,y-20); lineto(x+110,y-30); lineto(x+170,y-30); lineto(x+140,y); lineto(x,y); moveto(x+40,y-20); lineto(x+40,y-30); lineto(x+40,y-40); lineto(x+130,y-40); lineto(x+130,y-30); setcolor(DARKGRAY); line(x+100,y-50,x+100,y-100); setcolor(DARKGRAY); moveto(x+170,y-30); lineto(x+100,y-100); lineto(x,y-20); } void Korpus::hide() { setcolor(BLACK); moveto(x,y); lineto(x,y-20); lineto(x+100,y-20); lineto(x+110,y-30); lineto(x+170,y-30); lineto(x+140,y); lineto(x,y); moveto(x+40,y-20); lineto(x+40,y-30); lineto(x+40,y-40); lineto(x+130,y-40); lineto(x+130,y-30); line(x+100,y-50,x+100,y-100); moveto(x+170,y-30); lineto(x+100,y-100); lineto(x,y-20); } //-------------------------CIRCLE------------------------------------------ class Circle:virtual public Linia { public: void show(); void hide(); }; void Circle::show() { setfillstyle(SOLID_FILL,YELLOW); setcolor(YELLOW) ; pieslice(x+120,y-20,0,360,5); pieslice(x+140,y-20,0,360,5); circle(x+120,y-20,5); circle(x+140,y-20,5); } void Circle::hide() { setfillstyle(SOLID_FILL, BLACK); setcolor(BLACK); pieslice(x+120,y-20,0,360,5); pieslice(x+140,y-20,0,360,5); circle(x+120,y-20,5); circle(x+140,y-20,5); } //------------------------RECTANGLE-------------------------------------- class Rectangle:virtual public Linia { public: void show(); void hide(); }; void Rectangle::show() { setcolor(WHITE); rectangle(x+80,y-40,x+110,y-50); rectangle(x+70,y-40,x+80,y-70); } void Rectangle::hide() { setcolor(BLACK); rectangle(x+80,y-40,x+110,y-50); rectangle(x+70,y-40,x+80,y-70); } //--------------------------TITANIC------------------------------------------- class Titanic:virtual public Korpus,Circle,Rectangle { public: void show(); void hide(); }; void Titanic::show() { Korpus::show(); Circle::show(); Rectangle::show(); } void Titanic::hide() { Korpus::hide(); Circle::hide(); Rectangle::hide(); } void move_object(Point *p) { char c; setbkcolor(BLACK); clrscr(); cleardevice(); p->move(0,0); cout <<"-ESC- to exit"; while(c!=27) { c = getch(); switch(c) { case 75: p->move(-5,0); break; case 72: p->move(0,-5); break; case 77: p->move(5,0); break; case 80: p->move(0,5); break; default: break; } } } void menu() { int c; while(c!=7) { printf("MENU:\n"); cout << " -1- TOCHKA" << endl; cout << " -2- LINIA" << endl; cout << " -3- TRUBI" << endl; cout << " -4- ILLIUMINATORI" << endl; cout << " -5- KORPUS" << endl; cout << " -6- KORABLI" << endl; cout << " -7- EXIT" << endl<<endl; cout << "-->"; cin >> c; switch(c) { case 1: Point p; move_object(&p); break; case 2: Linia l; move_object(&l); break; case 3: Rectangle r; move_object(&r); break; case 4: Circle c; move_object(&c); break; case 5: Korpus k; move_object(&k); break; case 6: Titanic t; move_object(&t); break; default: break; } clrscr(); cleardevice(); } } void main() { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "C:\\BC\\BGI"); //здесь укажите свой путь к BGI errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } menu(); closegraph(); } |
Пользователь: arhangel01 Сообщений: 1 Статус: Незримый Зарегистрирован: 16 февраля 2009, 22:07 Был:25 февраля 2009, 6:30 | Дата: 25 февраля 2009, 0:59 Сообщение № 3 |
Я че-то не понял, в Си есть просто графический режим? |
Пользователь: flieng Сообщений: 3 Статус: Незримый Зарегистрирован: 3 марта 2009, 3:33 Был:4 октября 2010, 5:28 | Дата: 3 марта 2009, 3:36 Сообщение № 4 |
)) да ... а меня эта реализация проперла)) .. спс за пример) |
Пользователь: critic Сообщений: 2 Статус: Незримый Зарегистрирован: 12 марта 2009, 20:52 Был:12 марта 2009, 20:59 | Дата: 12 марта 2009, 20:55 Сообщение № 5 |
С Вистой только будут проблемы - DOSBox придется ставить |
Страницы: 1