_the_elf_
Надо же, новости появились быстрее, чем я думал.

Хочу рассказать про генерацию игрового поля.

Требовалось заполнить поле из 54 ячеек случайным картами со значениями в промежутке [2; 15] (валет - 11, дама - 12, король - 13, туз - 14, джокер - 15) черного и красного цвета. Причем карты в отрезке [2; 14] должны быть представлены в количестве 4 штуки каждая (по 2 карты красного и черного цвета), а джокеров должно быть только 2. Именно они и доставляли больше всего хлопот в самом начале.

Решил в первую очередь разобраться со значениями карт, оставив цвета на потом.
Вот так это выглядело (первоначально я делал все для поля в 16 ячеек, поэтому здесь MAXCELL = 16):


Однако я быстро понял, что цвета тут распределяются неправильно, а когда вспомнил, что джокеров в колоде не 4, а 2, стало ясно - надо все менять.

Пришлось отвлечься от своих изысканий на 2 недели, ибо сессия неумолимо приближается. Видимо, все это время подсознательно я продолжал думать о проблеме, т.к. стоило мне вернуться к работе, как решение было найдено очень быстро. Зачем генерировать случайные числа в промежутке [2;14] при заполнении массива? Я ведь точно знаю, какие значения и в каком количестве должны в нем быть. Гораздо проще будет изначально забить массив нужным содержимым, а потом просто перемешать его.
Дабы не возиться, отсчитывая нужное количество нулей (черный цвет карты) и единиц (красный цвет карт), решил просто ставить их попеременно. В конце-концов это не имеет никакого значения, главное, чтобы обычные карты имели по две красные и две черные карты, а при перемешивании мы перемещаем не только значение ячейки, но и соответствующую ему ячейку с цветом, так что цвета не сбиваются.
(в данном варианте MAXCELL = 54)


Если интересно, про алгоритм тасования можно почитать здесь


Также я добавил возможность выбирать количество игроков (напомню, что автором было задумано от 2 до 4 игроков).



А еще вывел в отдельную функцию запрос на бросок кубика



Так что класс Main теперь выглядит очень опрятно, ничего лишнего нет.

Пока это все изменения. Следующим шагом будет добавление триггеров.

@музыка: Malukah - The Dragonborn Comes

@темы: хроники панды, программирование