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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
djvipmax
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 14
#1

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

21.05.2012, 00:26. Просмотров 719. Ответов 2
Метки нет (Все метки)

нужно смоделировать движение шаров по экрану. не могу сделать чтобы шары отталкивались друг от друга, помогите кто сможет.

все что написал
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
что то на подобие функции отталкивания шариков(нарыл в инете), но работает некорректно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 00:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Движение шаров по экрану борланд 3.1 (C++):

Как реализовать движение символа по экрану? ncurses.h - C++
Здравствуйте, друзья! Нужна помощь с ncurses. Подскажите пожалуйста, как реализовать движение символа по экрану? Т.е. как в...

Сортировка в С++Борланд в.6 - C++
Подскажите кто нибудь как написать сортировку, ну чтоб из главного меню можно было поставить сортировать А-Я или Я-А предприятия ...

борланд графика! - C++
написал такую вот специфичную программу... вообщем она позволяет автоматизировать процесс вышивания. пользователь рисует изображение а...

С++ Борланд 3 версия на Вин 7 - C++
если есть у кого нибудь проверенная ссылка на Борланд С++ 3.1 версия на Вин 7, скиньте пожалуйста на этой программе еще работаешь в синим...

Работает ли Борланд C++ 6 с Windows 7 - C++
Извиняюсь за &quot;глупый&quot; вопрос. Несколько лет работал с С++ В6 менялись компы, менялись ОС, но всё время установка С++ получалась не с...

скачать Борланд С++ Билдер - C++
Мне нужен сайт или что-нибудь , где можно будет скачать Борланд С++ Билдер (на виндовс хп 32-х разрядный).

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
21.05.2012, 07:50 #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;
 
}
1
djvipmax
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 14
21.05.2012, 18:47  [ТС] #3
спасибо,но не получается... точнее не устраивает,как еще можно осуществить такое?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 18:47
Привет! Вот еще темы с ответами:

С++ борланд и деректив дэфайн - C++
Помогите, пожалуйста, написать программу, которая строит рамку по заданными пользователем параметрами: 1)местоположение рамки(x,y) ...

Борланд С++ для Windows 7 - C++
НАрод, подскажите плиз, существует ли Борланд С++ для семерки и если да, то где можно ее скачать. Заранее спасибо.

Мишь в графическом режиме в борланд с++ - C++
В http://www.cyberforum.ru/cpp-beginners/thread101467.html обсуждалось использование хвостатой в консольном режиме, но в графическом ее не...

Движение шаров - Delphi
Написал код чтобы двигалось два шара но в двигается только один, помогите сделать чтобы двигалось два шара. Вод код программы. unit...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru