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

Движение шариков - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
TXLib.h
 Аватар для TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
15.12.2010, 20:07     Движение шариков #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
#include "TXLib.h"
 
void DrawCircle (int x, int y, int r);
void Draw2Circle (int x2, int y2, int r);
void MoveCircle (int x, int y, int v, int dx, int dy, int r, int x2, int y2, int v2, int dx2, int dy2);
 
 
int main()
{
        txCreateWindow (500, 500);
        MoveCircle (200, 300, 10, 1, 1, 20, 150, 450, 15, - 1, - 1);
}
 
void DrawCircle (int x, int y, int r)
{
        txClear ();  
        txSetColor (TX_RED);
        txSetFillColor (TX_BLACK);
        txCircle (x, y, r);
}
 
void Draw2Circle (int x2, int y2, int r)
{
        txClear ();
        txSetColor (TX_GREEN);
        txSetFillColor (TX_BLACK);
        txCircle (x2, y2, r);
}        
 
void MoveCircle (int x, int y, int v, int dx, int dy, int r, int x2, int y2, int v2, int dx2, int dy2)
{
        while (true)
        {
                x += dx*v;
                y += dy*v;
                if (x - r < 0 || x + r > 500)
                {
                        dx = - dx;
                } 
 
                if (y - r < 0 || y + r > 500)
                {
                        dy = - dy;
                }    
               
                DrawCircle (x, y, r);
                txSleep (100);
          }
          {
                 x2 += dx2*v2;
                 y2 += dy2*v2;
                 if (x2 - r < 0 || x2 + r > 500)
                 {
                        dx2 = - dx2;
                 }
                 
                 if (y2 - r < 0 || y2 + r > 500)
                 {
                        dy2 = - dy2;
                 }
                 
                 Draw2Circle (x2, y2, r);
                 txSleep (100);
         }
}
Добавлено через 10 минут
Вот другой вариант. Здесь-то что неправильно?

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
#include "TXLib.h"
 
class Circle
{
public:
       Circle (int x, int y, int v, int dx, int dy, int r);
       void MoveCircle ();
       void DrawCircle ();
private:
        int x;
        int y;
        int v;
        int dx;
        int dy;
        int r;
        
void Circle :: Draw ()
{
        txSetColor (TX_RED);
        txSetFillColor (TX_BLACK);
        txCircle (x, y, r);
}
 
void Circle :: Move ()     
{
         x += dx*v;
         y += dy*v;
         
         if (x - r < 0 || x + r > 500)
         {
               dx = - dx;
         }
         
         if (y - r < 0 || y + r > 500)
         {
               dy = - dy;
         }  
         
         Draw ();
}
 
int main()
{
         txCreateWindow (500, 500);
         Circle A (200, 300, 10, 1, 1, 20);
         Circle B (150, 400, 15, -1, -1, 20);
         while (true)
         {
               txClear ();
               A.Move ();
               B.Move ();
               txSleep (100);
         } 
}           
}
Добавлено через 15 минут

Добавлено через 2 минуты
Правда, 2ю мне написал dihlofos,я чуть-чуть её изменил и не совсем понимаю
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 20:07     Движение шариков
Посмотрите здесь:

движение прямоугольника C++
движение фигуры C++
C++ Движение switch()
C++ Координаты заданного кол-ва шариков изменяются на случайную величину по вертикали и горизонтали.
C++ движение текста
C++ Наследование двух классов от базового. Отрисовка двух шариков, движущихся по синусоиде и косинусоиде
C++ Программная модель движения шариков
Найти минимальное количество шариков, которое необходимо перекрасить, чтобы все шарики были одного цвета C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
16.12.2010, 06:49     Движение шариков #2
Цитата Сообщение от TXLib.h Посмотреть сообщение
я чуть-чуть её изменил
Мда... Зачем-то правда переименовали методы и удивляетесь почему оно не работает В классе описаны методы MoveCircle() и DrawCircle(), а вызываете Draw() и Move(), как так? Используйте уж тогда одинаковые названия.
Зачем-то убрали список инициализаторов конструктора, и кое где скобки и точки с запятой... Ну может быть так будет понятней:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Circle
{
public:
       Circle (int x, int y, int s, int dx, int dy, int r) // конструктор
    {
                 // каждому полю задаётся значение, переданное параметром конструктора
        xCoord = x;
        yCoord = y; 
        speed = s; 
        dirX = dx; 
        dirY = dy; 
        rad = r;
    }
       void Move(); // имена методов должны совпадать!
       void Draw();
private:
        int xCoord;
        int yCoord;
        int speed;
        int dirX;
        int dirY;
        int rad;
}; // точка с запятой и скобка
Насчёт первой проги отписал вам в ЛС (надеюсь вы иногда их читаете).
Yandex
Объявления
16.12.2010, 06:49     Движение шариков
Ответ Создать тему
Опции темы

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