如何在Code World Haskell中制作动画 风筝移动作业问题求助
你使用的是教育简化版CodeWorld Haskell
你学的不是标准Haskell,是Code World平台为低龄学习者定制的简化方言,语法省略了类型签名、main函数定义等复杂规则,所有和普通Haskell语法一致的网上示例都不能直接复制使用。不需要额外导入其他库,Double not in scope报错就是因为你写了标准Haskell的类型声明,简化版不识别这类类型关键字,删掉所有类型签名即可。
两帧循环动画实现方法
你写的两个帧代码可以直接复用,按下面的逻辑补充即可:
- 用
animationOf传入一个接收时间参数的绘图函数,函数根据时间判断返回哪一帧 - 用
pictures()把你定义的图形列表转成可渲染的Picture类型 - 不需要写任何类型签名、不需要定义main,直接用
program = animationOf(函数名)的格式
示例完整代码:
frame1 = [ kite(3,6,"red"), kite(-5,5,"purple"), kite(3,-5,"lightpink"), stickfig, painted(solidRectangle(20,20),"sky blue")] frame2 = [ kite(3.5,6.5,"red"), kite(-4.5,4.5,"purple"), kite(3.5,-5.5,"lightpink"), stickfig, painted(solidRectangle(20,20),"sky blue")] drawFrame t | round(t * 2) `mod` 2 == 0 = pictures(frame1) | otherwise = pictures(frame2) program = animationOf(drawFrame)
代码里t * 2控制切换速度,数值越大帧切换越快,调整这个值就能得到你要的风筝小幅移动的效果。
学习资源建议
优先使用课程配套的课件和Code World平台内置的示例,所有公开的CodeWorld API文档都是针对标准Haskell版本的,和你用的简化版语法不匹配,不需要浪费时间查阅。
内容的提问来源于stack exchange,提问作者Austin Alleman
相关产品推荐
相关产品推荐

