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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2016, 20:07   #1
artes46
 
Регистрация: 17.12.2015
Сообщений: 8
По умолчанию Пятнашки(взаимное передвижение фигурок) borland c++

Написал частично программу на borland c++ 3.1 которая рисует поле для пятнашек. Создал пустое место, которое будет двигаться и меняться местами с другим квадратом. Проблема в том, что я не знаю как сделать так, чтобы пятнашки менялись местами с пустой пятнашкой.(Цифры на фигурках ещё не расставил) Вот код, может кто то доделает и сможет мне помочь
Код:
#include <graphics.h>
#include <iostream.H>
#include <conio.h>
#include <math.h>
#include <dos.h>
#include <stdlib.h>
#include <iomanip.h>
enum keys {UP = 72, DOWN = 80, LEFT=75, RIGHT=77, ESC=27};
int key=0;

class Point
{
protected:
	int X;
	int Y;
	int Color;
public:
	Point(int, int, int);
	int GetX();
	int GetY();
	int GetC();
	void PutX(int);
	void PutY(int);
	void PutC(int);
	void Show();
	void Hide();
	void Move(int, int);
};

class Line:public Point
{
protected:
	double Len;
	double Fi;
public:
	Line(int, int, int, double, double);
	double GetL();
	double GetF();
	void PutL(double);
	void PutF(double);
	void Show();
	void Hide();
	void Expand(int);
	void Move(int, int);
};

class Kvad:public Line
{
public:
	Kvad(int, int, int, double, double);
	double GetS();
	void Show();
	void Hide();
	void Fill();
	void Move();
};

Point::Point(int X, int Y, int Color){
	this->X = X;
	this->Y = Y;
	this->Color = Color;}
void Point::PutX(int X) { this->X = X; }
void Point::PutY(int Y) { this->Y = Y; }
void Point::PutC(int Color) { this->Color = Color; }
int Point::GetX() { return (X); }
int Point::GetY() { return (Y); }
int Point::GetC() { return (Color); }
void Point::Show() { putpixel(X, Y, Color); }
void Point::Hide() { putpixel(X, Y, getbkcolor()); }

void Point::Move(int X, int Y){
	Hide();
	PutX(X);
	PutY(Y);
	Show();}

Line::Line(int X, int Y, int Color, double Len, double Fi):
    Point(X,Y,Color)
       {this->Len = Len;
	this->Fi = Fi;}
void Line::PutL(double Len) { this->Len = Len; }

void Line::PutF(double Fi) { this->Fi = Fi; }

double Line::GetL() { return (Len); }

double Line::GetF() { return (Fi); }

void Line::Show(){
	int X1 = X + (int)floor(Len/2*sin(Fi));
	int Y1 = Y - (int)floor(Len/2*cos(Fi));
	int X2 = X + (int)floor(Len/2*sin(Fi +M_PI));
	int Y2 = Y - (int)floor(Len/2*cos(Fi +M_PI));
	int TempColor;
	TempColor=getcolor();
	setcolor(Color);
	line(X1,Y1,X2,Y2);
	setcolor(TempColor);}

void Line::Hide(){
	int TempColor;
	TempColor=GetC();
	PutC(getbkcolor());
	Show();
	PutC(TempColor);}

void Line::Expand(int DR){
	Hide();
	if (GetL() >= -DR) PutL(Len + DR);
	Show();}

void Line::Move(int X, int Y){
	Hide();
	PutX(X);
	PutY(Y);
	Show();}

Kvad::Kvad(int X, int Y, int Color, double Len, double Fi):
	Line(X,Y,Color,Len,Fi)  {}

double Kvad::GetS() { return (Len*Len); }

void Kvad::Show(){
	int X1 = X + (int)floor(1.42*Len*sin(Fi));
	int Y1 = Y - (int)floor(1.42*Len*cos(Fi));
	int X2 = X + (int)floor(1.42*Len*sin(Fi+1.5*M_PI));
	int Y2 = Y - (int)floor(1.42*Len*cos(Fi+1.5*M_PI));
	int X3 = X + (int)floor(1.42*Len*sin(Fi +M_PI));
	int Y3 = Y - (int)floor(1.42*Len*cos(Fi +M_PI));
	int X4 = X + (int)floor(1.42*Len*sin(Fi+0.5*M_PI));
	int Y4 = Y - (int)floor(1.42*Len*cos(Fi+0.5*M_PI));
	int TempColor;
	TempColor=getcolor();
	setcolor(Color);
	line(X1,Y1,X2,Y2);
	line(X2,Y2,X3,Y3);
	line(X3,Y3,X4,Y4);
	line(X4,Y4,X1,Y1);
	outtextxy(X,Y,"1");
	floodfill(X,Y,Color);
	setfillstyle(1,Color);
	setcolor(TempColor);}

void Kvad::Hide(){
	int TempColor;
	TempColor=GetC();
	PutC(getbkcolor());
	Show();
	PutC(TempColor);}

void Kvad::Move(){
    int ny=Y+100;
    int temp;
	do
    {
	if (kbhit()){
	    if (!(key=getch())) key=getch();
	    switch (key)
	    {
	    case UP:
		{
		    Hide();
		    //if(Y==ny)
		    //ny=temp;
		    //temp=Y;
		    Y-=100;
		    Show();
		    break;
		}
	    case DOWN:
		{
		    Hide();
		    Y+=100;
		    Show();
		    break;
		}
	    case LEFT:
		{
		    Hide();
		    X-=100;
		    Show();
		    break;
		}
	    case RIGHT:
		{
		    Hide();
		    X+=100;
		    Show();
		    break;
		}
	    }
	}
    } while (key!=ESC);}

int main()
{
	int gdriver = DETECT, gmode, errorcode;
	initgraph(&gdriver, &gmode, "C:\\TC\\BGI");
	errorcode = graphresult();
	if (errorcode != grOk)
	{cout<<"error graphics: "<<grapherrormsg(errorcode)<<endl;
	cout<<"num keys:"<<endl;
	getch(); return(1); }
	setcolor(getmaxcolor());
/*
Kvad S1(120,110,1,50,M_PI/4);
Kvad S2(220,110,2,50,M_PI/4);
Kvad S3(320,110,3,50,M_PI/4);
Kvad S4(420,110,4,50,M_PI/4);
Kvad S5(120,210,5,50,M_PI/4);
Kvad S6(220,210,6,50,M_PI/4);
Kvad S7(320,210,7,50,M_PI/4);
Kvad S8(420,210,8,50,M_PI/4);
Kvad S9(120,310,9,50,M_PI/4);
Kvad S10(220,310,10,50,M_PI/4);
Kvad S11(320,310,11,50,M_PI/4);
Kvad S12(420,310,12,50,M_PI/4);
Kvad S13(120,410,13,50,M_PI/4);
Kvad S14(220,410,14,50,M_PI/4);
Kvad S15(320,410,15,50,M_PI/4);
Kvad S0(420,410,0,50,M_PI/4);

S1.Show(); getch();
S2.Show(); getch();
S3.Show(); getch();
S4.Show(); getch();
S5.Show(); getch();
S6.Show(); getch();
S7.Show(); getch();
S8.Show(); getch();
S9.Show(); getch();
S10.Show(); getch();
S11.Show(); getch();
S12.Show(); getch();
S13.Show(); getch();
S14.Show(); getch();
S15.Show(); getch();
S0.Show(); getch();

S0.Move();getch();
  */
Kvad S[4][4]={
Kvad (120,110,1,50,M_PI/4),
Kvad (220,110,2,50,M_PI/4),
Kvad (320,110,3,50,M_PI/4),
Kvad (420,110,4,50,M_PI/4),
Kvad (120,210,5,50,M_PI/4),
Kvad (220,210,6,50,M_PI/4),
Kvad (320,210,7,50,M_PI/4),
Kvad (420,210,8,50,M_PI/4),
Kvad (120,310,9,50,M_PI/4),
Kvad (220,310,10,50,M_PI/4),
Kvad (320,310,11,50,M_PI/4),
Kvad (420,310,12,50,M_PI/4),
Kvad (120,410,13,50,M_PI/4),
Kvad (220,410,14,50,M_PI/4),
Kvad (320,410,15,50,M_PI/4),
Kvad (420,410,0,50,M_PI/4)
};

int i,j;

for(j=0;j<4;j++){
for(i=0;i<4;i++){
S[i][j].Show(); getch();
}}

/*for(j=0;j<4;j++){
for(i=0;i<4;i++){
S[i][j].Move(); getch();
}}*/
S[3][3].Move(); getch();
closegraph();
return(0);
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 21.05.2016 в 20:59.
artes46 вне форума Ответить с цитированием
Старый 21.05.2016, 20:46   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Исходники Пятнашек на Borland C++
8Observer8 вне форума Ответить с цитированием
Старый 21.05.2016, 20:56   #3
artes46
 
Регистрация: 17.12.2015
Сообщений: 8
По умолчанию

ну так у меня то не билдер, я наверное не уточнил, это на борланд с++ 3.1
artes46 вне форума Ответить с цитированием
Старый 21.05.2016, 21:06   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Я когда-то начинал с Builder C++ от фирмы Borland. Подумал, что это тоже самое
8Observer8 вне форума Ответить с цитированием
Старый 21.05.2016, 21:08   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от artes46 Посмотреть сообщение
ну так у меня то не билдер, я наверное не уточнил, это на борланд с++ 3.1
Да, без разницы. Ты строку покажи, которая ошибку выбивает. И на что компиль ругается. Блин, ну в конце-то концов. Когда научитесь правильно вопросы задавать?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.05.2016, 21:52   #6
artes46
 
Регистрация: 17.12.2015
Сообщений: 8
По умолчанию

Согласен, вопрос не поставлен толком( Компиль не ругается. Надо просто, чтобы если во время перемещения пустой клетки, та клетка, на которую он становится менялась местами с пустой клеткой. Ну, как то так
artes46 вне форума Ответить с цитированием
Старый 21.05.2016, 21:58   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от artes46 Посмотреть сообщение
Ну, как то так
Как-то не так. Блин, у тебя реально в голове тараканы? Или всё-же сможешь конкретизировать участок кода и где в нём запара? Или мне - выматериться?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.05.2016, 22:03   #8
artes46
 
Регистрация: 17.12.2015
Сообщений: 8
По умолчанию

нет ещё этого участка, сделать его надо. Я не знаю как сделать то, что написал.
artes46 вне форума Ответить с цитированием
Старый 21.05.2016, 22:05   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Сколько платишь? Халявка, дело хорошие, но не в данном случае.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 22.05.2016, 11:38   #10
artes46
 
Регистрация: 17.12.2015
Сообщений: 8
По умолчанию

ага, а больше ничего? сам как нить справлюсь. Борзый ты какой то прохрамист
artes46 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7 Взаимное прилипание\отлипание форм в одном проекте Dj_SheLL Помощь студентам 13 06.07.2015 17:52
Найти взаимное расположение окружности радиуса R с центром в точке (x0, y0) и точки А с координатами (x1, y1). Dimazde Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2013 08:58
Решение уравнений и рисование фигурок msmu Помощь студентам 2 15.06.2010 09:07
Ответ: SOS!! Определить взаимное расположение точки Nevis Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2009 13:34
Взаимное расположение окружностей изобразить StakanpORTvejna Общие вопросы Delphi 6 21.05.2009 21:35