2009-07-01 59 views
10

我正在用C#寫一個麻將遊戲(中國傳統遊戲,而不是單人紙牌遊戲)。在爲機器人播放器的AI編寫代碼時,我想知道像F#這樣的函數式語言是否會比我當前使用的語言更合適,哪些語言是C#和很多Linq。我不太瞭解F#,這就是我爲什麼要問這裏的原因。F#是紙牌遊戲AI的良好語言嗎?

爲了說明什麼,我試圖解決,這裏的麻將的快速摘要:

麻將扮演一個有點像拉米牌戲。你手上有13塊瓷磚,每轉一圈,你畫一塊瓷磚,丟棄另一塊瓷磚,試圖提高你的手朝着一個贏得的麻將手,其中包括4組和一對。集合可以是一種(pungs)的3種,4種(kongs)或3種連續瓦片(chows)的序列。如果它可以完成你的一套,你也可以偷走另一名玩家的棄牌。

我必須編寫的代碼來檢測機器人是否可以聲明3個連續的tile set(chow)非常繁瑣。我必須在手中找到所有獨特的瓷磚,然後開始檢查是否有一系列包含該瓷磚的瓷磚。檢測機器人是否可以去麻將更加複雜,因爲它是檢測手中是否有4組和一對的組合。這只是一個標準的麻將手。也有許多「特殊」手牌違反了這些規則,但仍然是麻將手牌。例如,「13個獨特的奇蹟」由13個特定的瓷磚組成,「翡翠帝國」由只有綠色的瓷磚組成,等等。

在一個完美的世界中,我希望能夠陳述'規則'的麻將,並且能夠根據這些規則匹配一組13個牌來檢索它實現的規則,例如,檢查它是否是麻將牌或者是否包括麻將牌4。這是F#的模式匹配功能可以幫助解決的嗎?

回答

7

如果你熟悉功能語言,它們是編寫遊戲AI的好方法 - 如果你不是,學習它的挑戰將會幫助你成長,併爲你留下比你更好的程序員。是。 (我可以對聲明性Prolog類語言和動態腳本/ OO /多範式語言(比如Ruby或Python)如實說相同 - )。

你描述它的任務應該很容易適用於這些語言組合中的任何一個 - 所以選擇一個就可以了!我們將很樂意幫助解決這些嘗試中的任何問題(我個人對F#或Scala不熟悉,但很樂意幫助Haskell,任何ML家族語言,Scheme或Erlang),以及對其他組也是如此;-)。

認真:在每個大類(程序,功能齊全,聲明/條款統一,關係,動態/多模式等)至少一種語言的完整的命令使你成爲一個認真更好的程序員 - 麻將分開(它是意大利羅馬涅地區的一個經典流行的遊戲,靠近我的家鄉博洛尼亞;-),任何可以在這方面增加您的名單的任務是以及值得承擔!

1

沒有什麼你不能讓自己出現在另一種語言。

我已經嘗試使用java之前使用java,基於我在Prolog中完成的。我認爲這將是一個婊子代碼。然而,我只是有幾個方法做了很多煩瑣的工作,把它從主要方法中解放出來,並且工作起來非常棒。

您可能需要重新發明輪子,但在C#中不應該做太多的事情,您可以在F#中完成。

注:我從來沒有聽說過F#,但它不能那麼糟糕。我可能會/可能不會吹出我自己的屁股。