Estoy escribiendo un Mahjong Game en C# (el juego tradicional chino, no el solitario). Mientras escribía el código para la IA del jugador bot, me pregunto si un lenguaje funcional como F # sería un lenguaje más adecuado que el que uso actualmente, que es C# con mucho Linq. No sé mucho sobre F # y por eso pregunto aquí.¿Es F # un buen lenguaje para los juegos de cartas AI?
Para ilustrar lo que intento de resolver, aquí está un resumen rápido de Mahjong:
Mahjong juega un poco como Gin Rummy. Tienes 13 fichas en tu mano, y cada turno, dibujas una ficha y descartas otra, tratando de mejorar tu mano hacia una mano ganadora de Mahjong, que consiste en 4 series y un par. Los sets pueden ser 3 de una clase (pungs), 4 de una clase (kongs) o una secuencia de 3 tiles consecutivos (chows). También puedes robar el descarte de otro jugador, si puede completar uno de tus sets.
El código que tuve que escribir para detectar si el bot puede declarar 3 tiles consecutivos (chow) es bastante tedioso. Tengo que encontrar todas las fichas únicas en la mano, y luego comenzar a verificar si hay una secuencia de 3 fichas que contienen esa en la mano. Detectar si el bot puede ser Mahjong es aún más complicado ya que es una combinación de detectar si hay 4 sets y un par en su mano. Y eso es solo una mano estándar de Mahjong. También hay numerosas manos "especiales" que rompen esas reglas pero siguen siendo una mano de Mahjong. Por ejemplo, "13 maravillas únicas" se compone de 13 mosaicos específicos, "Jade Empire" consiste en solo mosaicos de color verde, etc.
En un mundo perfecto, me encantaría poder simplemente establecer las 'reglas' de Mahjong, y tienen el lenguaje capaz de hacer coincidir un conjunto de 13 fichas con esas reglas para recuperar las reglas que cumple, por ejemplo, verificar si es una mano de Mahjong o si incluye un 4 de una clase. ¿Es esto algo que la característica de coincidencia de patrones de F # puede ayudar a resolver?