Страница 1 из 1

Проблема с отбором.

Добавлено: 30 апр 2014, 19:59
wapifz
Всем привет. Пишу небольшое приложение для детей (попросили по учебе). Столкнулся с проблемой. Попробую объяснить коротко.

Приложение - что-то вроде "Кто хочет стать миллионером". Дается 6 вариантов ответа. 1 из них правильный - остальные 5 выбираются рандомным образом. Все варианты ответа берутся из одного массива.

Сделать так, чтобы правильный ответ не попадался в нескольких ячеек одновременно я смог. А вот сделать так, чтобы другие варианты не повторялись среди остальных - проблема.

Как быть? Может быть кто подскажет? Буду ну очень признателен ;) Если нужен полный исходник - скину полный.

Код: Выделить всё

 //_trueButton - номер кнопки правильного ответа (все кнопки в массиве)//_btns - массив, в котором хранятся кнопки.//AnimalsList.ANIMALS_EASY - массив, в котором хранятся варианты ответа private function randomButtons(_trueButton: Number, _btns: Array): void {            _btns[_trueButton].label = AnimalsList.ANIMALS_EASY[currentAnimal - 1].animalName; // сразу пишу правильный ответ на правильной кнопке                for (var i:int = 0; i<_btns.length; i++){                if (i != _trueButton){                    var rand:Number = Math.floor(Math.random()*AnimalsList.ANIMALS_EASY.length);                    _btns[i].label = AnimalsList.ANIMALS_EASY[rand].animalName;                    trace ("rand"+rand);                }            }            trace("=====");        } 

Re: Проблема с отбором.

Добавлено: 30 апр 2014, 21:25
alexandr_ratush
Привет!
Я бы перемешал массив с ответами, и выбрал бы первые элементы сколько мне нужно.
Вот пример перемешивания:

Код: Выделить всё

var arr : Array = [0,1,2,3,4,5,6,7,8,9]; function randomize ( a : *, b : * ) : int {    return ( Math.random() > .5 ) ? 1 : -1;} trace( arr.sort( randomize ) );
Далее просто копируем часть массива, к примеру 4 ответа, и все:

Код: Выделить всё

mass[0] = arr.slice(0, 3);

Re: Проблема с отбором.

Добавлено: 30 апр 2014, 22:00
wapifz
Массив с ответами - статический. Его вроде как перемешать не удастся.

Если честно - не очень понял ваш код. Можете немного подробнее?

Re: Проблема с отбором.

Добавлено: 30 апр 2014, 22:58
alexandr_ratush
Массив с ответами - статический. Его вроде как перемешать не удастся.
Тогда скопируйте его :) . Тут читать.

Вот набросал пример работы (писал в кадре). Киньте на сцену кнопку.

Код: Выделить всё

import flash.events.MouseEvent; // Предположим что это статический массивvar answerArrayStatic:Array = ["one", "three", "two", "four", "five", "six"]; // Копируем массивvar copyAnswer:Array = answerArrayStatic.slice(); // Вывод в трейс 4 случайных эллемента массиваfunction getRandomValue():void {    var randomValue:Array;        // Перемешиваем массив    copyAnswer.sort(randomize);        // Копируем первые 4 эллемента, и выводим    randomValue = copyAnswer.slice(0, 4);    trace(randomValue);} // Служебная ф-ция для сортировки массиваfunction randomize(a:*, b:*):int {    return (Math.random() > .5) ? 1 : -1;} // Кнопка на сцене btnResbtnRes.addEventListener(MouseEvent.CLICK, onClick);function onClick(e:MouseEvent):void {    getRandomValue();} 

Re: Проблема с отбором.

Добавлено: 30 апр 2014, 23:05
wapifz
Спасибо большое :) помогли