![]() |
|
||||||||||
|
|
|
|||||
|
Banned
Регистрация: Sep 2012
Сообщений: 91
|
Всем привет
создаю цикл,хочу что бы 10 элементов mine добавилось рандомно на поле,c этим проблем не возникает,НО мне понадобилось,что бы рандомные координаты были каждый раз кратны 30 например (то есть число выдаваемое рандомом должно делится на 30) пока что элементы просто разбрасываются в любые координаты от 0-300. вот такой есть код: package{ import flash.display.MovieClip; public class Random extends MovieClip{ private var n:Number; private var m:Number; public function Random () { for(k=0;k<10;k++){ var mine = new Mine(); addChild(mine); n=Math.floor(Math.random()*300); m=Math.floor(Math.random()*300); trace (m); trace(n); mine.x=n; mine.y=m; } } } } |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
var k:uint = 0; var n:uint = 0; var m:uint = 0; var grid_step:uint = 30; var grid_count:uint = 10; for(k=0;k<10;k++){ n=Math.floor(Math.random()*grid_step*(grid_count+1)); m = Math.floor(Math.random()*grid_step*(grid_count+1)); n = n - n % grid_step; m = m - m % grid_step; trace (m); trace(n); } если вам нужно исключать дубликаты-то просто запоминайте уже примененную расстановку, при получении того же результата просто повтор continue, вместо for-while |
|
|||||
|
Banned
Регистрация: Sep 2012
Сообщений: 91
|
Цитата:
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
Если у вас поле 300 на 300 px, и шаг 30-то это поле 10 на 10 квадратиков, grid_count это и отражает.
% -остаток от целочисленного деления, для 35 будет так- 35-(35%30)=35-5=30. Просто забавно, задачка-то сильно простая. |
|
|||||
|
Banned
Регистрация: Sep 2012
Сообщений: 91
|
Цитата:
здесь вы считаем рандомное число от 0 до 1 так? умножаем это число на =30 умножаем полученное произведение на =11 далее присваиваем значению n - n%grid_step - вот эту вещь вообще не понимаю |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
Math.random()*30*11= диапазон от 0 до 330. Так? Так.
n = n - n % grid_step; Берем число. Отнимаем от него целочисленный остаток от деления на 30. Получается число, кратное 30. Почему? Потому что его целочисленный остаток от деления теперь равен 0(мы как раз этот остаток и вычли). По определению, число кратно числу, если остаток от целочисленного деления==0. Если у вас это такие трудности вызывает, можно кучу альтернатив предложить. |
|
|||||
|
Banned
Регистрация: Sep 2012
Сообщений: 91
|
Цитата:
![]() Почему то осознаю всё,когда на форуме вопрос начинаю писать ![]() спасибо |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
Конечно, проще. Но скучно.
|
|
|||||
|
Banned
Регистрация: Sep 2012
Сообщений: 91
|
то есть не юзать переменные вообще?
я кстати не допер почему мы берем 11 потом 12 потом 13 ... 20 для grid_count,ну это ладно) |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:44. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|