Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
1

Рандомная коорлината...

23.04.2010, 00:01. Показов 981. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот решил написать что-то посложнее для себя, мини игруху

вот код, 3 процедуры, перерисовка происходит все нормально
Pascal
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
procedure TForm1.KreisCreate(x,y : Integer);
begin
r := 15;
Canvas.Pen.Color := clBlack;
Canvas.Ellipse(x,y,x+r,y+r);
end;
 
procedure TForm1.KreisDelete(x,y : Integer);
begin
r := 15;
Canvas.Pen.Color := clBtnFace;
Canvas.Brush.Color := clBtnFace;
Canvas.Ellipse(x,y,x+r,y+r);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var i : integer;
begin
KreisDelete(fx,fy);
fx := 100;// тут я поставил значение потому что не знаю как зарандомить ее
if fy = 200 then fy := 0;
fy := fy + 5;
KreisCreate(fx,fy);
Timer1.Interval := 100;
Timer1.Enabled := True;
end;
только как видно из процедуры таймера, там у меня х кооррдината стоит закрепленная, я не знаю как написать чтобы она получалась рандомом, фигурка в виде шарика появляется в самом верху формы(100,0), потом постепенно падает вниз как доходит до определенной координаты снова переносится наверх, итак вопрос, если я ставлю х координате значение рандом, ее начинает носить по всей форме, мне нужно чтобы, когда шарик мой падает сверху, и с каждым разом по оси х получался рандомом, но падал в дальнейшем прямолинейно... вот собственно и весь вопрос. надеюсь на помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2010, 00:01
Ответы с готовыми решениями:

Рандомная генерация
Здравствуйте скажите пожалуйста как сделать рандомную генерацию 15 значных паролей то есть у меня...

Морской бой, рандомная расстановка кораблей
Всем привет, вообщем задали нам морской бой, почти сделал, но вот с рандомной расстановкой...

Рандомная загрузка заданий с ini файла
Как сделать загрузку заданий из файла рандомной ? unit Unit1; interface uses ...

Автоматическая рандомная сортировка и переименовывание файлов на Delphi
Всем привет! Хочу специально для себя написать программу которая брала бы файлы с определенной...

4
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
23.04.2010, 00:54 2
Координата Х у тебя не меняется, следовательно задавать ее в таймере нет смысла, задавай тут - TForm1.KreisCreate. Стирать можно гораздо проще form1.repaint
А вобще идеальный вариант передавать координату в функцию рисования как параметр.

Я бы на твоем месте создал динамический массив (что бы легко менять кол-во шаров) в котором будут храниться координаты X и Y для всех шариков. Задал бы рандомное заполнение всех иксов в диапазоне ширины поля для рисования с учетом диаметра шариков, чтобы не налезали друг на друга, после чего в таймере менял координату Y через цикл для всех шариков (можно сделать разную скорость падения каждого) и опять же циклом вывел процедуру рисования шарика, на мой взгляд вышло бы аккуратно и красиво
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
23.04.2010, 01:55  [ТС] 3
Цитата Сообщение от necroslider Посмотреть сообщение
Координата Х у тебя не меняется, следовательно задавать ее в таймере нет смысла, задавай тут - TForm1.KreisCreate. Стирать можно гораздо проще form1.repaint
А вобще идеальный вариант передавать координату в функцию рисования как параметр.

Я бы на твоем месте создал динамический массив (что бы легко менять кол-во шаров) в котором будут храниться координаты X и Y для всех шариков. Задал бы рандомное заполнение всех иксов в диапазоне ширины поля для рисования с учетом диаметра шариков, чтобы не налезали друг на друга, после чего в таймере менял координату Y через цикл для всех шариков (можно сделать разную скорость падения каждого) и опять же циклом вывел процедуру рисования шарика, на мой взгляд вышло бы аккуратно и красиво
ну да, конечно, возможно вам что-то и проще написать не так как я, я только учусь и то самостоятельно и довольно недавно начал, помощь могу у вас спросить, я попросил просто пример написания куска кода а не алгоритм выполнения...и не про красоту писанины... вот вы написали :"Задал бы рандомное заполнение всех иксов в диапазоне ширины поля для рисования с учетом диаметра шариков", вот это тоже самое я и спросил как сделать это
0
178 / 147 / 21
Регистрация: 07.11.2009
Сообщений: 591
23.04.2010, 12:38 4
Тут все элементарно. Было бы желание, тогда разберешься. Вот решение твоей проблемы
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  massiv: array of array of integer;  //массив
  i:integer;
  count_elements: integer;   //кол-во элементов в массиве
  R:integer;                 //Радиус шарика
  s:string;
begin
  randomize;
  count_elements:= 10;
  R:= 20;
 
  for i:=0 to count_elements - 1 do   //заполняем массив значениями
    begin
      SetLength(massiv,i+1); SetLength(massiv[i],2);
      massiv[i,0]:= random(Form1.Width);
      massiv[i,1]:= R;
    end;
 
  for i:=0 to length(massiv) - 1 do
    begin
      s:= s + 'X=' + inttostr(massiv[i,0]) + '; Y=' + inttostr(massiv[i,1]) + #10;
    end;
  showmessage(s);
end;
Создай кнопку на форме и тупо вставь туда этот код и все будет работать. Единственное что нужно добавить проверку иксов, с учетом радиуса шарика, это сам сделаешь. Y в начале везде равен радиусу шарика, чтобы он не вылезал за границы формы.
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
27.04.2010, 17:27  [ТС] 5
Получилось в принципе тоже самое что и было, только вы добавили массив, тем самым добавив кол-во шариков, мой же вопрос заключался, как создать рандомный х, только 1 раз чтобы генерировалось место появления шара, а далее с того места он падал бы на землю перпендикулярно земле, из той точки х в которой появился, сейчас же, когда шарик падает на землю, с каждым разом генерируется новый х, и шарик летит вниз по такой траектории, что у остается константным, а по х по всей ширине формы опускается в низ, получается летит по зигзагу от 1 края формы до другого
0
27.04.2010, 17:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2010, 17:27
Помогаю со студенческими работами здесь

Рандомная панель TNotebook без повторения (Интекс TNotebook)
есть программа тест нужно чтобы в случайном порядке выдавался вопрос без повторений(индекс...

Рандомная картинка
Написали с другом программу, которая выводит на экран случайное изображение из массива. Вопрос в...

Рандомная заливка
Строю циклом с задержкой круговую диаграмму из паев (pie). Необходимо, чтобы каждый сектор...

Рандомная картинка
var aces_A = ; var twos_B = ; var threes_C=; var fours_D=; var fives_E=; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru