Новичок
Профиль
Группа: Участник
Сообщений: 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; }
|
|