Бумер Опубликовано 14 марта, 2007 Жалоба Поделиться Опубликовано 14 марта, 2007 В общем, программирую я некоторое подобие тетриса на паскале. Сверху падает палочка из трех цветов. Вот мне надо запрограммировать (сбацать процедурку), которая бы каждый раз выдавала три цвета из возможных трех (к примеру красный, синий, зеленый) каждый раз в разном порядке. (ну само собой разумеется что не каждый раз, т.е. перестановки с повторениями я так понимаю). Можно чтобы было два одинаковых цвета и даже три одинаковых, но каждый раз по-разному. Я пробовал так: Сделал массив, имеющий три элемента - коды цветов. Далее я юзал a:=random(3) a:=a+1 и выбирал из массива а-тый элемент. Но так очень часто получается одинаковый цвет в одной палочке. Как лучше сделать? Ссылка на комментарий Поделиться на другие сайты Поделиться
neic Опубликовано 14 марта, 2007 Жалоба Поделиться Опубликовано 14 марта, 2007 Сделай ещё рандом. Сколько клеток(линий) столько и рандомов, т.е. для каждой клетке отдельный рандом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 марта, 2007 Жалоба Поделиться Опубликовано 14 марта, 2007 (изменено) Бумер: Три одинаковых цвета будут, когда второй элемент будет иметь такой же цвет, как первый, то есть в трети случаев, а третий - в трети этих случаев. Итого в одном случае из девяти. Все цвета будут разные, когда второй элемент имеет другой цвет, чем первый - это 2/3 cлучаев, а третий имеет еще один цвет, то есть в 1/3 таких случаев. Итого в 2/9 случаев. Два цвета одинаковые, а третий другой - когда элементы 1 и 3 одного цвета, а 2 другого, или 2 и 3 одного цвета, а 1 другого, или 1 и 2 одного цвета, а 3 другого. Это 3*1/3*2/3, равно 2/3. Если ты хочешь, чтобы вероятности распределялись иначе, чем установил Господь Бог для простого случайного выбора, тогда решай сам, какие вероятности тебе нужны, и вводи зависимость выбора последующего элемента от выбора предыдущих элементов. P.S. a:=random(3) a:=a+1А a:=random(3)+1 не проще ли было сделать? Изменено 14 марта, 2007 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 16 марта, 2007 Жалоба Поделиться Опубликовано 16 марта, 2007 Самый простой способ это не мудрить и просто сделать массив из 3-х элементов. Например colors[0] = 0; // Первый цвет colors[1] = 1; // Второй цвет colors[2] = 2; // Третий цвет Далее перемешиваем массив. const int iterations = 5;for(int i = 0; i < iterations; i++){int first = random(3);int second = random(3);int tmp = a[first];a[first] = a[second];a[second] = tmp;} Тогда в одной палочке не будет двух одинаковых цветов и сама палочка будет раскрашена относительно произвольно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 22 марта, 2007 Жалоба Поделиться Опубликовано 22 марта, 2007 а чем такой способ плох ? Var a:array(0..2) of string;{ массив цветов} B:array(0..2) of string { массив клеок точнее их цветов} i,z:word; begin randomize; a[0]:='красный'; a[1]:='зеленый'; a[2]:='синий'; for i:=0 to 2 do begin z:=random(3); { компилятора под рукой нету поэтому не ручаюсь за работоспособность} b:=a[z]; end; end. Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 23 марта, 2007 Автор Жалоба Поделиться Опубликовано 23 марта, 2007 Спасибо народ, но я уже сделал, просто сначала идет первая линия и в ней три одинаковых цвета, а дальше все в норме, я просто думал, что так будет все время - два три одинаковых цвета, а попробывал - оно и нормально! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти