16:58 

Хроники Панды: первые трудности

_the_elf_
Казалось бы, что может быть сложного в том, чтобы добавить пару новых функций? И если с добавлением второй фишки особых проблем не возникло, то смена направления стала настоящим ящиком Пандоры, ибо стоило только начать продумывать эту идею, как появлялись все новые и новые проблемы.

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

Например, сама структура Token не полностью отражает все характеристики фишки:

Нет никакой информации о значении в текущей ячейке (напомню, что поле представляет собой целочисленный массив, значения которого являются "картами", по которым ходит игрок), о номере игрока, о триггерах.

Я планировал для начала на триггеры забить и просто реализовывать функции, однако опытным путем выяснил, что на такие вещи лучше не забивать, а то потом придется сильно менять всю структуру. Могу привести пример, но, думаю, стоит напомнить функции карт:

  • Десятка
    • Черная: игрок пропускает ход

    • Красная: игрок делает дополнительный ход

  • Валет
    • Черный: игрок меняет направление движения

    • Красный: выбранный оппонент меняет направление движения

  • Дама
    • Черная: игрок открывает любую закрытую карту, находящуюся позади него; если открытая карта активная, то игрок должен использовать ее в СЛЕДУЮЩИЙ ХОД

    • Красная: игрок открывает любую закрытую карту, находящуюся позади него; выбранный оппонент в свой СЛЕДУЮЩИЙ ход не сможет использовать карты такого же цвета

  • Король
    • Черный: игрок поворачивает любые две карты, превращая их в препятствие, которое можно только "перепрыгнуть"

    • Красный: игрок меняет местами 2 открытые и закрытые карты

  • Туз
    • Черный: усиливает следующую черную карту игрока или ослабляет красную карту выбранного оппонента

    • Красный: усиливает следующую красную карту игрока или ослабляет черную карту выбранного оппонента

  • Джокер
    • Черный: в свой следующий ход игрок разыгрывает любую открытую черную карту

    • Красный: в свой следующий ход игрок разыгрывает любую открытую красную карту



К тому времени, как я начал реализовывать смену направления движения (т.е. Валет) и пропуск хода (т.е. Десятку), структура Token выглядела уже следующим образом:



Поле из обычного целочисленного массива превратилось в структуру Board:



Так что, мне кажется придется несколько повременить с переходом на объектно-ориентированный язык. Лучше для начала досконально продумать реализацию функций.

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

URL
   

Ушастые заметки

главная