|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
28.05.2012, 10:34 | #1 (permalink) |
Member
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите доделать программу на C++, пожалуйста!
Суть задания: 1. Сначала разработать программу графической заставки, в процессе выполнения которой по графическому окну случайным образом перемещаются точки, окружности и прямоугольники.Реализовать перемещение графических объектов по прямым траекториям с разными случайными векторами скоростей. При выполнении программы на экране по прямым траекториям с разными случайными векторами скоростей должны перемещаться графические объекты, при этом векторы скоростей иногда случайным образом должны меняться. Обеспечить возможность добавления очередного объекта и удаления последнего добавленного объекта в ходе выполнения программы. 2. А дальше идет вот такое задание: Пусть «ведущий» объект будет окружностью с радиусом, равным 2, и с цветом с кодом 10, то есть ярко-зеленый. Указатель на этот объект может быть obj[0], тогда оставшиеся объекты (со 1-го по (N-1)-й) будут «ведомыми». Поэтому «ведущий» объект должен создаваться сначала, а потом создание остальных объектов можно делать в цикле от 1 до N-1. Также надо сделать так, чтобы «ведущий» объект нельзя было удалить, и чтобы значение N всегда было не меньше 1. Перемещение «ведущего» объекта остается без изменений, а перемеще-ние «ведомых» объектов для начала можно сделать следующим образом. Перед вызовом obj[i]->MoveXY при i>0 надо изменять значения obj[i]->vx и obj[i]->vy так, чтобы вектор скорости был направлен к «ведущему» объекту. Например, obj[i]->vx можно установить равным 10-й части разности между координатой x «ведущего» объекта и координатой x объекта obj[i] (аналогично для obj[i]->vy). После этого «ведомые» объекты будут следовать за «ведущим», но не будет требуемой случайности и «распределенности». Для привнесения элемента случайности в перемещения «ведомых» объ-ектов надо к значениям obj[i]->vx и obj[i]->vy прибавлять небольшие случай-ные значения, например, rand()%7-3. Для обеспечения «распределенности» надо, чтобы при вычислении obj[i]->vx и obj[i]->vy выполнялось деление не на фиксированное число (например, на 10), а на некоторое значение, свойственное объекту obj[i], то есть каждый «ведомый» объект будет приближаться на свое расстояние к «ведущему» объекту. Для этого в объект TPoint надо добавить дополнительную переменную, затем подобно переменным vx, vy эту переменную надо инициализировать в конструкторе, а также менять ее значение в случайные моменты времени. При этом значение указанной переменной рекомендуется выбирать случайным образом в диапазоне от 5 до 50. В общем, пункт 1 задания выполнен, усе работает, как говорится. По второму заданию реализовала только первый абзац (глупая моя голова(((). Хелп, ребята. Тут наверняка найдутся добрые люди, для которых доработать программу, да еще с таким подробным заданием, не составит труда. Заранее всем спасибо! Вот код: #include <stdlib.h> #include <time.h> #include <grx20.h> #include <grxkeys.h> #include <stdio.h> #include <math.h> struct TPoint{ int x,y,vx,vy; int color; TPoint(int ix,int iy,int icolor); virtual ~TPoint(); virtual void Draw(int icolor); void Show(); void Hide(); void MoveXY(int ix, int iy); }; struct TBox: public TPoint{ int w,h; TBox(int ix,int iy,int icolor,int iw,int ih); virtual ~TBox(); virtual void Draw(int icolor); }; struct TCircle: public TPoint{ int r; TCircle(int ix,int iy,int icolor,int ir); virtual ~TCircle(); virtual void Draw(int icolor); }; TPoint::TPoint(int ix,int iy,int icolor) { x=ix; y=iy; color=icolor; vx=rand()%17-8; vy=rand()%17-8; } TPoint::~TPoint() { Hide(); } void TPoint :: Draw(int icolor) { GrPlot(x,y,icolor); GrPlot(x,y+1,icolor); GrPlot(x+1,y,icolor); GrPlot(x+1,y+1,icolor); } void TPoint::Show() { Draw(color); } void TPoint::Hide() { Draw(0); } void TPoint::MoveXY(int ix,int iy) { Hide(); if((rand()%100)==50) { vx=rand()%17-8; vy=rand()%17-8; } if(ix>GrMaxX()) { ix=ix-GrMaxX()-1; } if(ix<0) { ix=ix+GrMaxX()+1; } if(iy>GrMaxY()) { iy=iy-GrMaxY()-1; } if(iy<0) { iy=iy+GrMaxY()+1; } x=ix; y=iy; Show(); } TBox::TBox(int ix,int iy,int icolor,int iw,int ih): TPoint(ix,iy,icolor) { w=iw; h=ih; } TBox::~TBox() { Hide(); } void TBox:: Draw(int icolor) { GrBox(x-w/2,y-h/2,x+(w-w/2),y+(h-h/2),icolor); } TCircle::TCircle(int ix,int iy,int icolor,int ir): TPoint(ix,iy,icolor) { r=ir; } TCircle::~TCircle() { Hide(); } void TCircle :: Draw(int icolor) { GrCircle(x,y,r,icolor); } #define M 10000 main() {int N=10; TPoint *obj[M]; GrSetMode(GR_width_height_graphics,1024,768); srand(time(0)); int i; int count; i=0; obj[i]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),10 ,2); for(i=1;i<N;i++){ count=rand()%3; switch(count) {case 1: obj[i]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,ra nd()%10,rand()%10);break; case 2: obj[i]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break; default: obj[i]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;}; obj[i]->Show(); } GrKeyType key; int s; do{ while (!GrKeyPressed()){ GrSleep(30); for(i=0;i<N;i++){ s=rand()%100; if (s=50) { obj[i]->MoveXY(obj[i]->x+obj[i]->vx,obj[i]->y+obj[i]->vy);;} } } ; key=GrKeyRead(); switch(key){ case GrKey_Insert: if (N<M){ for(i=0;i<N;i++){ count=rand()%3; switch(count) {case 1: obj[N]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,ra nd()%10,rand()%10);break; case 2: obj[N]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break; default: obj[N]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;}; obj[i]->Show(); } N++; } break; case GrKey_Delete: if (N>1){ delete obj[N-1]; N--; } break; } }while(key!=GrKey_Escape); for(i=0;i<N;i++){ delete obj[i]; } } |
28.05.2012, 10:34 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Первым делом нужно ознакомиться с аналогичными топиками Помогите пожалуйста написать программу в С++ Помогите, пожалуйста, доделать программу на Си Помогите, пожалуйста, дописать программу Помогите, пожалуйста, написать программу на C++ |
28.05.2012, 18:10 | #2 (permalink) |
Member
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Кой-чего сама доделала, а именно вот этот пункт:
Перемещение «ведущего» объекта остается без изменений, а перемеще-ние «ведомых» объектов для начала можно сделать следующим образом. Перед вызовом obj[i]->MoveXY при i>0 надо изменять значения obj[i]->vx и obj[i]->vy так, чтобы вектор скорости был направлен к «ведущему» объекту. Например, obj[i]->vx можно установить равным 10-й части разности между координатой x «ведущего» объекта и координатой x объекта obj[i] (аналогично для obj[i]->vy). После этого «ведомые» объекты будут следовать за «ведущим», но не будет требуемой случайности и «распределенности». Для привнесения элемента случайности в перемещения «ведомых» объ-ектов надо к значениям obj[i]->vx и obj[i]->vy прибавлять небольшие случай-ные значения, например, rand()%7-3. Посему выкладываю заново код. Но вот распределенность не могу реализовать. Отзовитесь, прошу! Тут капельку осталось! #include <stdlib.h> #include <time.h> #include <grx20.h> #include <grxkeys.h> #include <stdio.h> #include <math.h> struct TPoint{ int x,y,vx,vy; int color; TPoint(int ix,int iy,int icolor); virtual ~TPoint(); virtual void Draw(int icolor); void Show(); void Hide(); void MoveXY(int ix, int iy); }; struct TBox: public TPoint{ int w,h; TBox(int ix,int iy,int icolor,int iw,int ih); virtual ~TBox(); virtual void Draw(int icolor); }; struct TCircle: public TPoint{ int r; TCircle(int ix,int iy,int icolor,int ir); virtual ~TCircle(); virtual void Draw(int icolor); }; TPoint::TPoint(int ix,int iy,int icolor) { x=ix; y=iy; color=icolor; vx=rand()%17-8; vy=rand()%17-8; } TPoint::~TPoint() { Hide(); } void TPoint:Draw(int icolor) { GrPlot(x,y,icolor); GrPlot(x,y+1,icolor); GrPlot(x+1,y,icolor); GrPlot(x+1,y+1,icolor); } void TPoint::Show() { Draw(color); } void TPoint::Hide() { Draw(0); } void TPoint::MoveXY(int ix,int iy) { Hide(); if((rand()%100)==50) { vx=rand()%17-8; vy=rand()%17-8; } if(ix>GrMaxX()) { ix=ix-GrMaxX()-1; } if(ix<0) { ix=ix+GrMaxX()+1; } if(iy>GrMaxY()) { iy=iy-GrMaxY()-1; } if(iy<0) { iy=iy+GrMaxY()+1; } x=ix; y=iy; Show(); } TBox::TBox(int ix,int iy,int icolor,int iw,int ih): TPoint(ix,iy,icolor) { w=iw; h=ih; } TBox::~TBox() { Hide(); } void TBox:Draw(int icolor) { GrBox(x-w/2,y-h/2,x+(w-w/2),y+(h-h/2),icolor); } TCircle::TCircle(int ix,int iy,int icolor,int ir): TPoint(ix,iy,icolor) { r=ir; } TCircle::~TCircle() { Hide(); } void TCircle:Draw(int icolor) { GrCircle(x,y,r,icolor); } #define M 10000 main() {int N=10; TPoint *obj[M]; GrSetMode(GR_width_height_graphics,1024,768); srand(time(0)); int i; int count; i=0; obj[i]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),10 ,2); for(i=1;i<N;i++){ count=rand()%3; switch(count) {case 1: obj[i]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,ra nd()%10,rand()%10);break; case 2: obj[i]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break; default: obj[i]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;}; obj[i]->Show(); } GrKeyType key; int s; do{ while (!GrKeyPressed()){ GrSleep(30); for(i=0;i<N;i++){ s=rand()%100; if (s=50) { obj[i]->MoveXY(obj[i]->x+obj[i]->vx,obj[i]->y+obj[i]->vy);;} } for (i=1;i<N;i++){ obj[i]->vx=((obj[0]->x-obj[i]->x)/10+rand()%7-3); obj[i]->vy=((obj[0]->y-obj[i]->y)/10+rand()%7-3);} } ; key=GrKeyRead(); switch(key){ case GrKey_Insert: if (N<M){ for(i=0;i<N;i++){ count=rand()%3; switch(count) {case 1: obj[N]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,ra nd()%10,rand()%10);break; case 2: obj[N]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break; default: obj[N]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;}; obj[i]->Show(); } N++; } break; case GrKey_Delete: if (N>1){ delete obj[N-1]; N--; } break; } }while(key!=GrKey_Escape); for(i=0;i<N;i++){ delete obj[i]; } } |
30.05.2012, 12:36 | #5 (permalink) |
Member
Регистрация: 03.01.2012
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
УФФ, я все-таки ее дописала, вопрос снят
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
07.05.2014, 11:05 | #7 (permalink) |
Новичок
Регистрация: 07.05.2014
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Здравствуйте! А мог бы кто-нибудь переделать эту программу таким образом, чтобы:
1) добавился графический объект спираль; 2) Графические объекты имеют случайные размеры и перемещаются по прямым линиям со случайными скоростями, при этом направление и скорость перемещения каждого объекта время от времени меняется случайным образом. Кроме того, каждая спираль в ходе своего перемещения плавно изменяет количество витков от минимального к максимальному и обратно, то есть постепенно закручивается, а потом постепенно раскручивается. При этом для каждой спирали скорость изменения количества витков время от времени меняется случайным образом. 3) Любой объект при выходе за пределы экрана появляется с противоположной стороны. Или хотя бы расскажите как реализовать требования к объекту спирали... Пожалуйста отзовитесь! |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|