2009-07-01 13 views
10

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?

Respuesta

7

Si está familiarizado con los lenguajes funcionales, son una gran manera de escribir AI de juegos, y si no lo está, el desafío de aprender uno lo ayudará a crecer, y lo dejará como un mejor programador que usted. fueron. (De verdad puedo decir lo mismo de los lenguajes declarativos de Prolog, y los lenguajes de scripting dinámico/OO/multi-paradigma como Ruby o Python! -).

Su tarea tal como la describe debería ser fácil en cualquiera de estos grupos de idiomas, así que elija una y ¡adelante! En conjunto, nos complacerá ayudar con cualquier pregunta que surja de estos intentos (personalmente no estoy familiarizado con F # o Scala, pero me complacería ayudar con Haskell, cualquier lenguaje de familia ML, Scheme o Erlang, y de manera similar para los otros grupos ;-).

En serio: pleno dominio de al menos una lengua en cada categoría amplia (procedimental, funcional, declarativa/cláusula de unificación, relacional/multi-paradigma dinámico, etc) te convierte en un serio mejor programador - mahjong aparte (y es un juego clásicamente popular en la región de Romagna de Italia, cerca de mi ciudad natal Bolonia ;-), cualquier tarea que pueda agregar a su lista en este sentido es ¡bien que vale la pena emprender!

1

No hay nada que no puedas hacer tú mismo que aparezca en otro idioma.

He intentado hacer AI usando java antes, en base a lo que había hecho en Prolog. Pensé que sería una puta codificar. Sin embargo, solo tenía un par de métodos que hacían gran parte del trabajo pesado, quitándolo de los métodos principales, y funcionaba maravillosamente.

Puede que necesite reinventar la rueda, pero no debe haber mucho que no pueda hacer en C# que pueda en F #.

nota: nunca antes había oído hablar de F #, pero no puede ser tan malo. Puedo/no puedo estar soplando de mi propio culo.

Cuestiones relacionadas