Является ли F # хорошим языком для карточной игры AI?

Я пишу Маджонг в С# (традиционная китайская игра, а не пасьянс). При написании кода для AI-игрока бота, мне интересно, будет ли функциональный язык, такой как F #, более подходящим языком, чем то, что я сейчас использую, это С# с большим количеством Linq. Я не знаю много о F #, поэтому я спрашиваю здесь.

Чтобы проиллюстрировать, что я пытаюсь решить, здесь краткое изложение маджонга:

Маджонг немного похож на Джин Рамми. У вас есть 13 плиток в вашей руке, и каждый ход, вы рисуете плитку и отбрасываете другую, пытаясь улучшить вашу руку в сторону выигрышной руки маджонга, которая состоит из 4 наборов и пары. Наборы могут представлять собой 3 вида (4), 4 вида (kongs) или последовательность из 3 последовательных черепиц (chows). Вы также можете украсть другой игрок, если он может выполнить один из ваших наборов.

Код, который я должен был написать, чтобы определить, может ли бот объявить 3 последовательных набора плиток (чау), довольно утомительно. Я должен найти все уникальные плитки в руке, а затем начать проверять, есть ли последовательность из 3 плиток, которые содержат это в руке. Обнаружение, если бот может пойти Маджонг, еще более усложняется, поскольку это комбинация обнаружения, если там 4 набора и пара в руке. И это просто стандартная маджонгская рука. Там также множество "специальных" рук, которые нарушают эти правила, но все еще являются маджонг. Например, "13 уникальных чудес" состоит из 13 отдельных плиток, "Империя Джейд" состоит только из цветных зеленых плиток и т.д.

В идеальном мире я бы хотел просто указать "правила" маджонга и иметь язык, чтобы соответствовать набору из 13 плиток против этих правил, чтобы получить, какие правила он выполняет, например, проверяя, является ли это маджонг или если он содержит 4 вида. Может ли помочь решить эту функцию F #?

Ответ 1

Если вы знакомы с функциональными языками, это отличный способ написать игровые AI - и если вы этого не сделаете, задача изучения одного поможет вам расти, и вы оставите вас лучшим программистом, чем вы были, (Я мог бы честно сказать то же самое для декларативных языков, подобных прологам, и динамических языков сценариев /OO/multi -paradigm, таких как Ruby или Python!).

Ваша задача, как вы ее описываете, должна быть простой в любой из этих групп языков - так что выбирайте один и идите на это! Мы будем рады помочь с любыми вопросами, которые должны были spring от этих попыток (я лично незнаком с F # или Scala, но был бы рад помочь с Haskell, любым языком семейства ML, Scheme или Erlang - и аналогично для других групп; -).

Серьезно: полная команда по крайней мере одного языка в каждой широкой категории (процедурная, функциональная, декларативная/унифицированная единица, реляционная, динамическая/мультипарадигма и т.д.) делает вас серьезным программистом - маджонг отдельно (и это классически популярная игра в регионе Романья в Италии, недалеко от моего родного города Болонья;-), любая задача, которая может добавить к вашему реестру в этом отношении, стоит того, чтобы приступить!!!

Ответ 2

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

Я пытался сделать AI с использованием java раньше, основываясь на том, что я сделал в Prolog. Я думал, что это будет сука, чтобы закодировать. Тем не менее, у меня просто было несколько методов, которые выполняли большую работу по ворчанию, вынимая ее из основных методов, и она отлично работала.

Вам может потребоваться изобретать колесо, но на С# не может быть много чего вы можете сделать в F #.

note: Я никогда не слышал о F # раньше, но это не может быть так плохо. Я могу/не могу выдувать свою собственную задницу.