Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 27.11.2010
Сообщений: 34

Рандомный выбор пути

07.04.2011, 10:49. Показов 1313. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пишу игру в которой объекты при движении отскакивают от стенок и летят дальше. Подскажите как сделать чтобы каждый раз при старте, для объектов изначально выбиралось рандомное направление движения (Использую TCanvas).

Вот алгоритм полета:

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
short a = 1 ;
short b = -1 ;
bool off = 1;
TForm1::t1Timer
if((i1>Form1->Height-60)|(i1 <0))
{
        a = a*(-1);
}
        i1 = i1  +10*a;
        j1 = j1 +10*b;
if((j1 >Form1->Width-90 )|(j1 <0))
        b=b*(-1);
{
if(off)
{
        t1->Enabled = true;
        off=0;
}
else
{
        t1->Enabled ;
        off=1;
}
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2011, 10:49
Ответы с готовыми решениями:

Рандомный выбор значений из массива
Привет всем! Нужна помощь. Необходимо рандомно выбрать значение из массива, пробовал так: int lefft = {808,824,808,824}; int top =...

Рандомный выбор 20 из 100 вариантов CASE
Суть вопроса. Есть множественный выбор с помощью switch(). В нем 100 вариантов case, нужно выбрать рандомные 20. То есть, возможен вариант,...

Рандомный выбор записи из БД
Здравствуйте, у меня есть код, где записи из БД выбираются в рандомном порядке. Как мне сделать чтобы перемешка записей БД была по 4...

6
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
07.04.2011, 10:58
куча неизвестных в твоем алгоритме, покажи рабочий код с которым можно что то сделать
0
1 / 1 / 1
Регистрация: 27.11.2010
Сообщений: 34
07.04.2011, 11:17  [ТС]
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
TForm1 *Form1;
 
Graphics::TBitmap*q1;
int i1=75,j1=75;
short a = 1 ;
short b = -1 ;
bool off = 1;
 
TForm1::FormCreate
 
q1 = new Graphics::TBitmap();
q1->LoadFromFile("Data\\q1.bmp");
 
TForm1::t1Timer
 
Form1->Canvas->Draw(i1,j1,q1);
if((i1>Form1->ClientHeight-60)|(i1 <0))
{
        a = a*(-1);
}
        i1 = i1  +10*a;
        j1 = j1 +10*b;
if((j1 >Form1->ClientWidth-90 )|(j1 <0))
        b=b*(-1);
{
if(off)
{
        t1->Enabled = true;
        off=0;
}
else
{
        t1->Enabled ;
        off=1;
}
}
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
07.04.2011, 12:08
C++
1
2
3
randomize();
a = 1-2*random(2);
b = 1-2*random(2);
1
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
07.04.2011, 12:43
и помоему у тебя перепутаныClientHeight и WidthClient

Добавлено через 26 минут
понравилась тема немного развил ее в свободное время вот что получилось
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
struct boll{
TColor cl;
int i1,j1;
short a;
short b;
short Xu,Yu;};
 
TList *h;
 
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{Form1->Canvas->Pen->Color=Brush->Color;
h=new TList();
randomize();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::t1Timer(TObject *Sender)
{boll *q;
for (int i = 0; i < h->Count; i++) {
  Form1->Canvas->Brush->Color=Form1->Canvas->Pen->Color;
  q=(boll*)(h->Items[i]);
  Form1->Canvas->Ellipse(q->i1,q->j1,q->i1+10,q->j1+10);
  if((q->i1>Form1->ClientWidth)|(q->i1 <0))
    q->a*=-1;
  q->i1+=q->Xu*q->a;
  q->j1+=q->Yu*q->b;
if((q->j1 >Form1->ClientHeight)|(q->j1 <0))
        q->b*=-1;
Form1->Canvas->Brush->Color=q->cl;
Form1->Canvas->Ellipse(q->i1,q->j1,q->i1+10,q->j1+10);}
}//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{for(int i=0;i<h->Count;i++)
    delete (boll*)(h->Items[i]);
delete h;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormDblClick(TObject *Sender)
{boll *q=new boll;
q->i1=random(ClientWidth);
q->j1=random(ClientHeight);
q->a=1-2*random(2);
q->b=1-2*random(2);
q->Xu=5+random(10);
q->Yu=5+random(10);
q->cl=RGB(random(255),random(255),random(255));
h->Add(q);}
//---------------------------------------------------------------------------
двойной клик по форме добавляет шарик
2
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
07.04.2011, 15:42
прикольная прога получилась

а если код из даблклика перенести в онмаусмув такое чудо выходит...
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
07.04.2011, 23:19
почти заставка:

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
struct boll{
bool round;
TColor cl;
int x,y,a,b;
byte d;
short Xu,Yu;};
 
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{Color=0;
Form1->Canvas->Pen->Color=Brush->Color;
h=new TList();
randomize();
}
//---------------------------------------------------------------------------
 
bool TForm1::ispos(boll *b1,boll *b2)
{return ((((b1->x>=b2->x) && (b1->x<=b2->x + b2->d))||
          ((b1->x+b1->d>=b2->x) && (b1->x+b1->d<=b2->x + b2->d)))&&
         ((b1->y>=b2->y && b1->y<=b2->y + b2->d)||
          (b1->y+b1->d>=b2->y && b1->y+b1->d<=b2->y + b2->d)));};
 
TForm1::sovm(int a,int b)
{boll*b1=Boll(a),*b2=Boll(b);
 
};
 
void __fastcall TForm1::t1Timer(TObject *Sender)
{boll*q;
for (int i = 0; i < h->Count; i++) {
  q=Boll(i);
  Form1->Canvas->Brush->Color=Form1->Canvas->Pen->Color;
  if(q->round)Form1->Canvas->Ellipse(q->x,q->y,q->x+q->d,q->y+q->d);
  else Form1->Canvas->Rectangle(q->x,q->y,q->x+q->d,q->y+q->d);
  if((q->x>Form1->ClientWidth-q->d)|(q->x <0))
    q->a*=-1;
  if((q->y>Form1->ClientHeight-q->d)|(q->y <0))
    q->b*=-1;
  q->x+=q->Xu*q->a;
  q->y+=q->Yu*q->b;
  Form1->Canvas->Brush->Color=q->cl;
  if(q->round)Form1->Canvas->Ellipse(q->x,q->y,q->x+q->d,q->y+q->d);
    else Form1->Canvas->Rectangle(q->x,q->y,q->x+q->d,q->y+q->d);}
for(int i = 0; i < h->Count; i++)
   for (int j = 0; j<h->Count; j++){
        if(i!=j&&ispos(Boll(i),Boll(j)))
            {sovm(i,j);
            if(i>=h->Count) break;}}
}//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{for(int i=0;i<h->Count;i++)
    delete (boll*)(h->Items[i]);
delete h;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormDblClick(TObject *Sender)
{t1->Enabled=!t1->Enabled;}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{if (!Shift.Empty())return;
boll *q=new boll;
q->x=X;
q->y=Y;
q->a=1-2*random(3);
q->b=1-2*random(3);
q->Xu=5+random(10);
q->Yu=5+random(10);
q->d=5+random(10);
q->round=random(2);
q->cl=RGB(random(255),random(255),random(255));
h->Add(q);
Caption=h->Count;}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
в функцию TForm1::sovm(int a,int b)
можно добавить код что будет при столкновении
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.04.2011, 23:19
Помогаю со студенческими работами здесь

Выборка слов, начинающихся с определенной буквы, и рандомный выбор одного из этих слов
Всем доброго времени суток! Необходимо создать запрос чтобы автоматически находить все слова из таблицы Access которые начинаются на...

Рандомный выбор из БД
Подскажите пожалуйста как организовать рандомный выбор если есть вот такой запррос в БД $query = &quot;SELECT * FROM...

Рандомный выбор
Приветствую Всех! Подскажите пожалуйста, как написать такой запрос, Есть в таблица tbl, в ней поля pole1, pole2, pole3. В поля...

Рандомный выбор
#include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; void questions(int t) { char q1 = &quot;Выберите правильный способ...

рандомный выбор
SELECT address FROM addresses ORDER BY RAND() LIMIT 1 с помощью этого запроса получаю результат и использую его внутри другой функции....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru