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

Два шарик - C++

Восстановить пароль Регистрация
 
TXLib.h
 Аватар для TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
15.12.2010, 13:45     Два шарик #1
Подскажите, плз, новичку, где в нижеследующей проге ошибки
[Linker error] undefined reference to `Draw2Circle(int, int, int)'
ld returned 1 exit status :
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
#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);
void Move2Circle (int x2, int y2, int v2, int dx2, int dy2, int r);
 
 
int main()
{
        txCreateWindow (500, 500);
        MoveCircle (200, 300, 10, 1, 1, 20);
        Move2Circle (150, 400, 15, 2, 2, 20);
}
 
void DrawCircle (int x, int y, int r)
{
        txClear ();  
        txSetColor (TX_RED);
        txSetFillColor (TX_BLACK);
        txCircle (x, y, r);
}
 
void Draw2Cirle (int x2, int y2, int r)
{
        txClear ();
        txSetColor (TX_GREEN);
        txCircle (x2, y2, r);
}        
 
void MoveCircle (int x, int y, int v, int dx, int dy, int r)
{
        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);
        }
}
 
void Move2Circle (int x2, int y2, int v2, int dx2, int dy2, int r)
{
        while (true)
        {
                 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);
        }
}
Может быть, надо было объединить циклы в один?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 13:45     Два шарик
Посмотрите здесь:

C++ Шарик, летающий по экрану и ударяющийся об его стенки
C++ Шарик бьется внутри четырехугольника!
подскажите что с кодом не так? (просуммировать два раза по два столбца, функция) C++
Известно, что среди элементов массива два и только два равны между собой. Напечатать их индексы C++
Дан целочисленный двумерный массив. Известно, что среди его элементов два и только два равны между собой. Напечатать их индексы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
15.12.2010, 13:49     Два шарик #2
Ошибка в имени фун-и
C++
1
2
3
4
5
6
7
//void Draw2Circle (int x2, int y2, int r);
void Draw2Cirle (int x2, int y2, int r)
{
        txClear ();
        txSetColor (TX_GREEN);
        txCircle (x2, y2, r);
}
TXLib.h
 Аватар для TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
15.12.2010, 13:50  [ТС]     Два шарик #3
Спасибо большое, компилятор не ругнулся, но почему-то второй шарик не рисуется.
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
15.12.2010, 14:29     Два шарик #4
TXLib.h, так у вас до второго шарика дело никогда и не дойдет. Т.к. в ф-ции MoveCircle бесконечный цикл

Добавлено через 15 минут
Вот что получилось, лови. До идеала конечно далеко, но вроде чё-то рисует
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
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 rad;
    int dirX;
    int dirY;
}; 
///////////////////////////////////////////
void Circle::Draw()
{
    txSetColor (TX_RED);
    txSetFillColor (TX_BLACK);
    txCircle (xCoord, yCoord, rad);
}
///////////////////////////////////////////
void Circle::Move()
{
    xCoord += dirX * speed;
    yCoord += dirY * speed;
    
    if (xCoord - rad < 0 || xCoord + rad > 500)
    {
        dirX = - dirX;
    } 
 
    if (yCoord - rad < 0 || yCoord + rad > 500)
    {
        dirY = - dirY;
    }    
               
    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);
    }
}
TXLib.h
 Аватар для TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
15.12.2010, 19:20  [ТС]     Два шарик #5
Можешь ещё подсказать, что означают class,public и private
Добавлено через 5 минут
Я сам тогда пытался ещё что-то изобразить. Вот что у меня получилось:

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
#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 минут
И что значит ::
Yandex
Объявления
15.12.2010, 19:20     Два шарик
Ответ Создать тему
Опции темы

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