使用 System.Console.ANSI 的 ASCII 动画

sbowde4

本学期我在我的班级上进行我的第三个 Haskell 项目,我们从 hello world 到简单的数学,再到使用 Haskell 为 ASCII 字符设置动画,我对这个项目完全傻眼了。我的教授在他的网站上没有任何关于此的内容,System.Console.ANSI 的文档也不是很有帮助。经过广泛搜索,我也无法在网上找到任何关于此的示例。

有没有人这样做过,或者至少告诉我我是否朝着正确的方向前进?

第一个问题是这个


[16] 使用 System.Console.ANSI 库绘制基于框架的彩色绘图 [4]。它必须至少有 8 行 x 16 列 [4] 并且至少有 2 帧 [8],它们应该无限交替。将此称为 color-comic.hs。


我的 color-comic.hs 看起来像这样

module Main (
        main
    ) where

import System.Console.ANSI
import System.IO

import Control.Concurrent


colorComic :: [IO ()]
colorComic = [printBlock, flashBlue, flashRed]


main :: IO ()
main = do 
    colorComic

pause :: IO ()
pause = do
    hFlush stdout
    -- 1 second pause
    threadDelay 1000000


flashRed :: IO ()//change text color to red
flashRed = do 
    setSGR [SetColor Foreground Vivid Red]
    pause

flashBlue :: IO ()//change text color to blue
flashBlue = do
    setSGR [SetColor Foreground Vivid Blue]
    pause

printBlock :: IO ()// print 8x16 block
printBlock = do
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"

我不明白如何让它无限运行,我收到这个错误,我不知道为什么,putStrLn一直对我有用。我这样做正确吗?

color-comic.hs:39:5:输入'putStrLn'解析错误

第二个问题要困难得多,但我想我知道如何做到这一点


[32] 使用 System.Console.ANSI 库以 ASCII 绘制彩色动画。动画应为 25 行 x 60 列 [8],帧速率为 30 Hz [4],持续时间不超过 10 秒 [4],至少使用三种颜色 [8],确保没有连续的两个帧在动画中是相同的 [8],并且是唯一的 [-32]。


对于上面的问题,我可以简单地以正确的尺寸制作一个#块,然后连续更改每一行的颜色,然后重新绘制整个块,将颜色向下推一个并添加新颜色,依此类推。我不知道如何做帧率。

任何帮助都深表感谢,我只是想学习。

sbowde4

我能够通过使用递归来制作无限闪光,由于某种原因,它以前没有挂起。

module Main (
        main
    ) where

import System.Console.ANSI
import System.IO

import Control.Concurrent


colorComic :: [IO ()]
colorComic = [printBlock]


main :: IO ()
main = mapM_ (\color_comic -> resetScreen >> color_comic) colorComic

resetScreen :: IO ()
resetScreen = clearScreen >> setSGR [Reset] >> setCursorPosition 0 0

pause :: IO ()
pause = do
    hFlush stdout
    -- 1 second pause
    threadDelay 1000000


printBlock :: IO ()
printBlock = do
    clearScreen >> setCursorPosition 0 0
    setSGR [SetColor Foreground Vivid Red]
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    pause
    clearScreen >> setCursorPosition 0 0
    setSGR [SetColor Foreground Vivid Blue]
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    putStrLn "################"
    pause
    printBlock

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

添加颜色后基于简单jQuery的简单ASCII动画崩溃

来自分类Dev

使用.gif的动画启动画面

来自分类Dev

测试使用System.console()的Groovy类

来自分类Dev

使用UIImageView动画创建平滑的动画

来自分类Dev

使用angularjs动画制作div动画

来自分类Dev

使用NO动画执行segue?

来自分类Dev

使用右边距动画

来自分类Dev

使用System.console()读取密码

来自分类Dev

在vb.net中使用ANSI代码

来自分类Dev

在zsh提示中使用ANSI转义序列

来自分类Dev

How to read/write extended ASCII characters as a string into ANSI coded text file in java

来自分类Dev

使用Cartopy制作动画

来自分类Dev

使用gif的MATLAB动画启动画面

来自分类Dev

Haskell中的System.Console.ANSI,重置终端标题。

来自分类Dev

使用JavaScript的球动画

来自分类Dev

轻松使用CSS动画

来自分类Dev

使用StreamBuilder制作动画

来自分类Dev

Python上的ASCII动画

来自分类Dev

是否使用ASCII 19?

来自分类Dev

Win32 :: Console :: ANSI和uri_unescape

来自分类Dev

使用动画可绘制显示动画

来自分类Dev

使用angularjs动画制作div动画

来自分类Dev

在vb.net中使用ANSI代码

来自分类Dev

在命令行中查看过的ASCII动画?

来自分类Dev

使用C和Visual Studio 2015的ANSI

来自分类Dev

ANSI C strstr()无法使用指针

来自分类Dev

如何使用 UIViewPropertyAnimator 创建重复动画的动画?

来自分类Dev

NodeJS - 使用 ANSI 编码保存 TXT 文件

来自分类Dev

在 .htaccess 中使用 ASCII