Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2009, 21:09   #1
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию движущиеся графические фигуры

"Если хорошенько раскинуть мозгами, то потом их можно и не собрать... "

Итакс, здравствуйте))

Это случилось! Это - наследование и виртуальные функции!!! В графическом режиме, help me...

В программе необходимо предусматреть следующее:
1. Описание абстрактного класса, включающего виртуальные функции для задания параметров графической фигуры, вывода ее на экран
2. Определение производных классов для каждой графической фигуры, переопределение указанных выше виртуальных функций
3. В главной функции необходимо создать массив указателей на объекты абстрактного класса
4. Создать массивы графических фигур
5. Вызвать переопределенные функции через объекты абстрактного класса


Вот мое творение:
Код:
#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>

  class FiGura
{
protected:
  int x,y,w,h,color;
public:
  FiGura();
 ~FiGura();
  void SetCoord(int x,int y){this->x=x; this->y=y;};
  void SetRazmer(int x,int y){this->w=x; this->h=y;};
  void SetCvet(int color){this->color=color;};
  virtual void ViVod()=0;
};

  FiGura::FiGura()
{
  cout<<"figyra sozdana"<<endl;
}

  FiGura::~FiGura()
{
  closegraph();
  cout<<"figyra udalena"<<endl;
}

  void inic()
{
  int grdriver,gmode,errorcode;
  detectgraph(&grdriver,&gmode);
  initgraph(&grdriver,&gmode,"D:\\BC\\BGI ");
  errorcode=graphresult();
  if (errorcode!=grOk)
    {cout<<"osibka"<<endl;
    exit(1);}
};

  class KvaDrat:public FiGura
{
public:
  virtual void ViVod() 
{setcolor(color);
  rectangle(x,y,x+w,y+w);}
};

  class TreuGol:public FiGura
{
public:
  virtual void ViVod() 
{setcolor(color);
  line(x,y+w,(x+w/2),y);
  line((x+w/2),y,x+w,y+w);
  line(x+w,y+w,x,y+w);}
};

void main()
{int i,j,k;
FiGura*f[10];
TreuGol tr[5];  KvaDrat kv[5];
inic();

for (i=0;i<5;i++){
tr[i].SetCoord(random(300),random(300));
tr[i].SetRazmer(random(100),random(100));
tr[i].SetCvet(random(15)+1);
tr[i].ViVod();
f[i]=&tr[i];
}
for (i=0;i<5;i++){
kv[i].SetCoord(random(300),random(300));
kv[i].SetRazmer(random(100),random(100));
kv[i].SetCvet(random(15)+1);
kv[i].ViVod();
f[i+5]=&kv[i];
}
while(!kbhit())
{
for (i=0;i<3;i++){
 for (j=0;j<10;j++){
   f[j]->SetCvet(random(15)+1);
   f[j]->ViVod();
  }
sleep(1);
 }
 for (k=0;k<10;k++){
 f[k]->SetCvet(BLACK);
 f[k]->ViVod();
 f[k]->SetCoord(random(500),random(500));
 }
 }
getch();
}
Но главная функция немного не та. Необходим компактный набор треугольников одного цвета и квадратов другого цвета, которые произвольно двигаются, изменяя размеры только квадратов и общие цвета.

компактный набор треугольников и квадратов -- это как? всмысле они близко др. к др. находятся?? но как тогда это задать в SetCoord?? и как сделать, чтоб размер меняли только квадраты??
aka_faith вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графические примитивы(паскаль) aslanbek999 Помощь студентам 1 03.06.2009 19:53
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
графические форматы bill Свободное общение 5 14.08.2007 20:19