-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGameField.hs
97 lines (84 loc) · 3.3 KB
/
GameField.hs
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
module GameField where
import Car
--import qualified Graphics.UI.GLFW as GLFW
import Graphics.Gloss
import Graphics.Gloss.Data.ViewPort
import Graphics.Gloss.Interface.Pure.Game
--import Control.Monad.IO.Class
--import System.IO.Unsafe
data GameField = GameField {
car1 :: Car,
car2 :: Car,
walls :: [(Float, Float)]
}deriving (Show)
newCar1 :: Car -> GameField -> GameField
newCar1 car1 (GameField _ car2 w) = GameField car1 car2 w
newCar2 :: Car -> GameField -> GameField
newCar2 car2 (GameField car1 _ w) = GameField car1 car2 w
drawField :: GameField -> Picture
drawField (GameField car1 car2 walls) = pictures [car1', car2', walls']
where
car1' = drawCar car1
car2' = drawCar car2
walls' = color green $ line $ walls
updateField :: Float -> GameField -> GameField
updateField seconds (GameField car1 car2 w) = GameField (moveCar seconds w car1 car2) (moveCar seconds w car2 car1) w
handleKeys :: Event -> GameField -> GameField
handleKeys (EventKey (Char 'w') _ _ _) (GameField car1 car2 w) =
if direcction car1 /= (0 , -1) then
newCar1 (car1 {direcction = (0, 1)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
handleKeys (EventKey (Char 's') _ _ _) (GameField car1 car2 w) =
if direcction car1 /= (0 , 1) then
newCar1 (car1 {direcction = (0, -1)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
handleKeys (EventKey (Char 'd') _ _ _) (GameField car1 car2 w) =
if direcction car1 /= (-1 , 0) then
newCar1 (car1 {direcction = (1, 0)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
handleKeys (EventKey (Char 'a') _ _ _) (GameField car1 car2 w) =
if direcction car1 /= (1 , 0) then
newCar1 (car1 {direcction = (-1, 0)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
handleKeys (EventKey (SpecialKey KeyUp) _ _ _) (GameField car1 car2 w) =
if direcction car2 /= (0 , -1) then
newCar2 (car2 {direcction = (0, 1)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
handleKeys (EventKey (SpecialKey KeyDown) _ _ _) (GameField car1 car2 w) =
if direcction car2 /= (0 , 1) then
newCar2 (car2 {direcction = (0, -1)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
handleKeys (EventKey (SpecialKey KeyRight) _ _ _) (GameField car1 car2 w) =
if direcction car2 /= (-1 , 0) then
newCar2 (car2 {direcction = (1, 0)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
handleKeys (EventKey (SpecialKey KeyLeft) _ _ _) (GameField car1 car2 w) =
if direcction car2 /= (1 , 0) then
newCar2 (car2 {direcction = (-1, 0)}) (GameField car1 car2 w)
else (GameField car1 car2 w)
--рестарт
handleKeys (EventKey (Char 'r') _ _ _) _ = initField
handleKeys _ gf = gf
size1 = 270
initField :: GameField
initField = GameField (Car { carWidth = 1,
carHeight = 1,
start_position = (40,-250),
position = (40,-250),
start_dir = (0, 1),
direcction = (0,1),
speed = 150,
carPath = [(40,-250)],
carColor = blue
})
(Car { carWidth = 1,
carHeight = 1,
start_position = (40,250),
position = (40,250),
start_dir = (0, -1),
direcction = (0,-1),
speed = 150,
carPath = [(40,250)],
carColor = orange
})
[(-size1, size1), (size1, size1), (size1, -size1), (-size1, -size1), (-size1, size1)]