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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2012, 16:03   #1
Senbonzakyra
Новичок
Джуниор
 
Регистрация: 17.01.2012
Сообщений: 1
По умолчанию Работа с графическими объектами [Visual Studio C++]

Вот собственно небольшая бредовая програмка в которой некоторый графический объект перемещается по нажатию клавиш 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();
};
Senbonzakyra вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсовая работа в Visual Studio superDmitry Visual C++ 0 23.11.2011 19:12
работа с бд в visual studio динарочка Visual C++ 1 02.05.2011 18:36
Управление графическими объектами Fluffy123 Помощь студентам 1 16.11.2010 19:31
С++ в M$ Visual Studio: Работа с файлами mmx358 Visual C++ 4 02.02.2010 21:25
(C#) MS Visual Studio 2008. Как работать с объектами разных окон? cherw9!40k Общие вопросы .NET 12 23.01.2010 16:55