powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Borland c++ 3.1 (проверка массива объектов)
16 сообщений из 16, страница 1 из 1
Borland c++ 3.1 (проверка массива объектов)
    #39242889
Deck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, у меня такой вопрос, у меня есть массив объектов, которые рисуют квадраты, я эти квадраты передвигаю. Есть пустое место, мне надо сделать проверку на пустое место. Примерно: если рядом объект, то ошибка, а если пустое место, то можно передвигать. Нужна помощь с реализацией
Вот сам массив
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Kvad S[15]={
//Kvad (420,410,0,50,M_PI/4),
Kvad (120,110,4,50,M_PI/4),
Kvad (220,110,4,50,M_PI/4),
Kvad (320,110,4,50,M_PI/4),
Kvad (420,110,4,50,M_PI/4),
Kvad (120,210,4,50,M_PI/4),
Kvad (220,210,4,50,M_PI/4),
Kvad (320,210,4,50,M_PI/4),
Kvad (420,210,4,50,M_PI/4),
Kvad (120,310,4,50,M_PI/4),
Kvad (220,310,4,50,M_PI/4),
Kvad (320,310,4,50,M_PI/4),
Kvad (420,310,4,50,M_PI/4),
Kvad (120,410,4,50,M_PI/4),
Kvad (220,410,4,50,M_PI/4),
Kvad (320,410,4,50,M_PI/4),
};
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39242893
Deck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот вся программа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
#include <graphics.h>
#include <iostream.H>
#include <conio.h>
#include <math.h>
#include <dos.h>
#include <stdlib.h>
#include <iomanip.h>
#include <stdio.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 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::Cyf()
{
	int i,l;
	int cell[15][1];
	char buf[16];
	for(i=0;i<15;i++)
	{
sprintf(buf,"%d",cell[i+1][0]);}
outtextxy(X,Y,buf);
}

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);
	setcolor(TempColor);}

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

void Kvad::Move()
{
 do
	{
	 if(kbhit()){
			if (!(key=getch())) key=getch();
			switch (key)
			{
			case UP:
		{
				Hide();
				if(Y<150) break;
				else Y-=100;
				Show();
				break;
		}
			case DOWN:
		{
				Hide();
				if(Y>400)break;
				else     Y+=100;
				Show();
				break;
		}
			case LEFT:
		{
				Hide();
				if(X<150) break;
				else     X-=100;
				Show();
				break;
		}
			case RIGHT:
		{
				Hide();
				if(X>410)	break;
				else     	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 S[15]={
//Kvad (420,410,0,50,M_PI/4),
Kvad (120,110,4,50,M_PI/4),
Kvad (220,110,4,50,M_PI/4),
Kvad (320,110,4,50,M_PI/4),
Kvad (420,110,4,50,M_PI/4),
Kvad (120,210,4,50,M_PI/4),
Kvad (220,210,4,50,M_PI/4),
Kvad (320,210,4,50,M_PI/4),
Kvad (420,210,4,50,M_PI/4),
Kvad (120,310,4,50,M_PI/4),
Kvad (220,310,4,50,M_PI/4),
Kvad (320,310,4,50,M_PI/4),
Kvad (420,310,4,50,M_PI/4),
Kvad (120,410,4,50,M_PI/4),
Kvad (220,410,4,50,M_PI/4),
Kvad (320,410,4,50,M_PI/4),
};



int i,j,k;

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

cout<<"Vvedite pyatnashku:"<<endl;
cin>>j;
{S[j].Move(); getch();}

closegraph();
return(0);
}
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39242956
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать массив игрового поля 4*4. В нем будет хранится номер пятнашки.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
#include <iostream>
#include <cstdio>
using namespace std;

int a [4][4] = { {1, 2, 3, 4},
			{5, 6, 7, 8},
			{9, 10, 11, 12},
			{13, 14, 15, 0},
			};
	
void show()
{
	for(int x=0;x<4;x++)
	{
		for(int y=0;y<4;y++)
		{
			if( a[x][y]) printf("%.2d ", a[x][y]);
			
		}
		
		printf("\n");
	}

}


int main() 
{
	// your code goes here
	show();
	
	
	return 0;
}

Нужно написать вывод игрового поля в графическом виде. Координаты квадратов хранить не обязательно, их можно вычислять зная x, y.

Тогда основной цикл будет такой:
1) Вывести игровое поле.
2) Передвинуть пятнашку (передвигать пятнашки надо в массиве).
3) Стереть поле.
4) Перейти на п.1

.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39242974
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И направления движения указывать не надо. Пятнашка может двигаться только в пустое место.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39243008
Deck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_Sla,

Спасибо большое, но препод требует именно управление клавишами(
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39243374
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deck,

Если ты действительно реализуешь "пятнашки", то тебе достаточно будет завести массив 4*4 и в нем помечать какое поле свободно. Тогда если у тебя нажата кнопка "влево" - ищешь "пустое поле" в массиве 4*4, смотришь какой квадрат соответствует полю справа от пустого и двигаешь его. Все просто и легко.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39243578
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deck,

Borland c++ 3.1 -- выкинь сейчас же эту гадость, это не С++ уже, а некромания какая-то.
То, что там было реализовано, c++-ом уже давно не является, а на самом деле оно и тогда
им не являлось.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39243582
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivDeck,

Borland c++ 3.1 -- выкинь сейчас же эту гадость, это не С++ уже, а некромания какая-то.
То, что там было реализовано, c++-ом уже давно не является, а на самом деле оно и тогда
им не являлось.Ну во первых, не некромантия а некрофилия. А во вторых, это все-же С++, причем оригинальный, который БС описал и над котором Комитет не поиздевался.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39243585
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deck
Код: plaintext
1.
class Line:public Point

Отрезок -- это такая точка? Так не надо наследовать.

Deck
Код: plaintext
1.
class Kvad:public Line

Квадрат -- это такой отрезок? Так не надо наследовать.

Ну и тут уже написали, что Borland C++ 3.1 устарел давным давно. Нет исключений, нет STL. То есть вы сейчас изучаете скорее C with Classes, а не C++. Если хочется современный C++ именно под DOS, то надо брать DJGPP 2.05 (который неожиданно вышел в ноябре 2015, хотя проект давно считался мёртвым). IDE -- RHIDE. Графическая библиотека -- Allegro.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39243606
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
#include <iostream>
#include <cstdio>
#include <map>
#include <cstdlib>

using namespace std;

int a [6][6] = {
    {-1,-1,-1,-1,-1,-1},
    {-1, 1, 2, 3, 4, -1},
    {-1, 5, 6, 7, 8, -1},
    {-1, 9, 10, 11, 12, -1},
    {-1, 13, 14, 15, 0, -1},
    {-1,-1,-1,-1,-1,-1}
};

map<int, pair<int,int> > b;

int zero_x = 4;
int zero_y = 4;

/////////////////////////////////////
void show()
{
    for(int x=1; x<=4; x++)
    {
        for(int y=1; y<=4; y++)
        {
            if( a[x][y]) printf("%.2d ", a[x][y]);
            else printf("   ");
        }

        printf("\n");
    }
}
/////////////////////////////////////
void fill_map()
{
    b[a[zero_x-1][zero_y]]= make_pair(zero_x-1, zero_y);
    b[a[zero_x+1][zero_y]]= make_pair(zero_x+1, zero_y);
    b[a[zero_x][zero_y-1]]= make_pair(zero_x, zero_y-1);
    b[a[zero_x][zero_y+1]]= make_pair(zero_x, zero_y+1);
}
/////////////////////////////////////
void move(int k)
{
    b.clear();
    fill_map();

    if(b.count( k ))
    {
        a[zero_x][zero_y] = k;
        zero_x = b[k].first;
        zero_y = b[k].second;
        a[zero_x][zero_y] = 0;
    }
}
/////////////////////////////////////
int main()
{
    int k = 1;

    while(k)
    {
        show();
        cout<<endl;
        cout << "number (0 - exit) = ";
        cin >> k;
        move(k);
        system("cls");
    }

    return 0;
}
/////////////////////////////////////

...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39244885
Deck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо помощь, но мне нужен именно борланд, потому что показывать преподу на компьютерах кафедры, на которых только борланд. Предмет ООП, поэтому я и сделал эти классы. И ему обязательно, чтобы все было нарисовано
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39245001
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla
Код: plaintext
1.
2.
3.
4.
5.
#include <map>
...
using namespace std;
...
map<int, pair<int,int> > b;

Это в Borland C++ 3.1 точно не скомпилируется :).

m_Sla
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
void show()
{
    for(int x=1; x<=4; x++)
    {
        for(int y=1; y<=4; y++)
        {
            if( a[x][y]) printf("%.2d ", a[x][y]);
            else printf("   ");
        }

        printf("\n");
    }
}
...
int main()
{
    int k = 1;

    while(k)
    {
        show();
        cout<<endl;
        cout << "number (0 - exit) = ";
        cin >> k;
        move(k);
        system("cls");
    }

    return 0;
}

Я бы не стал мешать вывод через stdio и iostreams, хоть так и можно делать.
std::ios_base::sync_with_stdio
By default, iostream objects and cstdio streams are synchronized (as if this function was called with true as argument).
Deckмне нужен именно борланд, потому что показывать преподу на компьютерах кафедры, на которых только борланд.Ясно. Печально. Время в вашем ВУЗе остановилось где-то в начале 90-ых :).

DeckПредмет ООП, поэтому я и сделал эти классы.Тогда уж лучше классы типа board и square.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39245016
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр СедовПечально. Время в вашем ВУЗе остановилось где-то в начале 90-ых :).

Скорее это один из немногих ВУЗ-ов, которые не хотят пиратствовать и потому используют
бесплатный компилятор, но с другой стороны не хотят вдалбливать каждому студенту правила
сборки программ с помощью Makefile и GCC.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39245226
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСкорее это один из немногих ВУЗ-ов, которые не хотят пиратствовать и потому используют бесплатный компилятор,А Borland C++ 3.1 разве бесплатный компилятор?

Dimitry Sibiryakovно с другой стороны не хотят вдалбливать каждому студенту правила сборки программ с помощью Makefile и GCC.Ну тогда устанавливаем Code::Blocks с прикрученным MinGW (инсталлятор codeblocks-16.01mingw-setup.exe), и компилируем программы нажатием ctrl + f9, не заморачиваясь на makefile-ы. В 2016-ом году, изучать C++ на компиляторе без STL -- это как-то отстало.
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39245231
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр СедовА Borland C++ 3.1 разве бесплатный компилятор?
Если его не путать с древней средой под ДОС, то - да. BCC 3.1 это компилятор от билдера,
выпущенный в свободное плаванье.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Borland c++ 3.1 (проверка массива объектов)
    #39245241
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПётр СедовА Borland C++ 3.1 разве бесплатный компилятор?
Если его не путать с древней средой под ДОС, то - да.Так речь как раз про DOS-овский компилятор:
Deck
Код: plaintext
1.
#include <dos.h>
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Borland c++ 3.1 (проверка массива объектов)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]