使用Haskell编写一个简单的金字塔游戏
发布时间:2023-12-09 15:24:05
下面是一个使用Haskell编写的简单金字塔游戏的代码示例:
import Data.List
-- 生成金字塔层数为n的列表
generatePyramid :: Int -> [Int]
generatePyramid n = [1..n] ++ [n-1,n-2..1]
-- 打印金字塔
printPyramid :: Int -> IO ()
printPyramid n = mapM_ putStrLn $ map (center n) $ map (concatMap show) $ map (flip take [1..]) $ generatePyramid n
where
center n xs = replicate ((maxWidth - length xs) div 2) ' ' ++ xs
maxWidth = length $ concatMap show $ generatePyramid n
-- 检查用户输入的答案是否正确
checkAnswer :: Int -> Int -> Bool
checkAnswer n guess = guess == sum (generatePyramid n)
-- 主函数,用于交互
main :: IO ()
main = do
putStrLn "欢迎来到金字塔游戏!请输入金字塔的层数:"
n <- readLn
putStrLn "金字塔已生成,请输入您的答案:"
guess <- readLn
if checkAnswer n guess
then putStrLn "恭喜您,答案正确!"
else putStrLn "很遗憾,答案错误!"
以上代码实现了一个简单的金字塔游戏,游戏的规则如下:
- 用户需要输入一个整数n作为金字塔的层数。
- 程序将根据输入的层数生成一个金字塔,金字塔的每一层都是连续的整数,从1到n。
- 用户需要输入一个整数作为他们猜测的金字塔的所有数字的和。
- 程序将检查用户的答案是否正确,如果正确则输出"恭喜您,答案正确!",否则输出"很遗憾,答案错误!"。
以下是一个使用该程序的示例交互:
欢迎来到金字塔游戏!请输入金字塔的层数: 5 金字塔已生成,请输入您的答案: 35 恭喜您,答案正确!
欢迎来到金字塔游戏!请输入金字塔的层数: 3 金字塔已生成,请输入您的答案: 10 很遗憾,答案错误!
在以上示例中,用户依次输入了金字塔的层数和他们猜测的金字塔的所有数字的和。程序根据用户的答案进行校验,并输出相应的结果。
