2017-02-23 11 views
2

Я работаю над своим третьим проектом Haskell для своего класса в этом семестре, и мы перешли от мира привет, к простой математике, к анимации символов ASCII с использованием Haskell, и я полностью ошеломлен для этого проекта. Мой профессор ничего не знает на своем веб-сайте об этом, и документация для System.Console.ANSI не очень полезна. Я не могу найти никаких примеров об этом в Интернете после обширного поиска.ASCII Animation Использование System.Console.ANSI

Кто-нибудь сделал это или, по крайней мере, сказал мне, если я пойду в правильном направлении?

Первый вопрос этот


[16] Используйте библиотеку System.Console.ANSI нарисовать цвет рамки на основе чертежа [4]. Это должно быть не менее 8 строк на 16 столбцов [4] и иметь как минимум 2 кадра [8], которые должны чередоваться бесконечно. Назовите этот цвет-comic.hs.


мой цвет-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 всегда работал для меня. Правильно ли я это делаю?

цвет-comic.hs: 39: 5: Ошибка синтаксического анализа на входе

Второй вопрос «» putStrLn намного сложнее, но я думаю, что у меня есть идея, как сделать это


[32] Используйте библиотеку System.Console.ANSI для рисования цветной анимации в ASCII. Анимация должна составлять 25 строк x 60 столбцов [8], частота кадров 30 Гц [4], длятся не более 10 секунд [4], используйте по крайней мере три цвета [8], чтобы не было двух последовательных кадров в анимации одинаковы [8] и являются уникальными [-32].


Для приведенного выше вопроса, который я мог бы просто сделать блок # в правильных размерах, а затем изменить цвет каждой строки в последовательности, а затем перерисовывать весь блок с цветом толкнул вниз один и новый цвет добавлено и так далее. Я не уверен, как это сделать.

Любая помощь глубоко оценена, я просто пытаюсь учиться.

+1

Если вы на самом деле компиляции строки 'printBlock :: IO() // печать 8х16 block' (и иже с ним), то, конечно, ваш код не может разобрать -' '// не Haskell синтаксис комментариев. [Здесь] (https://www.haskell.org/onlinereport/haskell2010/haskellch10.html) является ссылкой на синтаксис Haskell. – user2407038

ответ

1

Я смог сделать бесконечную вспышку, используя рекурсию, которая по какой-то причине не заставляла ее висеть раньше.

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 
Смежные вопросы