-
Notifications
You must be signed in to change notification settings - Fork 4
/
Part1-3.elm
98 lines (43 loc) · 1.34 KB
/
Part1-3.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import Graphics.Element exposing (..)
import Time
import Window
import Color exposing (..)
import Graphics.Collage exposing (..)
import Graphics.Element exposing (..)
import Keyboard
import Text exposing (monospace, fromString)
import Time exposing (..)
import Window
import Signal exposing ((<~), (~), foldp, sampleOn)
import Debug exposing (log)
type H = H
delta : Signal Time
delta = inSeconds <~ fps 35
-- Let's thing a little about the game inputs
type Direction = Up | Stopped | Down
type alias Input = {paddle1:Direction, paddle2:Direction, delta:Time }
dirToInt : Direction -> Int
dirToInt dir =
case dir of
Up -> 1
Stopped -> 0
Down -> -1
intToDir : Int -> Direction
intToDir x =
if | x == 1 -> Up
| x == (-1) -> Down
| otherwise -> Stopped
-- Exercise 1.2
-- Using the helper function we defined before `recordToDir`, create a signal that represents the game input over time
-- Hint:
-- - remember `Input` can be used as a function
-- - the overall goal is to build the Input from three Signals
input : Signal Input
input = sampleOn delta <| H
main : Signal Element
main = Signal.map show input
--
-- Supporting functions and data structures from previous exercises
--
recordToDir : { x : Int, y : Int } -> Direction
recordToDir = intToDir << .y