2015-10-26 2 views
2

Я хочу реализовать простой 8off solitaire game в haskell, и я не совсем уверен, как определить мою доску и как сделать функцию для возврата случайной стартовой доски. Как я могу изменить myBoard и мою структуру данных? До сих пор, у меня это:Реализация пасьянса в haskell

data Pip = A|TW0|THREE|FOUR|FIVE|SIX|SEVEN|EIGHT|NINE|TEN|J|Q|K --pip value 
     deriving (Eq,Show) 
data Suit = S|H|D|C            --suit 
     deriving (Eq,Show) 
type Card = (Pip,Suit)           --card 
type Deck = [(Card)]            --deck 
type Foundations = [(Deck)]          foundations 
type Columns = [(Deck)]           --columns 
type Reserve = [(Deck)]           --reserve 
type EOBoard = [(Deck)] 

myBoard::Deck->EOBoard 
myBoard pack = [shuffle pack] 

, который возвращает меня, это:

[[(K,D),(TW0,H),(SEVEN,C),(SEVEN,S),(THREE,D),(NINE,S),(THREE,C),(FOUR,H),(THREE,S),(TW0,D),(TW0,C),(FOUR,S),(K,S),(TEN,D),(J,S),(EIGHT,H),(FOUR,D),(NINE,H),(SEVEN,H),(A,S),(SIX,S),(EIGHT,S),(FIVE,S),(FOUR,C),(K,H),(Q,D),(THREE,H),(TEN,H),(A,D),(EIGHT,C),(NINE,D),(Q,H),(J,D),(J,C),(TEN,C),(Q,S),(Q,C),(J,H),(NINE,C),(SIX,C),(FIVE,H),(SEVEN,D),(A,C),(TW0,S),(EIGHT,D),(FIVE,D),(TEN,S),(K,C),(A,H),(SIX,D),(FIVE,C),(SIX,H)]] 
+0

Обратите внимание, что '[(Deck)]' является просто '[Deck]' и аналогичным для '[(Card)]'. –

ответ

5

Похоже, вы на хороший старт! Возможно, вы готовы объединить некоторые из этих компонентов, чтобы сформировать ваш совет.

Вы можете подумать о создании Board/Game ADT.

Возможно, вам захочется воспользоваться функцией по умолчанию, которая устанавливает состояние вашего форума по умолчанию.

  • defaultFoundation, который возвращает Foundation, содержащие четыре пустых Deck s
  • defaultColumns, который принимает Deck и разбивает его, возвращая Columns, содержащих 8 Deck с с 6 карт каждый (возможно, вы хотите передать только в первые 48 карт с колоды).
  • defaultReserves который возвращает Reserve с 8 Deck с, 4 с картами и 4 пустой (может быть, здесь, где вы хотите, чтобы в те оставшиеся 4 карты из Deck)

Ты молодец так далеко, сделайте это шаг за шагом. :)

+0

Большое спасибо @Mario. Я попробую это и посмотрю результат. –

+0

Как я могу контролировать количество карточек, которые я перехожу в столбцы, например. Как я могу разделить эти столбцы на 8 равных по 6? –

+0

Взгляните на документы для списков, в частности подписок. http://hackage.haskell.org/package/base-4.8.1.0/docs/Prelude.html#g:18 – Mario

Смежные вопросы