Haskell で SDL

tar -zxvf SDL2-*
  • 解凍してできたフォルダに移動
  • 次のコマンドを實行する
./configure && make -j4 && sudo make install
stack new myproject

などとする(ここで myproject は仮の名前であるーー實際は 好きな名前にする)

cd myproject
  • package.yaml といふファイルがある筈だ
    これを編集する
  • dependencies: といふところに - sdl2 を加える
dependencies:
- base >= 4.7 && < 5
- sdl2
  • イメージの讀み込みを實驗するため mkdir images などとして
    イメージファイル用のディレクトリを作る
  • その中に何らかのビットマップファイル(拡張子が .bmpのもの)を入れる
    私の場合は kagunomi.bmp といふものを入れた
  • app といふディレクトリがある筈だ
    そこにある Main.hs を編集する
vi app/Main.hs

上の例は エディタとしてvimを使った場合だが
編集できれば何でもよい

{-# LANGUAGE OverloadedStrings #-}
module Main where

--import Lib
import SDL
import Control.Monad (unless)

main :: IO ()
main = do
  initializeAll
  let myWindow = defaultWindow {windowInitialSize =  V2 480 600}
  window <- createWindow "FuncPong" myWindow
  image <- loadBMP "./images/kagunomi.bmp"
  renderer <- createRenderer window (-1) defaultRenderer
  texture <- createTextureFromSurface renderer image
  appLoop renderer texture 
  destroyWindow window

appLoop :: Renderer -> Texture -> IO ()
appLoop renderer texture = do
  events <- pollEvents
  let eventIsQPress event =
        case eventPayload event of
          KeyboardEvent keyboardEvent ->
            keyboardEventKeyMotion keyboardEvent == Pressed &&
            keysymKeycode (keyboardEventKeysym keyboardEvent) == KeycodeQ
          _ -> False
      qPressed = any eventIsQPress events
  rendererDrawColor renderer $= V4 182 100 255 255
  clear renderer
  rendererDrawColor renderer $= V4 0 0 0 255
  drawPoint renderer (P (V2 100 100))
  drawLine renderer (P (V2 50 50)) (P (V2 80 80))
  rendererDrawColor renderer $= V4 100 100 100 255
  fillRect renderer (Just (Rectangle (P (V2 200 200)) (V2 100 100)))
  copy renderer texture Nothing (Just (Rectangle (P (V2 30 300)) (V2 100 100))) 
  present renderer
  unless qPressed (appLoop renderer texture)
  • 自分が myproject ディレクトリ(好きな名前のディレクトリ)のすぐ下に居ることを確認する
  • そこで stack build を實行する
  • めでたく エラーが出なければ
stack exec myproject-exe

などとして實行する(myproject の部分は 最初に stack new の後に入力した名前だ)

といふ感じで 取り急ぎ 私が實行した手順をまとめてみた
色々言ひたいこともあるが それは順次 書き足していかうと思ふ