Вот собственно небольшая бредовая програмка в которой некоторый графический объект перемещается по нажатию клавиш wasd, задача в том чтобы при соприкосновении со статическим объектом(в данном случае стеной), программа на это отреагировала. Проблема в том что реализовать проверку на соприкосновение объектов нужно в классе самих этих объектов и я не представляю как нужно это сделать((( Сама программа:
Код:
#include <x_console_emulator.h>
class Figure
{
public: virtual void Draw()=0;
int x,y,x1,y1,r,Width;
COLORREF Color;
bool Fill;
};
class Line: public Figure
{
public: virtual void Draw()
{
pPointsList LineList(new xPointsList);
LineList->Add(x,y);
LineList->Add(x1,y1);
DrawPolyLine(LineList,Color,Width);
};
};
class Rect: public Figure
{
public:
virtual void Draw(){
pPointsList RectList(new xPointsList);
RectList->Add(x,y);
RectList->Add(x1,y1);
DrawRectangle(RectList,Color,Width,Fill);
};
};
class Ellips: public Figure
{
public: virtual void Draw(){
pPointsList EllipsList(new xPointsList);
EllipsList->Add(x-r,y-r);
EllipsList->Add(x+r,y+r);
DrawEllipse(EllipsList,Color,Width,Fill);
};
};
//--------------
class Complex
{
public:
virtual void Draw()=0;
virtual void Crossing()=0;
virtual void SetPos(char)=0;
int Right, Top;
};
class Back: public Complex
{
public:
virtual void Crossing(){};
virtual void SetPos(char){};
virtual void Draw(){
Figure** obj=new Figure*[1];
obj[0]=new Rect();
obj[0]->x=Right;
obj[0]->y=Top+150;
obj[0]->x1=Right+1366;
obj[0]->y1=Top+450;
obj[0]->Color=ColorWhite;
obj[0]->Fill=true;
obj[0]->Width=1;
obj[0]->Draw();
};
};
class Snowman: public Complex
{
public:
virtual void Crossing(){};
virtual void SetPos(char Wasd)
{
switch(Wasd){
case 'w': Top = max(Top-10,0); break;
case 's': Top = min(Top+10,768); break;
case 'a': Right = max(Right-10,0); break;
case 'd': Right = min(Right+10,1366); break;
default: ;
};
};
virtual void Draw()
{
Figure** snowman=new Figure*[5];
//-----
snowman[5]=new Line();
snowman[5]->x=Right+240;
snowman[5]->y=Top+90;
snowman[5]->x1=Right+285;
snowman[5]->y1=Top+140;
snowman[5]->Color=ColorRed;
snowman[5]->Fill=true;
snowman[5]->Width=5;
snowman[5]->Draw();
//----
snowman[1]=new Ellips();
snowman[1]->x=Right+200;
snowman[1]->y=Top+95;
snowman[1]->r=45;
snowman[1]->Color=ColorCyan;
snowman[1]->Fill=true;
snowman[1]->Width=1;
snowman[1]->Draw();
//----
snowman[2]=new Ellips();
snowman[2]->x=Right+200;
snowman[2]->y=Top+50;
snowman[2]->r=30;
snowman[2]->Color=ColorCyan;
snowman[2]->Fill=true;
snowman[2]->Width=1;
snowman[2]->Draw();
//----
snowman[3]=new Line();
snowman[3]->x=Right+120;
snowman[3]->y=Top+180;
snowman[3]->x1=Right+180;
snowman[3]->y1=Top+140;
snowman[3]->Color=ColorRed;
snowman[3]->Fill=true;
snowman[3]->Width=5;
snowman[3]->Draw();
//-----
snowman[4]=new Line();
snowman[4]->x=Right+115;
snowman[4]->y=Top+130;
snowman[4]->x1=Right+155;
snowman[4]->y1=Top+90;
snowman[4]->Color=ColorRed;
snowman[4]->Fill=true;
snowman[4]->Width=5;
snowman[4]->Draw();
//----
snowman[5]=new Line();
snowman[5]->x=Right+220;
snowman[5]->y=Top+140;
snowman[5]->x1=Right+280;
snowman[5]->y1=Top+180;
snowman[5]->Color=ColorRed;
snowman[5]->Fill=true;
snowman[5]->Width=5;
snowman[5]->Draw();
};
};
class Wall: public Complex
{
public: virtual void Crossing() {};
virtual void SetPos(char Wasd) {
switch(Wasd){
case 'y': Top = max(Top-10,0); break;
case 'h': Top = min(Top+10,768); break;
case 'g': Right = max(Right-10,0); break;
case 'j': Right = min(Right+10,1366); break;
default: ;
};};
virtual void Draw()
{
Figure** obj=new Figure*[0];
obj[0]=new Rect();
obj[0]->x=Right-15;
obj[0]->y=Top-200;
obj[0]->x1=Right+101;
obj[0]->y1=Top+685;
obj[0]->Color=ColorCyan;
obj[0]->Fill=true;
obj[0]->Width=1;
obj[0]->Draw();}
};
//-----
int main(void)
{
int Right, Top;
bool a=true;
GetUserAreaSize(&Right,&Top);
int nSymbols=43;
PutS("Welcome to the Summoner's Rift!",RGB(255,0,0));
PutS("");
Complex** ob=new Complex*[2];
ob[0]=new Back();
ob[0]->Right=0;
ob[0]->Top=250;
ob[1]=new Snowman();
ob[1]->Right=100;
ob[1]->Top=100;
ob[2]=new Wall();
ob[2]->Right=10;
ob[2]->Top=250;
char kod;
while(a){
kod=GetChar();
ClearImage();
if (kod=='q') return 0;
ob[0]->Draw();
ob[1]->SetPos(kod);
ob[1]->Draw();
ob[2]->SetPos(kod);
ob[2]->Draw();
if (((ob[1]->Top-50 < ob[2]->Top+685) && (ob[1]->Right+90 < ob[2]->Right+90)) && ((ob[1]->Top+75 > ob[2]->Top-200) && (ob[1]->Right+250 > ob[2]->Right))) // вот здесь у меня реализована эта самая проверка на соприкосновение
{PutS("BOOM"); a=false;}
UpdateScreen();
};
GetChar();
};