数猜测游戏错误并保持猜测次数 [英] Number guessing game error and keeping count of guesses

查看:127
本文介绍了数猜测游戏错误并保持猜测次数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Haskell做了一个数字猜测游戏,我有3个难题。

我做了一个菜单,用户选择什么难度,但是一旦我实现了它,它开始给我一个错误,我可以不知道它是什么。

错误:

  finalename.hs:5:10: 
模式中的解析错误:putStrLn
可能由缺少'do'引起?

另外,我将如何执行一个计数,其中计算用户需要多少次猜测?

  import System.Random(randomRIO)
main :: IO()
main = do
putStrLn你想玩1)轻松,2)中等或3)硬
putStrLn通过输入数字1,2或3来选择难度
choice< - readLn
|选择== 1 =您选择简单>>容易
|选择== 2 =您选择了媒体>>中等
|选择== 3 =您选择的很难>>硬
| otherwiose =您没有选择有效的选择>> main

easy :: IO()
easy = do
putStrLn猜测1和13之间的数字:
rNumber < - randomRIO(1,10 ):: IO Int
loop rNumber

medium :: IO()
medium = do
putStrLn猜测1到25之间的数字:
rNumber< - randomRIO(1,25):: IO Int
loop rNumber

hard :: IO()
hard = do
putStrLn猜一猜1到50之间的数字:
rNumber< - randomRIO(1,50):: IO Int
loop rNumber

loop :: Int - > IO()
循环rNumber = do
userInput< - readLn
大小写比较rNumber userInput
EQ - > putStrLn正确! >>主
LT - > putStrLn猜测太低,请再试一次>>循环rNumber
GT - > putStrLn猜得太高了,请再试一次>>循环rNumber


解决方案

您需要更改<$ c $

 循环函数可以跟踪猜测的数字和猜测次数: loop :: Int  - > Int  - > IO()
循环rNumber猜测=做
putStrLn $你已经做出了++显示猜测++的猜测。
...
putStrLn太低,再猜一次
循环rNumber(猜测+ 1)
...
putStrLn要高,再猜一次
loop rNumber(gpsses + 1)

请注意,当您调用循环递归地通过传递旧猜测计数+1来改变猜测计数。


I am doing a number guessing game in Haskell and I have 3 difficulties.
I made a menu where the user selects what difficulty but once I implemented it, it started giving me an error and I can't figure out what it is.
The error:

finalename.hs:5:10:
Parse error in pattern: putStrLn
Possibly caused by a missing 'do'?

Also how would I go about implementing a count where it counts how many times it takes for the user to guess?

import System.Random (randomRIO)     
main :: IO ()
main = do
     putStrLn "Do you want to play 1) Easy, 2) Medium or 3) Hard"
     putStrLn "Select your difficulty by entering a number 1, 2 or 3"
     choice <- readLn
       | choice == 1 = "You selected easy" >> easy
       | choice == 2 = "You selected medium" >> medium
       | choice == 3 = "You selected hard" >> hard
       | otherwiose = "You did not selected a valid choice" >> main

easy :: IO ()
easy = do
     putStrLn "Guess a number between 1 and 13: "
     rNumber <- randomRIO (1, 10) :: IO Int
     loop rNumber

medium :: IO ()
medium = do
     putStrLn "Guess a number between 1 and 25: "
     rNumber <- randomRIO (1, 25) :: IO Int
     loop rNumber

hard :: IO ()
hard = do
     putStrLn "Guess a number between 1 and 50: "
     rNumber <- randomRIO (1, 50) :: IO Int
     loop rNumber

loop :: Int -> IO ()
loop rNumber = do
       userInput <- readLn 
       case compare rNumber userInput of
         EQ -> putStrLn "Correct!" >> main
         LT -> putStrLn "Guess is too low, try again please" >> loop rNumber
         GT -> putStrLn "Guess is too high, try again please" >> loop rNumber

解决方案

You need to change your loop function to keep track of both the number to guess and the number of guesses:

loop :: Int -> Int -> IO ()
loop rNumber guesses = do
  putStrLn $ "You have made " ++ show guesses ++ " guesses so far."
  ...
  putStrLn "Too low, guess again"
  loop rNumber (guesses+1)
  ...
  putStrLn "To high, guess again"
  loop rNumber (guesses+1)

Note how when you call loop recursively you change the guess count by passing in the old guess count + 1.

这篇关于数猜测游戏错误并保持猜测次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆