Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движение нескольких объектов 
:(
    Опции темы
DevilHell
Дата 6.5.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Здравтвуйте.
Пишем курвовые. Сейчас у подруги такая проблема. 
Игра "зайцы и волки". по полю движется зайцы и волки. если вол приближается к зайцу то его съедает. А проблема вот в чем. Как организовать движение нескольких зайцев и волков.
В коде движется только один заяц. Как сделать что бы их двигалось несколько? (волков по аналогии сделаем).
Код

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <time.h>
#include <graphics.h>
#include <string.h>

//Є« бб дЁЈга 
class Figure
{
protected:
  int C1,C2,C3;
  int CX;
  int CY;

public:
  Figure(int iCX, int iCY)
  {
    C1 = 7;
    C2 = 1;
    C3 = 12;
    CX = iCX;
    CY = iCY;
  }
/*  void SetNewColor(int NewColor)
  {
    Hide();
    Color=NewColor;
    Show();
  }*/
  virtual void l_Show() = 0;
  virtual void r_Show() = 0;
  virtual void l_Hide()
  {
    int prev_col1 = C1;
    int prev_col2 = C2;
    int prev_col3 = C3;
    C1=getbkcolor();
    C2=getbkcolor();
    C3=getbkcolor();
    l_Show();
    C1 = prev_col1;
    C2 = prev_col2;
    C3 = prev_col3;
  }
  virtual void r_Hide()
  {
    int prev_col1 = C1;
    int prev_col2 = C2;
    int prev_col3 = C3;
    C1=getbkcolor();
    C2=getbkcolor();
    C3=getbkcolor();
    r_Show();
    C1 = prev_col1;
    C2 = prev_col2;
    C3 = prev_col3;
  }
  void Move(/*int iCX,int iCY,*/int DX, int DY)
  {
/*    CX = iCX;
    CY = iCY; */
    if (DX>0)
    r_Show();
       else
    l_Show();
    delay(50);
    if (DX>0)
    r_Hide();
       else
    l_Hide();
    delay(2);
    CX+=DX;
    CY+=DY;
  }
  virtual ~Figure()
  {};
};

//---------------------------------------------------------------------------
//Є« бб § пж
class Zayac: public Figure
{
private:
  int Rad;
public:
  Zayac(int iCX, int iCY, int iRad) :
    Figure(iCX, iCY)
  {
     Rad = iRad;
  }
  void l_Show();
  void r_Show();
};
/*
// Є« бб Їаאַ㣮«м­Ё
class Rectangle: public Figure
{
private:
  int w; // иЁаЁ­
  int h; // ўлб®в 
public:
  Rectangle(int iCX, int iCY, int iw, int ih) :
    Figure(iCX, iCY)
  {
       h = ih;
       w = iw;
  }
  void Show();
};*/

// Є« бб б®®ЎйҐ­Ё
class Message: public Figure
{
private:
  char* String;
public:
  Message(int iCX, int iCY, char* Msg) :
    Figure(iCX, iCY)
  {
     String = new char [strlen(Msg)+1];
     strcpy(String, Msg);
  }
  void l_Show();
  ~Message()
  {
     delete String;
  }
};

// Є« бб
class Volk: public Figure
{
private:
  int Rad;
public:
  Volk(int iCX, int iCY, int iRad)
  : Figure(iCX, iCY)
  {
       Rad = iRad;
  }
  void l_Show();
};

//--------------------------------------------------------------------------
//¬Ґв®¤
void Volk::l_Show()
{
//  int prev_color=getcolor();
//  setcolor(Color);
    setfillstyle(1,8);
    pieslice(CX+Rad*0.35, CY+Rad*0.23,255,270,Rad*0.7);//еў®бв
    pieslice(CX, CY,250,290,Rad);//вг«®ўЁйҐ
    pieslice(CX-Rad*0.5, CY+Rad*0.25,15,40,Rad*0.6);//¦зҐ«обвм
    pieslice(CX-Rad*0.1, CY-Rad*0.35,270,295,Rad*0.25);//¤ «м ге®
    pieslice(CX-Rad*0.6, CY+Rad*0.1,25,0,Rad*0.7);//Ј®«®ў 
    pieslice(CX-Rad*0.03, CY-Rad*0.35,270,293,Rad*0.25);//Ў«Ё¦ ге®
    pieslice(CX-Rad*0.1, CY+Rad*0.38,245,260,Rad*0.65);//ЇҐаҐ¤ « Ї 
    pieslice(CX+Rad*0.1, CY+Rad*0.55,250,290,Rad*0.5);//§ ¤ « Ї 
    setfillstyle(1,1);
    pieslice(CX-Rad*0.2, CY+Rad*0.01,35,0,Rad*0.15);//Ј« §
    setfillstyle(1,16);
    pieslice(CX-Rad*0.6, CY+Rad*0.1,30,0,Rad*0.1);//б
//  setcolor(prev_color);
}

//¬Ґв®¤л § ©ж 
void Zayac::l_Show()
{
  setfillstyle(1,C1);
  fillellipse(CX-Rad*0.1, CY+Rad*1.7, Rad, Rad*0.7); //tulovishe
  fillellipse(CX-Rad*0.6, CY-Rad*0.3, Rad*0.2, Rad*0.6); //lev.uho
  fillellipse(CX-Rad*0.5, CY+Rad*0.8, Rad*0.6, Rad*0.6); // golova
  fillellipse(CX+Rad*0.9, CY+Rad*1.5, Rad*0.2, Rad*0.2); // hvost
  fillellipse(CX-Rad*0.35, CY-Rad*0.3, Rad*0.2, Rad*0.6); //prav.uho
  fillellipse(CX-Rad*0.7, CY+Rad*2.2, Rad*0.4, Rad*0.2); //peredn.lapa
  fillellipse(CX+Rad*0.3, CY+Rad*2.15, Rad*0.5, Rad*0.3); //zadn.lapa
  setfillstyle(1,C2);
  pieslice(CX-Rad*0.7, CY+Rad*0.6,135,220,Rad*0.2); //glaz
  setfillstyle(1,C3);
  pieslice(CX-Rad*0.9, CY+Rad*0.9,135,235,Rad*0.2); //nos
}
//¬Ґв®¤л § ©ж 
void Zayac::r_Show()
{
  setfillstyle(1,C1);
  fillellipse(CX+Rad*0.1, CY+Rad*1.7, Rad, Rad*0.7); //tulovishe
  fillellipse(CX+Rad*0.6, CY-Rad*0.3, Rad*0.2, Rad*0.65); //lev.uho
  fillellipse(CX+Rad*0.5, CY+Rad*0.8, Rad*0.6, Rad*0.6); // golova
  fillellipse(CX-Rad*0.9, CY+Rad*1.5, Rad*0.2, Rad*0.2); // hvost
  fillellipse(CX+Rad*0.35, CY-Rad*0.3, Rad*0.2, Rad*0.65); //prav.uho
  fillellipse(CX+Rad*0.7, CY+Rad*2.2, Rad*0.4, Rad*0.2); //peredn.lapa
  fillellipse(CX-Rad*0.3, CY+Rad*2.15, Rad*0.5, Rad*0.3); //zadn.lapa
  setfillstyle(1,C2);
  pieslice(CX+Rad*0.7, CY+Rad*0.6,0,45,Rad*0.2); //glaz
  pieslice(CX+Rad*0.7, CY+Rad*0.6,320,360,Rad*0.2);
  setfillstyle(1,C3);
  pieslice(CX+Rad*0.9, CY+Rad*0.9,0,45,Rad*0.2); //nos
  pieslice(CX+Rad*0.9, CY+Rad*0.9,305,360,Rad*0.2);
}

/*// ¬ҐвҐ¤л Їаאַ㣮«м 
void Rectangle::l_Show()
{
  int prev_color=getcolor();
  setcolor(Color);
  rectangle(CX, CY, CX+w, CY+h);
  setcolor(prev_color);
} */

// ¬Ґв®¤ б®®ЎйҐ­Ё
void Message::l_Show()
{
  int prev_color=getcolor();
  setcolor(0);
  outtextxy(CX, CY, String);
  setcolor(prev_color);
}

//---------------------------------------------------------------------------
int main()
{
  // Ё «Ё§ жЁп Ја дЁЄЁ
   int gdriver = DETECT, gmode, errorcode;
  initgraph(&gdriver, &gmode,"c:\\work\\tc\\bgi");
  errorcode = graphresult();
  if (errorcode != grOk)
  {
     cerr<<"Graphics error";
     cerr<<grapherrormsg(errorcode);
     exit(1);
  }
  int x, y, zrad=15, delta_x=10, delta_y=10, x1, x2, y1, y2;
  x1=0;
  y1=50;
  x2=getmaxx();
  y2=getmaxy();
  x=(x2-x1)/2;
  y=(y2-y1)/2;
  Figure *F1;
   do
    {
     met:
      srand(time(NULL));
      int m=-1+rand()%3;
      int n=-1+rand()%3;
      int dx=m*delta_x;
      int dy=n*delta_y;
      int k=1+rand()%40;
    for(int j=0;j<k;j++)
      {
        F1=new Zayac(x,y,zrad);
        if((dx==0)&&(dy==0)) goto met;
        if(dx>0)
         {
           if(x+1.1*zrad+dx>=x2)
         dx*=(-1);
         }
        else
          if(x-1.1*zrad+dx<=x1)
            dx*=(-1);
        if(dy>0)
         {
           if(y+1.7*zrad+dy>=y2)
         dy*=(-1);
         }
        else
          if(y-1.7*zrad+dy<=y1)
            dy*=(-1);
        setfillstyle(11,2);
        bar(x1, y1, x2, y2);
//        F1->Move(dx,dy);

          if (dx>0)
        F1->r_Show();
          else
            F1->l_Show();
        delay(250);
          if (dx>0)
        F1->r_Hide();
          else
            F1->l_Hide();
        delay(2);
         x+=dx;
        y+=dy;

     }
   }
  while(!kbhit());
  delete F1;
 closegraph(); // § ЈалвЁҐ Ја дЁзҐбЄ®Ј® ०Ё¬ 

 cout<<"Konez programmi";
// getch();
 return 0;
 }

PM MAIL   Вверх
mes
Дата 6.5.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(DevilHell @  6.5.2009,  21:27 Найти цитируемый пост)
Как сделать что бы их двигалось несколько? 

используйте массив.

просмотрел беглым взглядом и
первое :
Цитата(DevilHell @  6.5.2009,  21:27 Найти цитируемый пост)
  for(int j=0;j<k;j++)
      {
        F1=new Zayac(x,y,zrad);   
       //....
     }


создаете в цикле, и присваиваете одному  и тому же указателю?! а удалять как ?



--------------------
PM MAIL WWW   Вверх
DevilHell
Дата 7.5.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



А как сделать правильно? Учимся на заочке, язык полгода назад первый раз увидели. Поэтему как это можно сделать по другому (правильно) не представлем. И как их сделать несколько?.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.