我是函数式编程的初学者我正在尝试制作游戏“猜猜国家”。这是我编写的代码 - 如何添加更多复杂性?我需要一些想法 - 我想在他/她说出正确答案之后给予玩家一些积分,但我不知道如何添加它。
Assert.Throws
答案 0 :(得分:2)
这可能有点高级,但完整的Twenty Questions游戏在以下两个StackExchange Q& A&#39}中描述:How do 20 questions AI algorithms work?和How can I implement a “20 Questions” algorithm?(有图纸+答案)来自20Q.net)的作者。
也许你应该更具体地问自己,与目前的游戏相比,复杂程度只有很小的增加,你可以制作什么样的游戏。随机性让游戏变得有趣。您当前的游戏有固定的路径。
例如,您可以制作一个简单的游戏,最终目标是guess a random number,程序会提供"更高/更低"提示。有人已经这样做并将他们的代码提交给Code Review Stack Exchange:Number Guessing Game in Haskell,正如@leftaroundabout建议的那样。
由于这个问题已经在网上提供了很好的解决方案,你必须想出一个只能自己解决的问题,以确保你能够学习。猜数游戏的扭曲可能是玩家猜测次数的上限。
下一步可能是制作一个随机的国家猜谜游戏,其中每个国家的提示仍然是固定的,但该国家是随机选择的。一旦您了解了程序的流程,就可以定义一种模拟游戏内容的数据类型。例如,
type Country = String
type Hint = String
countries :: [(Country, [Hint])]
countries = [ ("Denmark", [ "It is the smallest of Scandinavian countries."
, "It is the oldest kingdom in the world."
, ...
]
, ("Turkey", [ "It was established as a republic in 1923."
, "It is named after its founder, Kemal Atatürk."
])
, ...
]
这样,您的程序逻辑就会独立于您所拥有的任何特定问题。这意味着您可以通过填写数据来扩大游戏规模,而不是进一步使游戏逻辑复杂化。
你可以(a)建立一个选择随机国家的机制,(b)建立一个机制来阅读可能的答案并确定他们是否已经是的,并且(c)构建了一个机制,用于提供更多提示并计算需要多少提示,直到您用完提示。
选择一个随机的国家/地区,您可以通过“猜测随机数字游戏”来学习如何操作"。选择一个随机国家,然后从列表中选择一个随机元素,上面的countries :: [(Country, [Hint])]
表示选择(Country, [Hint])
类型的随机元素。
阅读可能的答案并确定它们是否正确,将answer <- getLine
与您随机绘制的Country
类型的值进行比较。
提示提示变得更加复杂,因为你需要循环提示列表,在请求时给出一个新提示,并且在没有更多提示时以某种方式让玩家失望。一旦你有一个工作游戏(对于一些工作定义),考虑将其提交给Code Review Stack Exchange。最好将目标设定得较低,并通过一些子游戏来完成,而不是提交一堆不起作用的代码,目标不明确,你的理解水平不高。 #39; t达到目标水平。这只会让审稿人感到沮丧,因为可能会对您进行适当的审核。