Форум программистов, компьютерный форум CyberForum.ru

Движение шаров по экрану борланд 3.1 - C++

Восстановить пароль Регистрация
 
djvipmax
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 14
21.05.2012, 00:26     Движение шаров по экрану борланд 3.1 #1
нужно смоделировать движение шаров по экрану. не могу сделать чтобы шары отталкивались друг от друга, помогите кто сможет.

все что написал
C
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
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<iostream.h>
#include <time.h>
#include<math.h>
#include<graphics.h>
 
class Circle
{
public:
Circle(float x,float y,float s,float dx,float dy, float r)
{
xCoord=x;
yCoord=y;
speed=s;
dirx=dx;
diry=dy;
rad=r;
}
void Move();
void Draw();
friend void impact(Circle&A, Circle&B);
private:
float xCoord;
float yCoord;
float speed;
float dirx;
float diry;
float rad;
};
 
void Circle :: Draw()
{
setcolor(YELLOW);
circle(xCoord,yCoord,rad);
}
 
void Circle :: Move()
{
 
xCoord+=dirx*speed;
yCoord+=diry*speed;
if((yCoord-rad)<=0||(yCoord+rad)>=getmaxy())
{
diry=-diry;
}
if((xCoord-rad)<=0 || (xCoord+rad)>=getmaxx())
{
dirx=-dirx;
}
}
 
void impact(Circle&A,Circle&B)
{
int hist_dist = A.rad+B.rad;
double x_dist = (A.xCoord-B.xCoord)*(A.xCoord-B.xCoord);
double y_dist = (A.yCoord-B.yCoord)*(A.yCoord-B.yCoord);
 
if((sqrt(x_dist + y_dist)) <hist_dist)
{
A.dirx = -A.dirx;
A.diry = -A.diry;
B.dirx = -B.diry;
B.diry = -B.diry;
}
}
 
int main()
{ /* select a driver and mode that supports multiple pages. */
int gdriver = EGA, gmode = EGAHI, errorcode;
int x, y, ht;
 
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");
 
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
Circle A (200,300,2,1,1,35);
Circle B (150,400,3,-1,-1,35);
Circle C (100,250,1,1,1,35);
Circle D (187,300,5,-1,-1,35);
 
do
{
setvisualpage(0);
setactivepage(1);
cleardevice();
A.Draw();
B.Draw();
C.Draw();
D.Draw();
setvisualpage(1);
delay(10);
setactivepage(0);
cleardevice();
A.Move();
B.Move();
C.Move();
D.Move();
A.Draw();
B.Draw();
C.Draw();
D.Draw();
impact(A,B);
impact(A,C);
impact(B,C);
 impact(A,D);
 impact(B,D);
 impact(C,D);
 
}while(!kbhit());
 
getch();
closegraph();
return(0);
}
Добавлено через 8 минут
void impact
что то на подобие функции отталкивания шариков(нарыл в инете), но работает некорректно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 00:26     Движение шаров по экрану борланд 3.1
Посмотрите здесь:

C++ Сортировка в С++Борланд в.6
Борланд С++ для Windows 7 C++
скачать Борланд С++ Билдер C++
борланд графика! C++
С++ борланд и деректив дэфайн C++
C++ С++ Борланд 3 версия на Вин 7
C++ Работает ли Борланд C++ 6 с Windows 7
C++ Как реализовать движение символа по экрану? ncurses.h

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.05.2012, 07:50     Движение шаров по экрану борланд 3.1 #2
djvipmax, попробуйте при столкновении менять направление
движения только у одного шарика
и начальные координаты шаров чуть смените
Даже если шарики будут наползать друг на друга , то
не застрянут как прежде , и выглядит всё естественней

C++
1
2
3
4
5
6
7
8
if((sqrt(x_dist + y_dist)) < hist_dist)
{
//A.dirx = -A.dirx;
//A.diry = -A.diry;
B.dirx = B.diry;
B.diry = -B.dirx;
 
}
djvipmax
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 14
21.05.2012, 18:47  [ТС]     Движение шаров по экрану борланд 3.1 #3
спасибо,но не получается... точнее не устраивает,как еще можно осуществить такое?
Yandex
Объявления
21.05.2012, 18:47     Движение шаров по экрану борланд 3.1
Ответ Создать тему
Опции темы

Текущее время: 04:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru