2016-08-31 12 views
0

В начале программы, пользователь может дать Имитационной некоторую «информацию»:Дайте больше «информацию» для функции Simulate (Haskell/Gloss библиотека)

main:: IO() 
     main = do 
     putStrLn("Hallo") 
     val <- getLine 
     startGUI(read val ::Float) 

Функция (startGUI):

startGUI :: Float -> IO() 
startGUI si = simulate window background fps initialState render $ moveBall si 

Запускает функцию, которая является своего рода циклом для моделирования. Это в основном обновляет игру.

Функция moveBall определяется как:

moveBall :: Float -> Float -> PongGame -> PongGame 
moveBall seconds go game = game { ballLoc = (x', y') } 
... 

сообщение об ошибке, которое я получаю:

Couldn't match type ‘PongGame’ with ‘PongGame -> PongGame’ 
    Expected type: ViewPort -> Float -> PongGame -> PongGame 
     Actual type: Float -> PongGame -> PongGame 
    Possible cause: ‘moveBall’ is applied to too many arguments 
    In the second argument of ‘($)’, namely ‘moveBall si’ 
    In the expression: 
     simulate window background fps initialState render $ moveBall si 

это относится к функции startGUI.

Заранее спасибо.

ответ

1

Ключом для передачи информации о старте является передача им по функции initalState.

startGUI :: Float -> IO() 
startGUI si = simulate window background fps (initialState si) render update 

Тогда вам просто нужно настроить свой набор данных для игры.