Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2009, 00:19   #1
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
Вопрос Движение круга (Помогите пожалуйста)

У меня рисует круг, но двигается в одну сторону (горизонтально), что нужно добавить чтоб круг двигался случайным образом? Хотя я использовал random, но не хочет работать (((. Помогите пожалуйста, заранее очень вам благодарен.
Вот код программы:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include<math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
int x,y;
int a,b,cntX,cntY;
Double alpha;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
randomize;

if(x<ClientHeight) {x+=5;}
 else{
x=random(40)+100;
y=random(50)+100;}
PaintBox1->Canvas->Pen->Color=clBlue;
PaintBox1->Canvas->Ellipse(x+25,y+25,x+60,y+60);
}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormActivate(TObject *Sender)
{
Timer1->Interval=30;
}
//---------------------------------------------------------------------------
Lifefine вне форума Ответить с цитированием
Старый 24.11.2009, 00:31   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
if(x < ClientHeight) {x += (random(11) - 5);}
Работает?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 24.11.2009, 00:54   #3
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Код:
if(x < ClientHeight) {x += (random(11) - 5);}
Работает?
Вставил, двигается прямо (горизонтально), а потом обратно(((((. Хотелось чтоб он двигался случайно, менял свое местоположения ("прыгал").

Последний раз редактировалось Lifefine; 24.11.2009 в 00:56.
Lifefine вне форума Ответить с цитированием
Старый 24.11.2009, 10:39   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Было здесь недавно такое - при вызове randomize'а перед каждой генерацией числа получалось одно и то же значение. По идее randomize надо вызывать один раз до первой генерации псевдослучайного числа.
Можете еще попробовать Randomize с большой буквы - в билдере и такое есть.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 24.11.2009, 17:35   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

попробуйте использовать стандартные Сишные функции, а именно:
Код:
srand( (unsigned)time( NULL ) );//это можно и не писать, но тогда при каждом запуске случайные числа будут одни и теже
по хорошему ее надо вставлять в функцию main, но можешь попробовать вставить в конструктор формы.

и вставить
Код:
if(x < ClientHeight) {x += (rand()%100 );}
Не забудте вставить stdlib.h (для функций srand() и rand()), а так же time.h (для функции time())
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 24.11.2009 в 19:47.
ROD вне форума Ответить с цитированием
Старый 25.11.2009, 23:57   #6
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
попробуйте использовать стандартные Сишные функции, а именно:
Код:
srand( (unsigned)time( NULL ) );//это можно и не писать, но тогда при каждом запуске случайные числа будут одни и теже
по хорошему ее надо вставлять в функцию main, но можешь попробовать вставить в конструктор формы.

и вставить
Код:
if(x < ClientHeight) {x += (rand()%100 );}
Не забудте вставить stdlib.h (для функций srand() и rand()), а так же time.h (для функции time())
Сработало! Спасибо большое!
Lifefine вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отрисовка круга в OpenGl Oburec Мультимедиа в Delphi 1 04.07.2009 15:22
Си++ либо Си. движение полуцилиндров. помогите пож-та. s4astlivaja Помощь студентам 0 16.06.2009 00:11
Рисование дуги круга по координатам(С++) Olya90 Помощь студентам 0 07.05.2009 13:52
Пересечение прямой и круга CoGnaC Паскаль, Turbo Pascal, PascalABC.NET 8 11.03.2008 17:01
Помогите сделать движение объектов в Pascal Ivanich Помощь студентам 44 11.12.2007 20:33