Воспользуюсь советом Made In USSR).  Для лучшего понимания игры вот - http://www.boardgamer.ru/pravila-igry-castle-panic-na-russkom-yazyke 
 Ну тогда начну: 
 1) Вопрос: "Как сделать колоду карт, из которой по мере надобности извлекают карты?" 
 Ответ: Сделал массив, в котором каждый элемент соответствует карте (даже если они повторяются), а также элемент принимает значение "1" - если есть в колоде, "0" - если в игре и "2" - если на кладбище. Вот меня и интересует, такой подход оптимальный??? 
 2) В игре Castle Panic (которую я пишу) есть понятие фазы. То есть в 1 фазу можно выполнять то-то и то-то, во 2 фазу то-то и т.д. 
 Вопрос: "Как сделать очередность фаз?" 
 Ответ: Просто ввёл глобальную переменную, которая отвечает за номер фазы. Оптимально??? 
 3) В игре монстры появляются на внешнем кольце и постепенно двигаются к крепости. 
 Вопрос: "Как обозначить монстров на карте и вообще как с ними обращаться?" 
 Ответ: Также как и с картами, создал массив монстров. В каждой ячейке поля расположил объект. Изначально спрайт этого объекта - просто белый квадратик. Затем ввёл двумерный массив, в котором элементы - координаты поля. Этот массив может принимать значение номера монстра (как и с картами у каждого монстра есть свой номер). Если есть монстр в ячейке, то спрайт этого объекта меняется с "белого квадратика" на "чёрный крест". НО есть одна проблема: в каждой ячейке может быть не один монстр. И как быть?? Делать ещё один или несколько (в зависимости сколько монстров в одной ячейке) двумерных массивов?? Или же сделать по-другому: создать 2 массива, один отвечает за номер ряда, другой за номер кольца? И элементы этого массива будут номера монстров, а принимать значение номера ряда/кольца?? 
 Пока это всё, что смог вспомнить) Надеюсь на ваши знания и желание помочь)))