Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Помогите, пожалуйста, с логической реализацией. (http://www.flasher.ru/forum/showthread.php?t=99017)

romulko 26.07.2007 16:02

Помогите, пожалуйста, с логической реализацией.
 
Вложений: 1
Добрый день, уважаемые флешеры.
У меня такая проблема – взялся програмить вот такое задание –

Имеется новая колода карт(36 штук). Масти расположены в обычном порятке преферанса (пика, хреста, черва, бубна). Старшинство карт по убыванию от Туза до 6ки.
1. Перетасовать колоду и показать результат тасования.
2. Отсортировать назад в фабричный порядок и показать результат.
3. В колоду в случайные места добавили четыре Д , два В , К и восемь 6 . Убрать лишние карты не меня порядок карт и показать результат.
4. Раздать колоду на четверых играков в случайном порядке. Показать полученые каждым играком карты.
5. Объявить самую длинную масть в колоде для каждого игрока. На основе заявленых выбрать самую лучшую.


Из-за того, что нет реального опыт программировать логических систем, напрограммировал такого, что аж не знаю, куда податься (исходник прикрепленный).
Сделал только на одну масть и с раздачей на двух игроков.

Как сделать все по задачи даже не представляю… Друзья, пожалуйста, напишите два-три предложения по реализации этой задачи. Достаточно будет поверхностного описания.

Сижу над этим уже более недели.… Никак не получается сделать то, что надо…:(
Буду благодарен за любую помощь.

†‡Paladin‡† 26.07.2007 16:27

Отлично. Заданы 4 массива, каждый по 9 карт. (вариант 1 двумерный)
0. делаем спец функцию по заполнения этих массивов. Заполняем картами по стоимости (1 это шестерка, 9ка == туз)
1. В новый массив занести в случайном порядке 36 карт, отобразить на экране. (двойной рандом. сначала 1-4 по колодам, затем 1-9 по столбцам. Уже выбранные значения удаляем из оригинальных массивов)
2. опять шаг 0
3. Циклом убираем все повторяющиеся значения. (лично я бы жахнул опять шаг 0)
4. Почти тоже самое что и шаг 1, только формируем не 1 новый массив из 36 карт, а 4 маленьких по 9.
5. Сортируем 4 полученных массива (метод пузырька или другие какие знаешь), отображаем 1й элемент.

koIIImarik 26.07.2007 18:43

чувак)) это тестовое задание на каком-то сайте, где эту задачу должны решить претенденты на работу флешера в этой компании))) я натыкался в сети где-то, хотя сожет еще где то встречается подобная задача...

†‡Paladin‡† 26.07.2007 19:47

Чето задача простая слишком. Работа с массивами это школа 11й класс.

udaaff 27.07.2007 00:33

Первые три задания =)
 
Код:

trace('создаем колоду');
var r_default_array:Array = new Array();
//функция заполнения колоды по дефолту
r_default_array = default_pack();
//выводим колоду в консоль
for (var i = 0; i<36; i++) {
        trace(r_default_array[i].number+'--'+r_default_array[i].colour);
}
//
//1. Перетасовать колоду и показать результат тасования.
//
var r_random_array:Array = new Array();
r_random_array = random_pack(r_default_array);
//выводим колоду в консоль
trace('выводим колоду в консоль');
for (var i = 0; i<36; i++) {
        trace(r_random_array[i].number+'--'+r_random_array[i].colour);
}
//
//2. Отсортировать назад в фабричный порядок и показать результат.
//
trace('сортируем');
r_random_array.sortOn(['colour', 'number']).reverse();
for (var i = 0; i<36; i++) {
        trace(r_random_array[i].number+'--'+r_random_array[i].colour);
}
//
//3. В колоду в случайные места добавили четыре Д , два В , К и восемь 6 .
//    Убрать лишние карты не меня порядок карт и показать результат.
//
r_random_array = random_add_card(r_random_array);
trace("добавляем случайные карты");
for (var i = 0; i<r_random_array.length; i++) {
        trace(i+'  '+r_random_array[i].number+'--'+r_random_array[i].colour);
}
trace("удаляем лишние карты из калоды, не меня порядка карт");
r_random_array = delete_cards(r_random_array, r_default_array);
for (var i = 0; i<r_random_array.length; i++) {
        trace(i+'  '+r_random_array[i].number+'--'+r_random_array[i].colour);
}
//делаем проверку сортируем
trace('делаем проверку все ли на месте');
r_random_array.sortOn(['colour', 'number']);
for (var i = 0; i<r_random_array.length; i++) {
        trace(r_random_array[i].number+'--'+r_random_array[i].colour);
}
//*************************************************************************
//случайным образом добавляем заданные карты
//*************************************************************************
function random_add_card(in_array:Array):Array {
        //
        var out_array:Array = new Array();
        out_array = out_array.concat(in_array);
        var random_number:Number;
        var random_colour:Number;
        //добавляем дамы
        for (var i = 0; i<4; i++) {
                random_number = Math.floor(Math.random()*36);
                random_colour = Math.floor(Math.random()*4)+1;
                out_array.splice(random_number, 0, {number:7, colour:random_colour});
        }
        //вольты
        for (var i = 0; i<2; i++) {
                random_number = Math.floor(Math.random()*36);
                random_colour = Math.floor(Math.random()*4)+1;
                out_array.splice(random_number, 0, {number:6, colour:random_colour});
        }
        //король
        random_number = Math.floor(Math.random()*36);
        random_colour = Math.floor(Math.random()*4)+1;
        out_array.splice(random_number, 0, {number:8, colour:random_colour});
        //шестерки
        for (var i = 0; i<8; i++) {
                random_number = Math.floor(Math.random()*36);
                random_colour = Math.floor(Math.random()*4)+1;
                out_array.splice(random_number, 0, {number:1, colour:random_colour});
        }
        return out_array;
}
//удаление лишних карт
function delete_cards(in_array:Array, default_array:Array):Array {
        var out_array:Array = new Array();
        out_array = out_array.concat(in_array);
        var not_found:Boolean;
        for (var i = 0; i<=out_array.length; i++) {
                //ищем элемент в начальном массиве и удаляем если находим
                for (var j = 0; j<default_array.length; j++) {
                        if (out_array[i] == default_array[j]) {
                                default_array.splice(j, 1);
                                j--;
                                not_found = false;
                                break;
                        }
                        not_found = true;
                }
                if (not_found) {
                        out_array.splice(i, 1);
                        i--;
                }
        }
        return out_array;
}
//*************************************************************************
//заполняем рабочую колоду случайным образом
//*************************************************************************
function random_pack(in_array:Array):Array {
        //переписываем начальную колоду во вспомогательный массив
        var accessory_array:Array = new Array();
        accessory_array = accessory_array.concat(in_array);
        //
        var out_array:Array = new Array();
        //будем из вспомогательного массива формировать рабочую колоду
        var random_number:Number;
        for (var i = 0; i<36; i++) {
                //генерируем случайное число в пределах оставшейся колоды
                random_number = Math.floor(Math.random()*(36-i));
                //вычленяем из вспомогательного массива объект и добавляем его в рабочий массив
                out_array.push(accessory_array.splice(random_number, 1)[0]);
        }
        return out_array;
}
//**************************************************************************
//функция заполнения колоды по дефолту
//**************************************************************************
function default_pack():Array {
        var out_array:Array = new Array();
        for (var i = 9; i>0; i--) {
                out_array.push({number:i, colour:1});
        }
        for (var i = 9; i>0; i--) {
                out_array.push({number:i, colour:2});
        }
        for (var i = 9; i>0; i--) {
                out_array.push({number:i, colour:3});
        }
        for (var i = 9; i>0; i--) {
                out_array.push({number:i, colour:4});
        }
        return out_array;
}

Проще ничего не придумал к сожалению)

Kikasso 27.07.2007 02:47

Код:

standartDeck = {
 signs:["S", "C", "D", "H"],
 vals:[ 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"]
};
function generateDeck(){
 var n = 0;
 var deck = [];
 var t = standartDeck;
for (var s = 0; s<t.signs.length; s++) { // масти                                                                 
 for (var v = 0; v<t.vals.length; v++, i++) {  // карты 
  deck.push( { sigh:t.signs[s], val:t.vals[v], order:n++ } );
}}
return deck;
}
function shakeDeck( deck ){
for(var i = 0; i< deck.length ; i++) deck[i].order = Math.random();
 deck.sortOn("order", 16);
 for(var i = 0; i< deck.length ; i++) deck[i].order = i;
}


romulko 27.07.2007 03:06

†‡Paladin‡†, udaaff, Kikasso СПАСИБО Вам большущее за ответы! Сейчас буду анализировать структуру, ибо эбез этого никак :)

Цитата:

чувак)) это тестовое задание на каком-то сайте, где эту задачу должны решить претенденты на работу флешера в этой компании))) я натыкался в сети где-то, хотя сожет еще где то встречается подобная задача...
Не знаю, меня друг попросил помочь с этим. Так как я хочу переориентироваться на програминг (сейчас работаю дизайнером, и это уже достало), беру всякое разное, чтобы занять себя по АС.… Но, видимо, пока рановато брать подобные задания.

Еще рар спасибо всем.

Kikasso 27.07.2007 03:23

Цитата:

Сообщение от romulko
1. Перетасовать колоду и показать результат тасования.
2. Отсортировать назад в фабричный порядок и показать результат.
3. В колоду в случайные места добавили четыре Д , два В , К и восемь 6 . Убрать лишние карты не меня порядок карт и показать результат.
4. Раздать колоду на четверых играков в случайном порядке. Показать полученые каждым играком карты.
5. Объявить самую длинную масть в колоде для каждого игрока. На основе заявленых выбрать самую лучшую.

1) - есть.
2) и 3) - добавь каждой карте свойство "номер" при генерации колоды. Таким образом выкинуть лишние и собрать обратно труда не составит.
4) Изначально все карты в "шузе" - массив не сданных карт. У игрока "рука", тоже массив. pop() из шуза, push() в руку.


Часовой пояс GMT +4, время: 21:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.